pom依赖:
<!--逆向工程依赖-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<!--插件-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<configurationFile>
<!--这里是配置generatorConfig.xml的路径 不写默认在resources目录下找generatorConfig.xml文件-->
</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
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"/>
<!--指定数据库jdbc驱动jar包的位置-->
<classPathEntry location="${jdbc.driverLocation}"/>
<context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat">
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<property name="javaFileEncoding" value="UTF-8"/>
<!--生成mapper.xml时覆盖原文件-->
<plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>
<plugin type="org.mybatis.generator.plugins.MyBatisPlugin">
<property name="hasLombok" value="true"/>
</plugin>
<!--可以自定义生成model的代码注释-->
<commentGenerator>
<property name="suppressAllComments" value="true"/> <!-- 是否取消注释 -->
<property name="suppressDate" value="true"/> <!-- 是否生成注释代时间戳 -->
</commentGenerator>
<!--配置数据库连接-->
<jdbcConnection driverClass="${jdbc.driver}"
connectionURL="${jdbc.url}"
userId="${jdbc.username}"
password="${jdbc.password}">
<!--解决mysql驱动升级到8.0后不生成指定数据库代码的问题-->
<property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>
<!-- 非必需,类型处理器,在数据库类型和java类型之间的转换控制-->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!--指定pojo生成位置-->
<javaModelGenerator targetPackage="${model.package}" targetProject="src\main\java"/>
<!--指定生成mapper.xml的路径-->
<sqlMapGenerator targetPackage="${xml.mapper.package}" targetProject="src\main\resources"/>
<!--指定生成mapper接口的的路径-->
<javaClientGenerator type="XMLMAPPER"
targetPackage="${mapper.package}"
targetProject="src\main\java"/>
<table tableName="student" domainObjectName="Student">
<!--<columnOverride column="create_time" javaType="java.sql.Timestamp" jdbcType="timestamp"/>-->
<!--<columnOverride column="modify_time" javaType="java.sql.Timestamp" jdbcType="timestamp"/>-->
<property name="enableCountByExample" value="false"/>
<property name="enableDeleteByExample" value="false"/>
<property name="enableDeleteByPrimaryKey" value="false"/>
<property name="enableInsert" value="false"/>
<property name="enableSelectByPrimaryKey" value="false"/>
<property name="enableUpdateByExample" value="false"/>
<property name="enableUpdateByPrimaryKey" value="false"/>
<property name="selectByExampleQueryId" value="true"/>
<property name="selectByPrimaryKeyQueryId" value="false"/>
<!--自动生成主键,可以代替useGeneratedKeys-->
<generatedKey column="stu_id" sqlStatement="Mysql" type="post" identity="true"/>
</table>
</context>
</generatorConfiguration>
Generator.properties:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/boot?useSSL=false&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true
jdbc.username=root
jdbc.password=1234
jdbc.driverLocation=E:\\jar\\mysql\\mysql-connector-java-5.1.44-bin.jar
model.package=com.xujie.springboot03.pojo
mapper.package=com.xujie.springboot03.dao
xml.mapper.package=mapper
MyBatisPlugin :
注:可以把该类的class文件放入mybatis的jar包中,下次就不用配置了
package org.mybatis.generator.plugins;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.Plugin;
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.api.dom.java.*;
import java.time.LocalDateTime;
import java.util.List;
/**
* @author hgh
*/
@Slf4j
public class MyBatisPlugin extends PluginAdapter {
@Override
public boolean validate(List<String> list) {
return true;
}
@Override
public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
boolean hasLombok = Boolean.parseBoolean(getProperties().getProperty("hasLombok", "false"));
log.warn("hasLombok:\t" + hasLombok);
if (hasLombok) {
topLevelClass.addImportedType("lombok.Data");
topLevelClass.addImportedType("lombok.NoArgsConstructor");
topLevelClass.addImportedType("lombok.AllArgsConstructor");
topLevelClass.addImportedType("lombok.experimental.Accessors");
topLevelClass.addAnnotation("@Data");
topLevelClass.addAnnotation("@NoArgsConstructor");
topLevelClass.addAnnotation("@AllArgsConstructor");
topLevelClass.addAnnotation("@Accessors(chain = true)");
}
topLevelClass.addJavaDocLine("/**");
String remarks = introspectedTable.getRemarks();
log.error("@table\t" + remarks);
StringBuilder sb = new StringBuilder();
topLevelClass.addJavaDocLine(" * "+remarks + "\t" + introspectedTable.getFullyQualifiedTable());
topLevelClass.addJavaDocLine(" * @author hgh");
topLevelClass.addJavaDocLine(" * @date " + LocalDateTime.now());
topLevelClass.addJavaDocLine(" */");
return true;
}
@Override
public boolean modelFieldGenerated(Field field, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
field.addJavaDocLine("/**");
String remarks = introspectedColumn.getRemarks();
log.error("@column\t" + remarks);
field.addJavaDocLine(" * " + remarks);
field.addJavaDocLine(" */");
return true;
}
@Override
public boolean clientGenerated(Interface interfaze, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
interfaze.addImportedType(new FullyQualifiedJavaType("org.apache.ibatis.annotations.Mapper"));
interfaze.addAnnotation("@Mapper");
interfaze.addImportedType(new FullyQualifiedJavaType("org.springframework.stereotype.Repository"));
interfaze.addAnnotation("@Repository");
interfaze.addJavaDocLine("/**");
interfaze.addJavaDocLine(" * @author hgh");
interfaze.addJavaDocLine(" * @date " + LocalDateTime.now());
interfaze.addJavaDocLine(" */");
return true;
}
@Override
public boolean modelSetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
boolean hasLombok = Boolean.parseBoolean(getProperties().getProperty("hasLombok", "false"));
return !hasLombok;
}
@Override
public boolean modelGetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
boolean hasLombok = Boolean.parseBoolean(getProperties().getProperty("hasLombok", "false"));
return !hasLombok;
}
}
点击运行即可完成: