mybatis-generator 使用教程
为什么使用 MBG ?
提高开发效率
MBG 自动生成 MyBatis 相关的代码,包括 Java 实体类、SQL 映射文件和 DAO 接口,这样开发者可以节省大量的时间和精力,专注于业务逻辑的开发。
保证代码一致性
手动编写的代码容易产生风格不一致和错误,而 MBG 生成的代码遵循一致的规范和模板,保证代码的一致性和可维护性。
快速迭代
在数据库表结构发生变化时,MBG 可以快速生成新的代码,减少手动修改代码的工作量,适应快速迭代的开发需求。
减少重复劳动
对于大多数 CRUD(创建、读取、更新、删除)操作,MBG 可以自动生成标准的代码,避免开发者重复编写类似的代码,提高开发效率。
适应复杂的 SQL 映射
MBG 支持复杂的 SQL 映射生成,可以生成包括关联查询、多表联查等复杂 SQL 映射文件,满足复杂业务需求。
提供灵活的配置
MBG 提供了高度可配置性,开发者可以根据具体需求配置生成的代码,包括生成文件的包结构、文件路径、表的映射等。
集成开发工具
MBG 可以很方便地与 Maven 集成,通过 Maven 插件可以轻松运行 MBG,生成和更新代码,并且可以与其他开发工具和 CI/CD(持续集成/持续部署)流程无缝结合。
使用场景
- 新项目初始化: 在项目初始化阶段,可以使用 MBG 根据数据库结构快速生成基础代码。
- 数据库表结构变更: 在数据库表结构变更时,可以使用 MBG 重新生成代码,保持代码与数据库结构的一致性。
- 标准化代码: 使用 MBG 生成标准化的 CRUD 代码,提高代码一致性和可维护性。
小结
使用 MyBatis Generator 可以:
- 显著提高开发效率,减少重复劳动
- 保证代码的一致性,并且提供灵活的配置选项和强大的功能支持
如何使用 MBG ?
Step 1. 导入依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| <project> <build> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.4.0</version> <configuration> <verbose>true</verbose> <overwrite>true</overwrite> <configurationFile> src/main/resources/mybatis-generator.xml </configurationFile> </configuration> <executions> <execution> <id>Generate MyBatis Artifacts</id> <goals> <goal>generate</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
|
Step 2. 配置 mybatis-generator.xml
在 Resource
目录下创建一个 mybatis-generator.xml
文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| <?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="default" targetRuntime="MyBatis3"> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test?useUnicode=true" userId="root" password="root"> </jdbcConnection>
<javaModelGenerator targetPackage="com.movie.pojo" targetProject="src/main/java">
<property name="enableSubPackages" value="true" /> <property name="constructorBased" value="true" /> <property name="trimStrings" value="true" /> <property name="immutable" value="false" />
</javaModelGenerator>
<sqlMapGenerator targetPackage="mapping.mybatis" targetProject="src/main/resources"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER" targetPackage="com.movie.dao" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> </javaClientGenerator>
<table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
<table tableName="t1_user" domainObjectName="t1User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> <generatedKey column="id" sqlStatement="MySql" identity="true"/> </table>
<table tableName="sys_user" domainObjectName="sysUser" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
</context> </generatorConfiguration>
|
1
| <generatedKey column="id" sqlStatement="MySql" identity="true"/>
|
这里的各个属性含义如下:
column
: 指定数据库表中用作主键的列的名称,这里是 "id"
。
sqlStatement
: 指定用于生成主键的SQL语句或数据库特定的策略。对于MySQL数据库,通常使用 "MySql"
,它会利用数据库的自增特性来生成主键。
identity
: 设置为 "true"
时,表示这个主键是由数据库自动增长(auto increment)生成的。这意味着MBG在插入记录时会依赖数据库自动生成的主键值。
这段配置告诉 MyBatis Generator,当插入新记录到数据库时,id
列应使用数据库的自增特性来生成主键值,而不需要在插入语句中显式指定主键值。这样做的好处是简化了数据插入操作,并且可以确保主键值的唯一性和递增性。
Q:不加这条配置是不是相当于插入时必须指定主键?
A:不完全是这样。如果不加 <generatedKey>
配置,MyBatis Generator 生成的插入语句将不会自动处理主键。这意味着以下几种情况可能会发生:
如果数据库表的主键列设置为自增 (AUTO_INCREMENT
在 MySQL 中),即使你没有在 MyBatis 的插入语句中指定主键值,数据库在执行插入操作时仍然会自动为主键分配一个唯一的值。
如果数据库表的主键列没有设置为自增,或者需要使用特定的算法或方法来生成主键值(如 UUID 或序列),那么在插入记录时,你需要显式地提供一个主键值。
在某些情况下,如果你没有提供主键值,并且数据库表也没有设置自增主键,插入操作可能会失败,因为主键是不允许为空的,并且必须是唯一的。
因此,<generatedKey>
配置项主要是用来告诉 MyBatis Generator 如何处理主键的生成,以便在生成的代码中正确地插入新记录。如果你的表已经设置了自增主键,MyBatis Generator 默认不会包含主键值,数据库会自动处理。如果没有设置自增,通常需要在应用层生成主键值并在插入语句中指定。
Step 3. 双击 maven 插件的 mybatis-generator:generate
运行效果图(来源):

END