简介
在学习公司项目时看到公司有使用Mybatis-Generator
,所以学习了一下
之前是有见识过Mybatis-Plus
的generator
,使用起来还是很棒的,再说了Mybatis-Plus
不也是基于Mybatis
做的吗,所以相信他们会很相似
再有就是学习项目时用过renren-generator,他能生成项目中简单的业务代码,包括controller、service等等
内容
关于Mybatis-Generator
最好还是去官网学习,http://mybatis.org/generator/index.html
当然有些博客写的也很棒,https://www.cnblogs.com/throwable/p/12046848.html
关于上面的那篇博客我只纠正一点,就是关于commentGenerator标签
这块suppressAllComments
,默认值是false
没错,但是false
含义是生成注释,设置为true
才表示不生成注解。
代码
下面是我的一些代码,可以参考一下
主要是pom.xml
、generatorConfig.xml
、generatorConfig.properties
pom.xml
<?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.wnh</groupId>
<artifactId>mybatis-generator</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<spring.boot.version>2.2.2.RELEASE</spring.boot.version>
<mysql.driver.version>8.0.17</mysql.driver.version>
<mybatis.generator.version>1.4.0</mybatis.generator.version>
<lombok.version>1.18.12</lombok.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring.boot.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.driver.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>${mybatis.generator.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>${spring.boot.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 通过mvn mybatis-generator:generate命令,运行mybatis-generator -->
<!-- 参考:https://mybatis.org/generator/running/runningWithMaven.html -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>${mybatis.generator.version}</version>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- 定义配置文件 -->
<configurationFile>${basedir}/src/main/resources/mybatis/generatorConfig.xml</configurationFile>
<!-- 输出详细信息 -->
<verbose>true</verbose>
<!-- 覆盖生成文件 -->
<overwrite>true</overwrite>
<!-- 这里许多配置可以放在对应的xml文件中 -->
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.driver.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
generatorConfig.properties
datasource.driver=com.mysql.cj.jdbc.Driver
datasource.url=jdbc:mysql://localhost:3306/operation?useSSL=false
datasource.username=root
datasource.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="mybatis/generatorConfig.properties"/>
<!-- 要添加到类路径的 JAR/ZIP 文件的完整路径名,或要添加到类路径的目录 -->
<!-- 需要驱动:1、加入驱动路径 2、在plugin里直接加入依赖 -->
<!-- <classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip"/>-->
<!-- targetRuntime属性推荐MyBatis3和MyBatis3Simple -->
<!-- 必须按context的顺序配置 -->
<context id="MySQL" targetRuntime="MyBatis3Simple">
<!-- 插件扩展生成类,例如:生成toString,实现java.io.Serializable等 -->
<!-- http://mybatis.org/generator/reference/plugins.html https://github.com/itfsw/mybatis-generator-plugin -->
<!-- <plugin type="com.itfsw.mybatis.generator.plugins.LombokPlugin">-->
<!-- <!– @Data 默认开启,同时插件会对子类自动附加@EqualsAndHashCode(callSuper = true),@ToString(callSuper = true) –>-->
<!-- <property name="@Data" value="true"/>-->
<!-- <!– @Builder 必须在 Lombok 版本 >= 1.18.2 的情况下开启,对存在继承关系的类自动替换成@SuperBuilder –>-->
<!-- <property name="@Builder" value="false"/>-->
<!-- <!– @NoArgsConstructor 和 @AllArgsConstructor 使用规则和Lombok一致 –>-->
<!-- <property name="@AllArgsConstructor" value="false"/>-->
<!-- <property name="@NoArgsConstructor" value="false"/>-->
<!-- <!– @Getter、@Setter、@Accessors 等使用规则参见官方文档 –>-->
<!-- <property name="@Accessors(chain = true)" value="false"/>-->
<!-- <!– 临时解决IDEA工具对@SuperBuilder的不支持问题,开启后(默认未开启)插件在遇到@SuperBuilder注解时会调用ModelBuilderPlugin来生成相应的builder代码 –>-->
<!-- <property name="supportSuperBuilderForIdea" value="false"/>-->
<!-- </plugin>-->
<!--覆盖生成XML文件-->
<plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />
<commentGenerator>
<property name="suppressAllComments" value="true"/>
<!-- 是否输出表和列的comment信息 -->
<property name="addRemarkComments" value="true"/>
</commentGenerator>
<!-- 数据源连接信息 -->
<jdbcConnection
driverClass="${datasource.driver}"
connectionURL="${datasource.url}"
userId="${datasource.username}"
password="${datasource.password}">
</jdbcConnection>
<javaTypeResolver>
<!-- 如果为true,所有数字属性被强制使用BigDecimal类型表示 -->
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 生成模型的包名和位置 -->
<javaModelGenerator
targetPackage="com.wnh.pojo.model"
targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaModelGenerator>
<!-- 生成的映射文件包名和位置 -->
<sqlMapGenerator
targetPackage="mybatis/mapper"
targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成DAO的包名和位置 -->
<javaClientGenerator
targetPackage="com.wnh.mapper"
targetProject="src/main/java"
type="XMLMAPPER">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- <table tableName="school_area"-->
<!-- domainObjectName="SchoolArea"-->
<!-- enableCountByExample="false"-->
<!-- enableSelectByExample="false"-->
<!-- enableUpdateByExample="false"-->
<!-- enableDeleteByExample="false">-->
<!-- <generatedKey column="id" sqlStatement="JDBC" identity="true"/>-->
<!-- </table>-->
<table tableName="user"
domainObjectName="user.User"
mapperName="user.UserMapper"
enableCountByExample="false"
enableSelectByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false">
<generatedKey column="id" sqlStatement="JDBC" identity="true"/>
</table>
</context>
</generatorConfiguration>
注意事项
- 虽然有
Java
和maven
两种启动方式,但我还是推荐maven
- 关于
pom
,要在plugin
中引入需要的依赖,上面也提到了可以配置插件帮助我们生成代码,但官方提供的插件都太基础了,不太实用 - 关于
generatorConfig.xml
,这里context
标签里的要严格按照顺序配置,否则报错 - 一定注意上面的覆盖
xml
的plugin
配置,不然在覆盖生成时会有问题
吐槽
- 首先就是关于注释的,
Mybatis-Generator
生成注释配置下,会生成很多多余的注解,其主要就是关于声明这里的代码是我们Mybatis-Generator
生成的,但真的没什么用啊。有人就问了,“你不会把它关掉吗?”我要不是为了生成实体类对应数据库的注释我也不会开 - 关于生成表这块,难道没有直接配置多个表的选项吗?非得对应数据库每个表写一个
table
标签吗? - 还有就是在生成文件时,它不会自己确定父包,也就是还得配置每个文件的父包,很麻烦
总结
说实话Mybatis-Generator
确实能帮助我们简化开发,生成数据库实体类、mapper
接口和xml
,但是确实也存在一些问题,这也可能是因为它不更新了吧,上maven
仓库就可以看到最新版本就是1.4.0
,停留在2019年,现在确实也存在很多能替代它的方案。