使用该代码生成器可以自动根据配置的表来生成对应的mapper、mapper.xml、bean、以及Example(查询条件封装)
首先在resources目录创建文件generator.properties文件,其中写入数据库连接所需的参数,例:
jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://localhost:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
jdbc.userId=root
jdbc.password=root
同一目录下创建生成文件配置generatorConfig.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<!--代码自动生成配置-->
<generatorConfiguration>
<!--引入配置文件-->
<properties resource="generator.properties"/>
<context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat">
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<property name="javaFileEncoding" value="UTF-8"/>
<!--*********************************插件*************************************-->
<!-- 生成的实体类自动实现Serializable序列化-->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
<!-- 为生成的实体类创建一个toString方法 -->
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
<!--生成mapper.xml时覆盖原文件(原来是会直接追加到原文件中的)-->
<plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>
<!--*********************************生成注释*************************************-->
<!--可以自定义生成model的代码注释-->
<commentGenerator type="com.example.mall_study.mbg.CommentGenerator">
<!--去除自动生成的注释 -->
<property name="suppressAllComments" value="true"/>
<!--去除生成日期-->
<property name="suppressDate" value="true"/>
<!--是否把表中的备注添加到注释中-->
<property name="addRemarkComments" value="true"/>
</commentGenerator>
<!--*********************************数据库配置*************************************-->
<!--配置数据库连接-->
<jdbcConnection driverClass="${jdbc.driverClass}"
connectionURL="${jdbc.connectionURL}"
userId="${jdbc.userId}"
password="${jdbc.password}">
<!--解决mysql驱动升级到8.0后不生成指定数据库代码的问题-->
<property name="nullCatalogMeansCurrent" value="true" />
</jdbcConnection>
<!--*********************************指定生成文件路径*************************************-->
<!--指定生成model的路径-->
<javaModelGenerator targetPackage="com.xxx.project_name.mbg.model" targetProject="src\main\java"/>
<!--指定生成mapper.xml的路径-->
<sqlMapGenerator targetPackage="mbg.mapper" targetProject="src\main\resources"/>
<!--指定生成mapper接口的的路径-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.xxx.project_name.mbg.mapper"
targetProject="src\main\java"/>
<!--******************************指定要生成的表(示例)**********************************-->
<table tableName="tablename">
<generatedKey column="id" sqlStatement="MySql" identity="true"/>
</table>-->
</context>
</generatorConfiguration>
接下来就是生成工具
import com.example.mall_study.component.JwtAuthenticationEntryPoint;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class GeneratorUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(GeneratorUtil.class);
public static void build(){
//MBG 执行过程中的警告信息
List<String> warnings = new ArrayList<>();
//当生成的代码重复时,是否覆盖原代码
boolean overwrite = true;
//读取我们的 MBG 配置文件(如果不想用配置文件,可以使用Context类用java代码写入配置config.addContext(context)即可)
InputStream is = Generator.class.getResourceAsStream("/generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = null;
try {
config = cp.parseConfiguration(is);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
//创建MBG代码生成器
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
//执行生成代码(可以设置监听器)
myBatisGenerator.generate(null);
//输出警告信息
for (String warning : warnings) {
LOGGER.warn(warning);
}
} catch (IOException | InterruptedException | InvalidConfigurationException | SQLException |
XMLParserException e) {
e.printStackTrace();
} finally {
try {
if(is != null) is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}