概述
MyBatis Generator是一个代码生成器,可以为mybatis自动生成对应数据库表结构的实体类、mapper接口以及对应mapper.xml,大大减少这些繁琐重复的劳动,很方便。
MyBatis Generator被设计为可以多次运行,生成代码时,java文件一般会被覆盖,xml文件新旧代码会合并。
MyBatis Generator有三种用法:命令行、eclipse插件、maven插件。我们这里介绍最方便的maven插件用法,其他方法大同小异,如需了解可参考相关资料。
准备工作
准备数据
数据会重用之前spring boot集成mybatis(1),spring boot集成mybatis(2) – 使用pagehelper实现分页的数据,如无数据请参照教程创建。
Eclipse项目
不创建新项目,与数据一样重用前2篇教程的项目,没有项目请按前2篇教程创建。
添加依赖
添加mybatis generator插件,在pom.xml的build > plugins下添加依赖
<plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.7</version> <configuration> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.13</version> <scope>runtime</scope> </dependency> </dependencies> </plugin>
pom.xml的完整内容
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="//maven.apache.org/POM/4.0.0" xmlns:xsi="//www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="//maven.apache.org/POM/4.0.0 //maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.qikegu</groupId> <artifactId>springboot-mybatis-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springboot-mybatis-demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.10</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.7</version> <configuration> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.13</version> <scope>runtime</scope> </dependency> </dependencies> </plugin> </plugins> </build> </project>
添加配置
新增generatorConfig.xml文件,此文件是MyBatis Generator的配置文件
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "//mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <!--导入配置文件--> <properties resource="application.properties"></properties> <!-- 一个数据库一个context --> <context id="default"> <!-- 注释生成设置 --> <commentGenerator> <!-- 是否生成注释代时间戳--> <property name="suppressDate" value="true" /> <!-- 是否取消注释 --> <property name="suppressAllComments" value="true" /> </commentGenerator> <!--jdbc的数据库连接--> <jdbcConnection driverClass="{spring.datasource.driver-class-name}" connectionURL="{spring.datasource.url}" userId="{spring.datasource.username}" password="{spring.datasource.password}"> <property name="nullCatalogMeansCurrent" value="true" /> </jdbcConnection> <!-- 类型转换 --> <javaTypeResolver> <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) --> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- targetPackage:生成的实体类所在的包 --> <!-- targetProject:生成的实体类所在的硬盘位置 --> <javaModelGenerator targetPackage="com.qikegu.demo.model" targetProject="src/main/java"> <!-- 是否允许子包 --> <property name="enableSubPackages" value="false" /> <!-- 是否对modal添加构造函数 --> <property name="constructorBased" value="true" /> <!-- 是否清理从数据库中查询出的字符串左右两边的空白字符 --> <property name="trimStrings" value="true" /> <!-- 建立modal对象是否不可改变 即生成的modal对象不会有setter方法,只有构造方法 --> <property name="immutable" value="false" /> </javaModelGenerator> <!-- targetPackage 和 targetProject:生成的 mapper xml 文件的包和位置 --> <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"> <!-- 是否在当前路径下新加一层schema,ex:false路径com.qikegu.demo.model, com.qikegu.demo.model.[schemaName] --> <property name="enableSubPackages" value="false" /> <!-- 是否针对string类型的字段在set的时候进行trim调用 --> <property name="trimStrings" value="true"/> </sqlMapGenerator> <!-- targetPackage 和 targetProject:生成的 java interface 文件的包和位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.qikegu.demo.repository" targetProject="src/main/java"> <!-- 是否在当前路径下新加一层schema,ex:false路径com.qikegu.demo.model, com.qikegu.demo.model.[schemaName] --> <property name="enableSubPackages" value="false" /> </javaClientGenerator> <!-- 配置表信息 --> <!-- schema即为数据库名 tableName为对应的数据库表 domainObjectName是要生成的实体类 enable*ByExample, 是否生成 example类 --> <!-- 不同的表,修改tableName和domainObjectName就可以 --> <table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> </table> </context> </generatorConfiguration>
解释:
请参考代码中的注释。
自动生成
删除旧文件
删除下图中的文件,这些文件将由mybatis generator自动生成
运行mybatis generator
Eclipse左侧,在项目根目录上点击鼠标右键弹出菜单,选择:run as -> 4.Maven build...
,弹出对话框如下图,注意红圈中的修改,点击run运行:
如果没有意外,build完成后,文件已经生成。
修改代码
如果运行一下程序,会报错,原因是userMapper.java中selectUser()接口不存在了。
注释掉相关代码:
UserService.java
// public List<User> listUser(int page, int pageSize);
UserserviceImpl.java
// @Override // public List<User> listUser(int page, int pageSize) { // List<User> result = null; // try { // PageHelper.startPage(page, pageSize); //每页的大小为pageSize,查询第page页的结果 // PageHelper.orderBy("id ASC "); //进行分页结果的排序 // result = userMapper.selectUser(); // } catch (Exception e) { // e.printStackTrace(); // } // // return result; // }
UserController.java
// @RequestMapping(value="", method = RequestMethod.GET, produces="application/json") // public PageInfo<User> listUser( // @RequestParam(value="page", required=false, defaultValue="1") int page, // @RequestParam(value="page-size", required=false, defaultValue="5") int pageSize){ // // // List<User> result = userService.listUser(page, pageSize); // // PageInfo包装结果,返回更多分页相关信息 // PageInfo<User> pi = new PageInfo<User>(result); // // return pi; // }
运行
Eclipse左侧,在项目根目录上点击鼠标右键弹出菜单,选择:run as -> spring boot app
运行程序。 打开Postman访问接口,运行结果如下:
总结
本文介绍了mybatis generator的使用方法,要点总结如下:
- 添加mybatis generator的maven插件依赖
- 添加mybatis generator的配置文件:generatorConfig.xml
- 运行maven build: mybatis-generator:generate,生成代码
实际开发中,mybatis generator很有用,用起来可以减少很多工作量。
完整代码:github