BukkitMybatis is a Bukkit/Spigot plugin that provides MyBatis + HikariCP integration and auto-loads Mapper XML from your plugin. This README is for users who install it on a server and call it from their own plugins.
- Java 21+
- Spigot 1.20.1+
- MySQL 8.0+ (recommended)
- Copy
BukkitMybatis-1.0-SNAPSHOT-shaded.jarto the serverplugins/folder. - Start the server to generate the default config.
Edit plugins/BukkitMybatis/mybatis-config.xml and fill in your DB connection:
<configuration>
<settings>
<setting name="logImpl" value="${mybatis.logImpl}"/>
</settings>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="com.cuzz.bukkitmybatis.datasource.HikariDataSourceFactory">
<property name="jdbcUrl" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="maximumPoolSize" value="10"/>
<property name="minimumIdle" value="5"/>
<property name="connectionTimeout" value="30000"/>
</dataSource>
</environment>
</environments>
</configuration>These override values in mybatis-config.xml.
Database (required):
BUKKIT_MYBATIS_JDBC_URLBUKKIT_MYBATIS_USERNAMEBUKKIT_MYBATIS_PASSWORD
Logging (optional):
BUKKIT_MYBATIS_LOG_IMPL(defaultcom.cuzz.bukkitmybatis.logging.BukkitMybatisLog)BUKKIT_MYBATIS_LOG_LEVEL(defaultINFO)BUKKIT_MYBATIS_LOG_DIR(defaultplugins/BukkitMybatis/mybatis)
Loki (optional):
BUKKIT_MYBATIS_LOKI_URLBUKKIT_MYBATIS_LOKI_TENANTBUKKIT_MYBATIS_LOKI_USERNAMEBUKKIT_MYBATIS_LOKI_PASSWORDBUKKIT_MYBATIS_LOKI_LABELS(format:key1=value1,key2=value2)BUKKIT_MYBATIS_LOKI_DEBUG(set totrueto write debug logs toplugins/BukkitMybatis/mybatis/loki-debug.log)
Loki example (your domain):
export BUKKIT_MYBATIS_LOKI_URL="xxxxx"
export BUKKIT_MYBATIS_LOKI_TENANT=""
export BUKKIT_MYBATIS_LOKI_USERNAME=""
export BUKKIT_MYBATIS_LOKI_PASSWORD=""
export BUKKIT_MYBATIS_LOKI_LABELS="server=bukkit,env=prod"Linux/macOS example:
export BUKKIT_MYBATIS_JDBC_URL="jdbc:mysql://127.0.0.1:3306/demo"
export BUKKIT_MYBATIS_USERNAME="root"
export BUKKIT_MYBATIS_PASSWORD="123456"
export BUKKIT_MYBATIS_LOG_LEVEL="INFO"Windows PowerShell example:
$env:BUKKIT_MYBATIS_JDBC_URL="jdbc:mysql://127.0.0.1:3306/demo"
$env:BUKKIT_MYBATIS_USERNAME="root"
$env:BUKKIT_MYBATIS_PASSWORD="123456"
$env:BUKKIT_MYBATIS_LOG_LEVEL="INFO"Windows CMD (bat) example:
@echo off
set BUKKIT_MYBATIS_JDBC_URL=jdbc:mysql://127.0.0.1:3306/demo
set BUKKIT_MYBATIS_USERNAME=root
set BUKKIT_MYBATIS_PASSWORD=123456
set BUKKIT_MYBATIS_LOG_LEVEL=INFOAdd to your plugin plugin.yml:
depend: [BukkitMybatis]Maven (SNAPSHOT example):
<repositories>
<repository>
<id>nexus-snapshots</id>
<url>https://www.4399mc.cn/nexus/repository/maven-snapshots/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.cuzz</groupId>
<artifactId>BukkitMybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>Gradle (SNAPSHOT example):
repositories {
maven { url "https://www.4399mc.cn/nexus/repository/maven-snapshots/" }
}
dependencies {
compileOnly "com.cuzz:BukkitMybatis:1.0-SNAPSHOT"
}Put your Mapper XML under src/main/resources/mappers/, e.g.:
src/main/resources/mappers/YourMapper.xml
At runtime BukkitMybatis extracts and loads these XML files from your plugin JAR.
public class YourPlugin extends JavaPlugin {
@Override
public void onEnable() {
MapperRegister.registerMappers(this);
}
@Override
public void onDisable() {
MapperRegister.unregisterMapper(this);
}
}try (SqlSession session = BukkitMybatis.getInstance().getSqlSessionFactory().openSession(true)) {
YourMapper mapper = session.getMapper(YourMapper.class);
// TODO: your DB calls
}VirtualDbExecutor.run(session -> {
TestMapper2 mapper = session.getMapper(TestMapper2.class);
Group group = mapper.getGroupByName("AAA");
getLogger().info("group=" + group);
});Optional on plugin disable:
VirtualDbExecutor.shutdown();CREATE TABLE ed_group (
id BIGINT NOT NULL AUTO_INCREMENT,
name VARCHAR(64) NOT NULL,
leader VARCHAR(64) DEFAULT NULL,
leader_id BIGINT DEFAULT NULL,
sort INT NOT NULL DEFAULT 0,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY uk_group_name (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO ed_group (name, leader, leader_id, sort, created_at, updated_at) VALUES
('Alpha', 'Steve', 1001, 1, NOW(), NOW()),
('Bravo', 'Alex', 1002, 2, NOW(), NOW()),
('Charlie', 'Herobrine', 1003, 3, NOW(), NOW()),
('Delta', 'Notch', 1004, 4, NOW(), NOW()),
('Echo', 'Cuzz', 1005, 5, NOW(), NOW()),
('Foxtrot', 'Builder', 1006, 6, NOW(), NOW());- Interface:
src/main/java/com/cuzz/bukkitmybatis/mapper/TestMapper2.java - XML:
src/main/resources/mappers/TestMapper1.xml
try (SqlSession session = BukkitMybatis.getInstance().getSqlSessionFactory().openSession(true)) {
TestMapper2 mapper = session.getMapper(TestMapper2.class);
Group group = mapper.getGroupByName("AAA");
getLogger().info("group=" + group);
}mvn -DskipTests package
mvn -DskipTests deploySNAPSHOT versions are published to distributionManagement nexus-snapshots.