一、pom.xml中引入依赖
1)请确保在这之前已经添加了如下几个依赖,并且已经配置完成相关信息无误
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--整合mysql数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<!--整合jdbc-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--整合mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!--整合lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
<scope>provided</scope>
</dependency>
2)新增generator代码生成器依赖信息
<!--整合代码generator生成器(请先整合jdbc/mybatis/lombok)-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
3)build内要确保存在pring-boot-maven-plugin(一般创建项目时自带)
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
二、配置generatorConfig.xml文件信息
注:1、以下代码中的com.example.demo3请替换为自己的项目目录)
2、引入的外部配置文件信息,即application-dev.yml文件使用的哪个用哪个
<?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="application-dev.yml"/>
<context id="mysql" defaultModelType="hierarchical" targetRuntime="MyBatis3Simple" >
<!-- 生成的 Java 文件的编码 -->
<property name="javaFileEncoding" value="UTF-8"/>
<!-- 格式化 Java 代码 -->
<property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
<!-- 格式化 XML 代码 -->
<property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
<!--自动新增@Data备注,取消setter/getter写法-->
<plugin type="com.example.demo3.generator.LombokPlugin" >
<property name="hasLombok" value="true"/>
</plugin>
<!-- 自定义注释生成器 -->
<commentGenerator type="com.example.demo3.generator.MysqlCommentGenerator">
<!--生成作者信息-->
<property name="author" value="pyp"/>
<!--生成创建时间信息-->
<property name="dateFormat" value="yyyy/MM/dd"/>
</commentGenerator>
<!--数据库链接URL,用户名、密码,引用的配置文件中的参数 -->
<jdbcConnection
driverClass="${driver-class-name}"
connectionURL="${url}"
userId="${username}"
password="${password}">
<property name="nullCatalogMeansCurrent" value="true" />
<!--生成表备注信息-->
<property name="useInformationSchema" value="true" />
</jdbcConnection>
<javaTypeResolver>
<!--强制转化为BigDecimals格式,非必要配置-->
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 生成实体类的包名和位置 -->
<javaModelGenerator targetPackage="com.example.demo3.entity"
targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--生成映射文件的包名和位置 com/lu/mapper-->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 生成DAO的包名和位置 mybatis两种开发模式 xml 注解式-->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.example.demo3.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
<!--mapper继承基类信息-->
<property name="rootInterface" value="com.example.demo3.common.BaseMapper"/>
</javaClientGenerator>
<!-- 设置数据库的表名和实体类名 -->
<table tableName="user" domainObjectName="User">
<!--实体类继承基类-->
<property name="rootClass" value="com.example.demo3.common.BaseModel"/>
<!-- generatedKey用于生成生成主键的方法 -->
<generatedKey column="id" sqlStatement="SELECT LAST_INSERT_ID()"/>
</table>
</context>
</generatorConfiguration>
三、根据generator建立相应的文件信息,这里默认将自定义的文件全部放在common和generator内
1、添加注释信息:
1)首先建立generator文件夹,在文件夹下自定义两个java文件,分别是:EmptyCommentGenerator.java和MysqlCommentGenerator.java
EmptyCommentGenerator.java文件代码:
package com.example.demo3.generator;
import org.mybatis.generator.api.CommentGenerator;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.*;
import org.mybatis.generator.api.dom.xml.XmlElement;
import java.util.Properties;
import java.util.Set;
public class EmptyCommentGenerator implements CommentGenerator {
@Override
public void addConfigurationProperties(Properties properties) {
}
@Override
public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
}
@Override
public void addFieldComment(Field field, IntrospectedTable introspectedTable) {
}
@Override
public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
}
@Override
public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) {
}
@Override
public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean b) {
}
@Override
public void addEnumComment(InnerEnum innerEnum, IntrospectedTable introspectedTable) {
}
@Override
public void addGetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
}
@Override
public void addSetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
}
@Override
public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) {
}
@Override
public void addJavaFileComment(CompilationUnit compilationUnit) {
}
@Override
public void addComment(XmlElement xmlElement) {
}
@Override
public void addRootComment(XmlElement xmlElement) {
}
@Override
public void addGeneralMethodAnnotation(Method method, IntrospectedTable introspectedTable, Set<FullyQualifiedJavaType> set) {
}
@Override
public void addGeneralMethodAnnotation(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn, Set<FullyQualifiedJavaType> set) {
}
@Override
public void addFieldAnnotation(Field field, IntrospectedTable introspectedTable, Set<FullyQualifiedJavaType> set) {
}
@Override
public void addFieldAnnotation(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn, Set<FullyQualifiedJavaType> set) {
}
@Override
public void addClassAnnotation(InnerClass innerClass, IntrospectedTable introspectedTable, Set<FullyQualifiedJavaType> set) {
}
}
MysqlCommentGenerator.java文件代码:
package com.example.demo3.generator;
import com.example.demo3.common.BaseEntity;
import org.mybatis.generator.api.FullyQualifiedTable;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
public class MysqlCommentGenerator extends EmptyCommentGenerator {
private Properties properties;
public MysqlCommentGenerator() {
properties = new Properties();
}
@Override
public void addConfigurationProperties(Properties properties) {
// 获取自定义的 properties
this.properties.putAll(properties);
}
@Override
public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
String author = properties.getProperty("author");
String dateFormat = properties.getProperty("dateFormat", "yyyy-MM-dd");
SimpleDateFormat dateFormatter = new SimpleDateFormat(dateFormat);
FullyQualifiedTable fullyQualifiedTable = introspectedTable.getFullyQualifiedTable();
Field field = new Field();
field.setVisibility(JavaVisibility.PRIVATE);
field.setType(new FullyQualifiedJavaType("long"));
field.setStatic(true);
field.setFinal(true);
field.setName("serialVersionUID");
field.setInitializationString("1L");
topLevelClass.addField(field);
FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("Serializable");
FullyQualifiedJavaType imp = new FullyQualifiedJavaType("java.io.Serializable");
topLevelClass.addSuperInterface(fqjt);
topLevelClass.addImportedType(imp);
topLevelClass.addJavaDocLine("/**");
topLevelClass.addJavaDocLine(" * " + introspectedTable.getRemarks());
topLevelClass.addJavaDocLine(" * " + fullyQualifiedTable.getIntrospectedTableName());
topLevelClass.addJavaDocLine(" * @author " + author);
topLevelClass.addJavaDocLine(" * @date " + dateFormatter.format(new Date()));
topLevelClass.addJavaDocLine(" */");
}
@Override
public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
Class<BaseEntity> baseEntityClass = BaseEntity.class;
java.lang.reflect.Field[] declaredFields = baseEntityClass.getDeclaredFields();
boolean isSet = true;
for (java.lang.reflect.Field ignored : declaredFields) {
ignored.setAccessible(true);
if (ignored.getName().equals(introspectedColumn.getJavaProperty())) {
isSet = false;
continue;
}
}
// 获取列注释
String remarks = introspectedColumn.getRemarks();
if (isSet == true) {
field.addJavaDocLine("/**");
if (!remarks.equals("")) {
field.addJavaDocLine(" * " + remarks);
}
field.addJavaDocLine(" * " + introspectedColumn.getActualColumnName());
field.addJavaDocLine(" */");
}
}
}
4)在common目录下新建文件BaseEntity.php,作用:忽略部分代码的注释信息
代码如下:
package com.example.demo3.common;
public class BaseEntity {
// 有需要忽略的在上面新增上
}
3)在generatorConfig.xml中将<commentGenerator type="com.example.demo3.generator.MysqlCommentGenerator"></commentGenerator>配置为下面:(已在之前的文件中配置好了)
<!-- 自定义注释生成器 -->
<commentGenerator type="com.example.demo3.generator.MysqlCommentGenerator">
<!--生成作者信息-->
<property name="author" value="pyp"/>
<!--生成创建时间信息-->
<property name="dateFormat" value="yyyy/MM/dd"/>
</commentGenerator>
2、配置lombok,自动生成@Data注解
1)在generator文件下新建文件LombokPlugin.java
package com.example.demo3.generator;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.api.dom.java.Interface;
import org.mybatis.generator.api.dom.java.Method;
import org.mybatis.generator.api.dom.java.TopLevelClass;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
public class LombokPlugin extends PluginAdapter {
public LombokPlugin() {
}
public boolean validate(List<String> list) {
return true;
}
public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
topLevelClass.addImportedType("lombok.Data");
topLevelClass.addAnnotation("@Data");
//topLevelClass.addImportedType("lombok.Getter");
//topLevelClass.addImportedType("lombok.Setter");
//topLevelClass.addImportedType("lombok.ToString");
//topLevelClass.addAnnotation("@Getter");
//topLevelClass.addAnnotation("@Setter");
//topLevelClass.addAnnotation("@ToString");
// topLevelClass.addJavaDocLine("/**");
// topLevelClass.addJavaDocLine("* Created by Mybatis Generator " + this.date2Str(new Date()));
// topLevelClass.addJavaDocLine("*/");
return true;
}
public boolean clientGenerated(Interface interfaze, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
interfaze.addJavaDocLine("/**");
interfaze.addJavaDocLine("* Created by Mybatis Generator " + this.date2Str(new Date()));
interfaze.addJavaDocLine("*/");
return true;
}
public boolean modelSetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
return false;
}
public boolean modelGetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
return false;
}
private String date2Str(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
return sdf.format(date);
}
}
2)在generatorConfig.xml中加入配置信息(已在配置文件内)
<!--自动新增@Data备注,取消setter/getter写法-->
<plugin type="com.example.demo3.generator.LombokPlugin" >
<property name="hasLombok" value="true"/>
</plugin>
3、配置实体类继承BaseModel基类
1)在common内新建BaseModel.java基类
package com.example.demo3.common;
public class BaseModel {
}
2)在genneratorConfig.xml中配置实体类继承,在table标签内新增name为rootClass的property标签
<!-- 设置数据库的表名和实体类名 -->
<table tableName="user" domainObjectName="User">
<!--实体类继承基类-->
<property name="rootClass" value="com.example.demo3.common.BaseModel"/>
<!-- generatedKey用于生成生成主键的方法 -->
<generatedKey column="id" sqlStatement="SELECT LAST_INSERT_ID()"/>
</table>
4、配置mapper继承BaseMapper基类
1)在common中新建BaseMapper基类
package com.example.demo3.common;
public interface BaseMapper<T extends BaseModel> {
}
2)在genneratorConfig.xml中配置mapper基类继承,在javaClientGenerator中新增name为rootInterface的property
<!-- 生成DAO的包名和位置 mybatis两种开发模式 xml 注解式-->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.example.demo3.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
<!--mapper继承基类信息-->
<property name="rootInterface" value="com.example.demo3.common.BaseMapper"/>
</javaClientGenerator>
—end—