1.参考文章(五星)
https://blog.csdn.net/u014365133/article/details/78884751
官网:http://mybatis.org/generator/index.html
说明:
generator 插件的 数据库驱动和 数据库版本要一致,否则生成不了代码
1. 配置文件 文件头 dtd 报红问题
解决方案 :
爆红的时候,左边有个 黄色的小灯泡,点击那个自动下载文件
如果下载不了,可以尝试用下面方法:
从这个地址下载 dtd文件
http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd
1. 报错提示:
spring-web: Could not create connection to database serve
原因:插件 数据库驱动和 数据库版本不一致导致的
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<!--这个要和mysql的版本一致,否则生成代码的时候报错-->
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!--<version>5.1.30</version>-->
<version>8.0.22</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
查看数据库版本:
# 8.0.22
select version();
2.
Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate (default-cli) on project spring-web: The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specific time zone value if you want to utilize time zone support. -> [Help 1]
URL :加上时区等信息:
connectionURL="jdbc:mysql://localhost:3306/45_sql?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=UTC"
3. 下面是全部的pom文件 和mybatgis generator 配置文件
pom:
<?xml version="1.0"?><project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<!-- 项目信息 begin -->
<groupId>com.microservice</groupId>
<artifactId>spring-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-web</name>
<url>http://maven.apache.org</url>
<!-- 项目信息end -->
<!-- 属性配置 begin -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<!-- 属性配置end -->
<!-- 父依赖 begin -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<!-- 父依赖 end -->
<dependencies>
<!-- springboot 测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.9</version>
</dependency>
<!-- 添加web包 begin -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- 该包中包含requestMapping restController 等注解 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 添加web包 end -->
<!-- mybatis依赖 begin -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!-- 解决 jdbc TIMESTAMP 映射不了 实体类的 LocalDateTime -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-typehandlers-jsr310</artifactId>
<version>1.0.1</version>
</dependency>
<!-- mybatis依赖 end -->
<!-- mysql数据库配置 begin -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
<!-- mysql数据库配置 end -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!-- 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
<!--测试 mybatis 分页插件所以先注释掉,如果要测试 pagehelper,把自定义插件打开 -->
<exclusions>
<exclusion>
<artifactId>mybatis-spring-boot-starter</artifactId>
<groupId>org.mybatis.spring.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- Spring boot Cache (guava cache 需要它 )-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!--for guava cache-->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>27.0.1-jre</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<scope>provided</scope>
</dependency>
<!--校验框架-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.3.Final</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<!--这个要和mysql的版本一致,否则生成代码的时候报错-->
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!--<version>5.1.30</version>-->
<version>8.0.22</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
generator 配置文件:
<?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>
<context id="MySqlTables" targetRuntime="MyBatis3" defaultModelType="flat">
<!-- 关闭注解信息 -->
<commentGenerator>
<property name="suppressAllComments" value="true" />
<!-- 将数据库中表的字段描述信息添加到注释 -->
<property name="addRemarkComments" value="true"/>
<!-- 注释里不添加日期 -->
<property name="suppressDate" value="true"/>
</commentGenerator>
<!-- 自己修改JDBC的路径 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/45_sql?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=UTC"
userId="root"
password="123456"/>
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
<!--<property name="useInformationSchema" value="true"/>-->
</javaTypeResolver>
<!-- 生成POJO对象,并将类放到com.example.demo.entity.generatePackage包下 -->
<javaModelGenerator targetPackage="com.example.demo.entity.generatePackage"
targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 生成mapper xml文件,并放到resources下的mapper文件夹下 -->
<sqlMapGenerator targetPackage="mybatis.mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 生成的dao类 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.example.demo.mapper"
targetProject="src/main/java/">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 一个用户生成动态查询的条件类(selectByExample, deleteByExample),可选sql模板; -->
<!--enableXXX : 代表多种SQL方法,该属性用来指定是否生成对应的XXX语句。-->
<!--:如果设置为true,那么MBG会使用从数据库元数据获取的列名作为生成的实体对象的属性。 如果为false(默认值),MGB将会尝试将返回的名称转换为驼峰形式。-->
<!--在这两种情况下,可以通过 元素显示指定,在这种情况下将会忽略这个(useActualColumnNames)属性-->
<table tableName="course" domainObjectName="Course"
enableInsert="true"
enableSelectByPrimaryKey="true"
enableDeleteByPrimaryKey="true"
enableUpdateByPrimaryKey="true"
enableCountByExample="false"
enableUpdateByExample="true"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false" >
<property name="useActualColumnNames" value="false"/>
<generatedKey column="id" sqlStatement="JDBC" identity="true"/>
</table>
</context>
</generatorConfiguration>
4. 使用方法
这个时候生成的代码没有注释:
生成注释:
Failed to execute goal org.mybatis.generator:
mybatis-generator-maven-plugin:1.3.2:generate
(default-cli) on project spring-web:
Execution default-cli of goal
org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:
generate failed: Cannot instantiate object of type com.example.demo.mybatisplugin.CustomCommentGenerator -> [Help 1]
[ERROR]
重新建个spirngbootmaven项目,打包,安装到本地,然后在生成代码的项目里引用 刚刚打到仓库里的包
java代码如下:
package com.springboot.mybatis.plugin;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.internal.DefaultCommentGenerator;
/**
* @program: generatorplugin
* @description:
* @author: guoyiguang
* @create: 2021-03-07 11:27
**/
public class CustomMybatisCommentGenerator extends DefaultCommentGenerator {
@Override
public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
// 添加字段注释
StringBuffer sb = new StringBuffer();
field.addJavaDocLine("/**");
if (introspectedColumn.getRemarks() != null)
field.addJavaDocLine(" * " + introspectedColumn.getRemarks());
sb.append("* ");
sb.append(introspectedColumn.getActualColumnName());
field.addJavaDocLine(sb.toString());
// addJavadocTag(field, false);
field.addJavaDocLine(" */");
}
}
maven 如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.springboot.custom.mybatis.generator.plugin</groupId>
<artifactId>generatorplugin</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!--生成代码的-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.6</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
</project>
回到现在要生成代码的 项目
后期再注释掉(这个只是做测试用的)
然后把刚刚测试 的pom 注释掉
然后在 本pom里 引入自定义的 gav(重写了 生成注释的 方法):
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<!-- 这里就是我们自己定义的jar啦-->
<dependency>
<groupId>com.springboot.custom.mybatis.generator.plugin</groupId>
<artifactId>generatorplugin</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--这个要和mysql的版本一致,否则生成代码的时候报错-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!--<version>5.1.30</version>-->
<version>8.0.22</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
在 generator 的配置文件里,注释生成器成自定义的
<!-- 关闭注解信息 -->
<!--<commentGenerator>-->
<!--<property name="suppressAllComments" value="true" />-->
<!--<!– 将数据库中表的字段描述信息添加到注释 –>-->
<!--<property name="addRemarkComments" value="true"/>-->
<!--<!– 注释里不添加日期 –>-->
<!--<property name="suppressDate" value="true"/>-->
<!--</commentGenerator>-->
<commentGenerator type="com.springboot.mybatis.plugin.CustomMybatisCommentGenerator">
<!-- 定义是否生成原生注释,我们这里自定义了,所以选择false -->
<property name="suppressAllComments" value="false"/>
<!-- This property is used to specify whether MBG will include the generation timestamp in the generated comments -->
<property name="suppressDate" value="true"/>
</commentGenerator>
完整的pom 文件和 generator 的配置文件 如下:
pom 文件:
<?xml version="1.0"?><project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<!-- 项目信息 begin -->
<groupId>com.microservice</groupId>
<artifactId>spring-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-web</name>
<url>http://maven.apache.org</url>
<!-- 项目信息end -->
<!-- 属性配置 begin -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<!-- 属性配置end -->
<!-- 父依赖 begin -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<!-- 父依赖 end -->
<dependencies>
<!-- springboot 测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.9</version>
</dependency>
<!-- 添加web包 begin -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- 该包中包含requestMapping restController 等注解 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 添加web包 end -->
<!-- mybatis依赖 begin -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!-- 解决 jdbc TIMESTAMP 映射不了 实体类的 LocalDateTime -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-typehandlers-jsr310</artifactId>
<version>1.0.1</version>
</dependency>
<!-- mybatis依赖 end -->
<!-- mysql数据库配置 begin -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
<!-- mysql数据库配置 end -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!-- 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
<!--测试 mybatis 分页插件所以先注释掉,如果要测试 pagehelper,把自定义插件打开 -->
<exclusions>
<exclusion>
<artifactId>mybatis-spring-boot-starter</artifactId>
<groupId>org.mybatis.spring.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- Spring boot Cache (guava cache 需要它 )-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!--for guava cache-->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>27.0.1-jre</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<scope>provided</scope>
</dependency>
<!--校验框架-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.3.Final</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
<!--<!–生成代码的–> 后期在自定义的 comment maven 工程里 引入了下面这个,所以这个就可以注释掉了-->
<!--<dependency>-->
<!--<groupId>org.mybatis.generator</groupId>-->
<!--<artifactId>mybatis-generator-core</artifactId>-->
<!--<version>1.3.6</version>-->
<!--</dependency>-->
<!--这个可以查看自己自定义的jar包有没有被引进来-->
<!--<dependency>-->
<!--<groupId>com.springboot.custom.mybatis.generator.plugin</groupId>-->
<!--<artifactId>generatorplugin</artifactId>-->
<!--<version>1.0-SNAPSHOT</version>-->
<!--</dependency>-->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<!-- 这里就是我们自己定义的jar啦-->
<dependency>
<groupId>com.springboot.custom.mybatis.generator.plugin</groupId>
<artifactId>generatorplugin</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--这个要和mysql的版本一致,否则生成代码的时候报错-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!--<version>5.1.30</version>-->
<version>8.0.22</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
generator 的配置文件:
<?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>
<context id="MySqlTables" targetRuntime="MyBatis3" defaultModelType="flat" >
<!--当我们生成实体类以后,发现默认是没有toString和序列化,但是很多时候需要序列化对象,从而方便在网络上传输-->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
<!--生成 toString 的插件-->
<plugin type="org.mybatis.generator.plugins.ToStringPlugin" />
<!-- 关闭注解信息 -->
<!--<commentGenerator>-->
<!--<property name="suppressAllComments" value="true" />-->
<!--<!– 将数据库中表的字段描述信息添加到注释 –>-->
<!--<property name="addRemarkComments" value="true"/>-->
<!--<!– 注释里不添加日期 –>-->
<!--<property name="suppressDate" value="true"/>-->
<!--</commentGenerator>-->
<commentGenerator type="com.springboot.mybatis.plugin.CustomMybatisCommentGenerator">
<!-- 定义是否生成原生注释,我们这里自定义了,所以选择false -->
<property name="suppressAllComments" value="false"/>
<!-- This property is used to specify whether MBG will include the generation timestamp in the generated comments -->
<property name="suppressDate" value="true"/>
</commentGenerator>
<!-- 自己修改JDBC的路径 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/45_sql?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=UTC"
userId="root"
password="123456"/>
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
<!--<property name="useInformationSchema" value="true"/>-->
</javaTypeResolver>
<!-- 生成POJO对象,并将类放到com.example.demo.entity.generatePackage包下 -->
<javaModelGenerator targetPackage="com.example.demo.entity.generatePackage"
targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 生成mapper xml文件,并放到resources下的mapper文件夹下 -->
<sqlMapGenerator targetPackage="mybatis.mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 生成的dao类 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.example.demo.mapper"
targetProject="src/main/java/">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 一个用户生成动态查询的条件类(selectByExample, deleteByExample),可选sql模板; -->
<!--enableXXX : 代表多种SQL方法,该属性用来指定是否生成对应的XXX语句。-->
<!--:如果设置为true,那么MBG会使用从数据库元数据获取的列名作为生成的实体对象的属性。 如果为false(默认值),MGB将会尝试将返回的名称转换为驼峰形式。-->
<!--在这两种情况下,可以通过 元素显示指定,在这种情况下将会忽略这个(useActualColumnNames)属性-->
<table tableName="s_order_test" domainObjectName="SOrderTest"
enableInsert="true"
enableSelectByPrimaryKey="true"
enableDeleteByPrimaryKey="true"
enableUpdateByPrimaryKey="true"
enableCountByExample="false"
enableUpdateByExample="true"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false" >
<property name="useActualColumnNames" value="false"/>
<generatedKey column="id" sqlStatement="JDBC" identity="true"/>
</table>
</context>
</generatorConfiguration>