上一节我们学习了 mybatis-plus
的 ActiveRecord(活动记录)
,这一节我们来学习一下 mybatis-plus
的 代码生成器
。
Mybatis-Plus 的代码生成器为我们提供了大量的自定义设置,生成的代码完全能够满足各类型的需求,可以快速的生成代码,简化开发,提高开发效率。
Mybatis-Plus 的代码生成器 和 Mybatis MBG 代码生成器的对比:
Mybatis-Plus 代码生成器 | Mybatis MBG |
---|---|
Mybatis-Plus 的代码生成器都是基于 java 代码来生成 | MBG 基于 xml 文件进行代码生成 |
Mybatis-Plus 的代码生成器可生成: 实体类(可以选择是否支持 AR) 、 Mapper 接口 、 Mapper 映射文件 、 Service 层 、 Controller 层 |
MyBatis 的代码生成器可生成: 实体类 、 Mapper 接口 、 Mapper 映射文件 |
话不多说,下面我们来开始我们的代码生成器的学习之旅。
首先按照 快速开始——Spring集成Mybatis-Plus
一节的操作,新建一个 mp05
的 Module
,可以将 mp02
中的 resources
文件夹中内容全部复制过来,因为这些配置文件都是一样的。
在开始 mp05
的实战之前,我们需要修改下父工程的pom文件,因为MP 的代码生成器默认使用的是 Apache 的 Velocity
模板,需要加入 Apache Velocity
的依赖。当然也可以更换为别的模板技术,例如 freemarker
,此处不做过多的介绍,大家感兴趣的可以自己尝试。另外还需要引入 mybatis-plus-generator
的依赖,这时因为 MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖。除此之外还需要引入 spring-webmvc
的依赖,因为我们在用代码生成器生成的 controller
层的时候, SpringMVC
的注解会提示报错,当然,你也可以在生成完代码之后再根据需要引入 SpringMVC
的依赖也可以,这样并不会影响代码生成器的使用。
我们需要修改的 pom.xml
文件位置如下图所示:
贴上pom.xml修改部分的代码方便复制粘贴:
<!-- 下面的依赖针对于 mp05 模块--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!--注意: MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖: --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>${mybatis.plus.version}</version> </dependency> <!--模板引擎 MP 的代码生成器默认使用的是 Apache 的 Velocity 模板,当然也可以更换为别的模板 技术,例如 freemarker。此处不做过多的介绍。 需要加入 Apache Velocity 的依赖--> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>${velocity.version}</version> </dependency> <!--加入 slf4j ,查看日志输出信息--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> 复制代码
修改后完整的 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.demo.mybatis-plus</groupId> <artifactId>mybatis-plus-in-action</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>mp01</module> <module>mp02</module> <module>mp03</module> <module>mp04</module> <module>mp05</module> <module>mp06</module> <module>mp07</module> <module>mp08</module> </modules> <!-- 统一管理项目依赖版本 --> <properties> <mybatis.plus.version>3.2.0</mybatis.plus.version> <!--<mybatis.plus.version>2.3</mybatis.plus.version>--> <junit.version>4.12</junit.version> <log4j.version>1.2.17</log4j.version> <druid.version>1.1.20</druid.version> <mysql.version>5.1.48</mysql.version> <spring.version>5.2.0.RELEASE</spring.version> <lombok.version>1.18.10</lombok.version> <slf4j.version>1.7.28</slf4j.version> <velocity.version>2.1</velocity.version> </properties> <dependencies> <!-- mp 依赖 mybatis-plus 会自动维护mybatis 以及 mybatis-spring相关的依赖 Mybatis 及 Mybatis-Spring 依赖请勿加入项目配置,以免引起版本冲突!!!Mybatis-Plus 会自动帮你维护! --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>${mybatis.plus.version}</version> </dependency> <!--junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency> <!-- log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <!-- druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!-- spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <!--lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <scope>provided</scope> </dependency> <!-- 下面的依赖针对于 mp05 模块--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!--注意: MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖: --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>${mybatis.plus.version}</version> </dependency> <!--模板引擎 MP 的代码生成器默认使用的是 Apache 的 Velocity 模板,当然也可以更换为别的模板 技术,例如 freemarker。此处不做过多的介绍。 需要加入 Apache Velocity 的依赖--> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>${velocity.version}</version> </dependency> <!--加入 slf4j ,查看日志输出信息--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> </dependencies> <!-- 设置JDK编译版本 --> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build> </project> 复制代码
<?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"> <parent> <artifactId>mybatis-plus-in-action</artifactId> <groupId>com.demo.mybatis-plus</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>mp05</artifactId> <dependencies> <!-- mp 依赖 mybatis-plus 会自动维护mybatis 以及 mybatis-spring相关的依赖 Mybatis 及 Mybatis-Spring 依赖请勿加入项目配置,以免引起版本冲突!!!Mybatis-Plus 会自动帮你维护! --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>${mybatis.plus.version}</version> </dependency> <!--junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency> <!-- log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <!-- druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!-- spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <!--lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!--注意: MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖: --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>${mybatis.plus.version}</version> </dependency> <!--模板引擎 MP 的代码生成器默认使用的是 Apache 的 Velocity 模板,当然也可以更换为别的模板 技术,例如 freemarker。此处不做过多的介绍。 需要加入 Apache Velocity 的依赖--> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>${velocity.version}</version> </dependency> <!--加入 slf4j ,查看日志输出信息--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> </dependencies> </project> 复制代码
我们在 mp05/src/test/java/com/mp/test/
路径下新建一个测试类 TestMp.java
TestMp.java
的代码如下:
public class TestMp { private ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml"); /** * 代码生成器 示例代码 */ @Test public void testGenerator() { // 1、全局配置 com.baomidou.mybatisplus.generator.config.GlobalConfig config = new com.baomidou.mybatisplus.generator.config.GlobalConfig(); config.setActiveRecord(true) // 是否支持AR模式 .setAuthor("jianshu") // 作者 .setOutputDir("E://myCode//mybatis-plus-in-action//mp05//src//main//java") // 生成路径 .setFileOverride(true) // 文件覆盖 .setIdType(IdType.AUTO) // 主键策略 .setServiceName("%sService") //设置生成的service接口名首字母是否为I,默认是以I开头 .setBaseColumnList(true) // 基本列 .setBaseResultMap(true); // 返回结果map // 2、数据源配置 DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setDbType(DbType.MYSQL) // 设置数据库类型 .setDriverName("com.mysql.jdbc.Driver") .setUrl("jdbc:mysql://172.19.8.51:3306/wmcTradeOrderDevTemp?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8") .setUsername("root") .setPassword("root"); // 3、策略配置 StrategyConfig stConfig = new StrategyConfig(); stConfig.setCapitalMode(true) // 全局大写命名 // .setColumnNaming(NamingStrategy.underline_to_camel) //表名 字段名 是否使用下滑线命名 .setNaming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略 .setInclude("tbl_employee") //生成的表 .setTablePrefix("tbl_"); // 表前缀 // 4、包名策略配置 PackageConfig pkConfig = new PackageConfig(); pkConfig.setParent("com.mp") .setController("controller") .setEntity("beans") .setMapper("mapper") .setService("service") .setXml("mapper"); // 5、整合配置 AutoGenerator ag = new AutoGenerator().setGlobalConfig(config) .setDataSource(dataSourceConfig) .setStrategy(stConfig) .setPackageInfo(pkConfig); // 6、执行 ag.execute(); } } 复制代码
执行 testGenerator()
方法后,刷新一下项目,我们可以看到会自动生成 beans
、 mapper
、 service
、 controller
的代码。
注意
:关于表及字段命名策略选择:在 Mybatis-Plus 中,我们建议数据库表名 和 表字段名采用驼峰命名方式, 如果采用下划线命名方式 请开启全局下划线开关,如果表名字段名命名方式不一致请使用对应的注解指定,我们建议最好保持一致。这么做的原因是为了避免在对应实体类时产生的性能损耗,这样字段不用做映射就能直接和实体类对应。当然如果项目里不用考虑这点性能损耗,那么你采用下滑线也是没问题的,只需要在生成代码时配置 ColumnNaming属性就可以。
完成上面的操作后,mp05的代码结构如下所示:
至此,基于 mybatis-plus
的 代码生成器——逆行工程
演示就完成了,下面我们就可以进入到下一节 插件扩展
的学习了。