关于“基于Java代码配置MyBatis Generator”的完整攻略,我可以提供如下讲解。
1. MyBatis Generator 简介
MyBatis Generator (MBG) 是 MyBatis 官方提供的一个用于根据数据库表自动生成 Mapper 接口、XML 映射文件和 Model 等代码的工具。MBG 能够根据数据库表结构自动生成一定基础代码,减少手写代码的工作量,提高开发效率。
2. Java 代码配置 MBG
MBG 支持多种方式的配置,其中最常用的方式是基于 XML 配置文件的方式。但在这里,我们将介绍一种基于 Java 代码配置 MBG 的方式。相对于 XML 配置文件,Java 代码配置 MBG 的优点在于能够利用 Java 语言的特性,实现更复杂的动态配置。
2.1 安装 MBG
安装 MBG 有多种方式,例如通过 Maven 依赖、下载官方 Jar 包等。这里我们以 Maven 依赖为例,将 MBG 的依赖添加到项目的 pom.xml 文件中即可。
<dependencies>
...
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.4.0</version>
</dependency>
...
</dependencies>
2.2 创建 Java 代码配置类
创建一个类,命名为 MBGConfig,在该类中进行 Java 代码配置 MBG。首先需要 import MBG 的配置项类和注解:
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.*;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.util.ArrayList;
import java.util.List;
import static org.mybatis.generator.internal.util.StringUtility.isTrue;
接着,创建一个 main 方法,依次设置各项配置,并调用 MyBatisGenerator 进行代码生成:
public class MBGConfig {
public static void main(String[] args) {
try {
// 创建 MBG 配置项
Configuration config = new Configuration();
Context context = new Context(ModelType.FLAT);
// 配置 JDBC 连接信息
JDBCConnectionConfiguration jdbcConfig = new JDBCConnectionConfiguration();
jdbcConfig.setDriverClass("com.mysql.jdbc.Driver");
jdbcConfig.setConnectionURL("jdbc:mysql://localhost:3306/test");
jdbcConfig.setUserId("root");
jdbcConfig.setPassword("root");
// 配置 Java 模型和文件输出信息
JavaModelGeneratorConfiguration javaModelConfig = new JavaModelGeneratorConfiguration();
javaModelConfig.setTargetPackage("com.example.model");
javaModelConfig.setTargetProject("src/main/java");
// 配置 Mapper 文件输出信息
SqlMapGeneratorConfiguration sqlMapConfig = new SqlMapGeneratorConfiguration();
sqlMapConfig.setTargetPackage("com.example.mapper");
sqlMapConfig.setTargetProject("src/main/resources");
// 配置 Mapper 接口和文件输出信息
JavaClientGeneratorConfiguration javaClientConfig = new JavaClientGeneratorConfiguration();
javaClientConfig.setTargetPackage("com.example.mapper");
javaClientConfig.setTargetProject("src/main/java");
javaClientConfig.setConfigurationType("XMLMAPPER");
// 配置表结构信息
TableConfiguration tableConfig = new TableConfiguration(context);
tableConfig.setTableName("user");
tableConfig.setDomainObjectName("User");
// 添加配置项到上下文中
context.setJdbcConnectionConfiguration(jdbcConfig);
context.setJavaModelGeneratorConfiguration(javaModelConfig);
context.setSqlMapGeneratorConfiguration(sqlMapConfig);
context.setJavaClientGeneratorConfiguration(javaClientConfig);
context.addTableConfiguration(tableConfig);
config.addContext(context);
// 配置 MBG 生成代码时覆盖原有文件
DefaultShellCallback callback = new DefaultShellCallback(true);
// 创建 MBG
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, new ArrayList<>());
// 开始生成代码
myBatisGenerator.generate(null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.3 示例
下面,我将提供两个基于 Java 代码配置 MBG 的示例供参考。
2.3.1 生成单表增删改查
以下代码用于生成简单的单个表的 Mapper、Model 和 XML 配置文件。
public class MBGConfig {
public static void main(String[] args) {
try {
// 创建配置项
Configuration config = new Configuration();
Context context = new Context(ModelType.FLAT);
// 配置 JDBC 连接信息
JDBCConnectionConfiguration jdbcConfig = new JDBCConnectionConfiguration();
jdbcConfig.setDriverClass("com.mysql.jdbc.Driver");
jdbcConfig.setConnectionURL("jdbc:mysql://localhost:3306/test");
jdbcConfig.setUserId("root");
jdbcConfig.setPassword("root");
// 配置 Java 模型和文件输出信息
JavaModelGeneratorConfiguration javaModelConfig = new JavaModelGeneratorConfiguration();
javaModelConfig.setTargetPackage("com.example.model");
javaModelConfig.setTargetProject("src/main/java");
// 配置 Mapper 文件输出信息
SqlMapGeneratorConfiguration sqlMapConfig = new SqlMapGeneratorConfiguration();
sqlMapConfig.setTargetPackage("com.example.mapper");
sqlMapConfig.setTargetProject("src/main/resources");
// 配置 Mapper 接口和文件输出信息
JavaClientGeneratorConfiguration javaClientConfig = new JavaClientGeneratorConfiguration();
javaClientConfig.setTargetPackage("com.example.mapper");
javaClientConfig.setTargetProject("src/main/java");
javaClientConfig.setConfigurationType("XMLMAPPER");
// 配置表结构信息
TableConfiguration tableConfig = new TableConfiguration(context);
tableConfig.setTableName("user");
tableConfig.setDomainObjectName("User");
// 配置 Mapper 文件的增删改查语句
GeneratedKey generatedKey = new GeneratedKey("id", "MySQL", true, "");
List<ColumnOverride> columnOverrides = new ArrayList<>();
columnOverrides.add(new ColumnOverride("id", "id", "BIGINT", true));
InsertSelectiveMethodGenerator insertSelectiveMethodGenerator = new InsertSelectiveMethodGenerator();
insertSelectiveMethodGenerator.setGeneratedKey(generatedKey);
UpdateByPrimaryKeySelectiveMethodGenerator updateByPrimaryKeySelectiveMethodGenerator = new UpdateByPrimaryKeySelectiveMethodGenerator();
DeleteByPrimaryKeyMethodGenerator deleteByPrimaryKeyMethodGenerator = new DeleteByPrimaryKeyMethodGenerator();
SelectByPrimaryKeyMethodGenerator selectByPrimaryKeyMethodGenerator = new SelectByPrimaryKeyMethodGenerator();
columnOverrides.forEach(insertSelectiveMethodGenerator::addColumnOverride);
columnOverrides.forEach(updateByPrimaryKeySelectiveMethodGenerator::addColumnOverride);
columnOverrides.forEach(deleteByPrimaryKeyMethodGenerator::addColumnOverride);
columnOverrides.forEach(selectByPrimaryKeyMethodGenerator::addColumnOverride);
// 添加配置项
context.setJdbcConnectionConfiguration(jdbcConfig);
context.setJavaModelGeneratorConfiguration(javaModelConfig);
context.setSqlMapGeneratorConfiguration(sqlMapConfig);
context.setJavaClientGeneratorConfiguration(javaClientConfig);
context.addTableConfiguration(tableConfig);
tableConfig.setGeneratedKey(generatedKey);
tableConfig.setColumnOverrides(columnOverrides);
tableConfig.setInsertSelectiveStatementEnabled(true);
tableConfig.setUpdateByPrimaryKeySelectiveStatementEnabled(true);
tableConfig.setDeleteByPrimaryKeyStatementEnabled(true);
tableConfig.setSelectByPrimaryKeyStatementEnabled(true);
// 添加自定义增删改查语句
tableConfig.setSelectByPrimaryKeyStatementGenerator(selectByPrimaryKeyMethodGenerator);
tableConfig.setDeleteByPrimaryKeyStatementGenerator(deleteByPrimaryKeyMethodGenerator);
tableConfig.setUpdateByPrimaryKeySelectiveMethodGenerator(updateByPrimaryKeySelectiveMethodGenerator);
tableConfig.setInsertSelectiveMethodGenerator(insertSelectiveMethodGenerator);
// 创建 MBG
DefaultShellCallback callback = new DefaultShellCallback(true);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, new ArrayList<>());
// 开始生成代码
myBatisGenerator.generate(null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.3.2 生成多个表的增删改查
以下代码用于生成多个表的 Mapper、Model 和 XML 配置文件。
public class MBGConfig {
public static void main(String[] args) {
try {
// 创建配置项
Configuration config = new Configuration();
Context context = new Context(ModelType.FLAT);
// 配置 JDBC 连接信息
JDBCConnectionConfiguration jdbcConfig = new JDBCConnectionConfiguration();
jdbcConfig.setDriverClass("com.mysql.jdbc.Driver");
jdbcConfig.setConnectionURL("jdbc:mysql://localhost:3306/test");
jdbcConfig.setUserId("root");
jdbcConfig.setPassword("root");
// 配置 Java 模型和文件输出信息
JavaModelGeneratorConfiguration javaModelConfig = new JavaModelGeneratorConfiguration();
javaModelConfig.setTargetPackage("com.example.model");
javaModelConfig.setTargetProject("src/main/java");
// 配置 Mapper 文件输出信息
SqlMapGeneratorConfiguration sqlMapConfig = new SqlMapGeneratorConfiguration();
sqlMapConfig.setTargetPackage("com.example.mapper");
sqlMapConfig.setTargetProject("src/main/resources");
// 配置 Mapper 接口和文件输出信息
JavaClientGeneratorConfiguration javaClientConfig = new JavaClientGeneratorConfiguration();
javaClientConfig.setTargetPackage("com.example.mapper");
javaClientConfig.setTargetProject("src/main/java");
javaClientConfig.setConfigurationType("XMLMAPPER");
// 配置表结构信息(用 for 循环可生成多个表的增删改查)
GeneratedKey generatedKey = new GeneratedKey("id", "MySQL", true, "");
List<ColumnOverride> columnOverrides = new ArrayList<>();
for (int i = 1; i <= 3; i++) {
String tableName = "user_" + i;
String domainObjectName = "User" + i;
TableConfiguration tableConfig = new TableConfiguration(context);
tableConfig.setTableName(tableName);
tableConfig.setDomainObjectName(domainObjectName);
columnOverrides.add(new ColumnOverride("id", "id", "BIGINT", true));
UpdateByPrimaryKeySelectiveMethodGenerator updateByPrimaryKeySelectiveMethodGenerator = new UpdateByPrimaryKeySelectiveMethodGenerator();
DeleteByPrimaryKeyMethodGenerator deleteByPrimaryKeyMethodGenerator = new DeleteByPrimaryKeyMethodGenerator();
SelectByPrimaryKeyMethodGenerator selectByPrimaryKeyMethodGenerator = new SelectByPrimaryKeyMethodGenerator();
columnOverrides.forEach(updateByPrimaryKeySelectiveMethodGenerator::addColumnOverride);
columnOverrides.forEach(deleteByPrimaryKeyMethodGenerator::addColumnOverride);
columnOverrides.forEach(selectByPrimaryKeyMethodGenerator::addColumnOverride);
tableConfig.setGeneratedKey(generatedKey);
tableConfig.setColumnOverrides(columnOverrides);
tableConfig.setInsertSelectiveStatementEnabled(true);
tableConfig.setUpdateByPrimaryKeySelectiveStatementEnabled(true);
tableConfig.setDeleteByPrimaryKeyStatementEnabled(true);
tableConfig.setSelectByPrimaryKeyStatementEnabled(true);
tableConfig.setSelectByPrimaryKeyStatementGenerator(selectByPrimaryKeyMethodGenerator);
tableConfig.setDeleteByPrimaryKeyStatementGenerator(deleteByPrimaryKeyMethodGenerator);
tableConfig.setUpdateByPrimaryKeySelectiveMethodGenerator(updateByPrimaryKeySelectiveMethodGenerator);
context.addTableConfiguration(tableConfig);
}
// 添加配置项到上下文中
context.setJdbcConnectionConfiguration(jdbcConfig);
context.setJavaModelGeneratorConfiguration(javaModelConfig);
context.setSqlMapGeneratorConfiguration(sqlMapConfig);
context.setJavaClientGeneratorConfiguration(javaClientConfig);
config.addContext(context);
// 创建 MBG
DefaultShellCallback callback = new DefaultShellCallback(true);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, new ArrayList<>());
// 开始生成代码
myBatisGenerator.generate(null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
总结
通过以上的讲解,我们初步了解了基于 Java 代码配置 MBG 的方式。通过这种方式可以灵活地控制 MBG 的行为,生成相应的代码文件,为我们的项目开发节省大量的时间和精力。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于Java代码配置MyBatis Generator - Python技术站