文章目录
- 简介
- 注意事项
- 依赖引入
- 代码生成工具
- 注释
- 1、自动填充
- 2、乐观锁和分页
- 3、逻辑删除
- 代码git地址
- 参考资料
简介
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
注意事项
MyBatis-Plus 从3.0.3 之后
移除了代码生成器与模板引擎的默认依赖
,需要手动添加相关依赖。
依赖引入
Mybatis-Plus 依赖引入如下所示:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
3.0.3
移除了代码自动生成,还需要引入代码生成器依赖
:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
3.0.3
移除了模板,还需要引入模板:下面3个选一个即可
<!--模板引擎-->
<!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity-engine-core -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
<!-- <dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.30</version>
</dependency>-->
<!-- https://mvnrepository.com/artifact/com.ibeetl/beetl -->
<!--<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl</artifactId>
<version>3.1.3.RELEASE</version>
</dependency>-->
Velocity
是默认的模板,如果使用别的模板,还需要做以下配置。
AutoGenerator generator = new AutoGenerator();
// set freemarker engine
generator.setTemplateEngine(new FreemarkerTemplateEngine());
// set beetl engine
generator.setTemplateEngine(new BeetlTemplateEngine());
// set custom engine (reference class is your custom engine class)
generator.setTemplateEngine(new CustomTemplateEngine());
// other config
...
当然此处将MySQL表结构自动生成Java,还需要引入数据库驱动:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
代码生成工具
编写代码生成Java类,运行即可。
代码如下所示:
package cn.linkpower;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import java.util.ArrayList;
// 代码生成器
public class CodeGenerator {
public static void main(String[] args) {
// 构建一个代码生成器对象
AutoGenerator mpg = new AutoGenerator();
// 配置策略
// 1、全局配置
GlobalConfig gc = new GlobalConfig();
// 设置生成代码的目录
// 获取当前项目的目录
String property = System.getProperty("user.dir");
gc.setOutputDir(property + "/src/test/java/"); // 这里是生成在 /test/ 下,可以根据具体情况改变
// 生成代码的作者
gc.setAuthor("专注写bug");
// 生成完成后,打开项目所在windows下的文件夹(false 不打开)
gc.setOpen(false);
// 是否覆盖原来的文件(false 不覆盖)
gc.setFileOverride(true);
// 去除IService的I前缀
gc.setServiceImplName("%sService");
// 设置pojo类主键策略
gc.setIdType(IdType.ID_WORKER);
// 设置pojo类data的类型
gc.setDateType(DateType.ONLY_DATE);
// 设置swagger文档
gc.setSwagger2(false);
// 将配置丢入自动生成器内
mpg.setGlobalConfig(gc);
// 2、设置数据源
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://192.168.99.100:3306/mybatis_plus?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("你的密码");
dsc.setDbType(DbType.MYSQL); // 使用的是mysql
mpg.setDataSource(dsc);
// 3、包的配置
PackageConfig pc = new PackageConfig();
pc.setParent("cn.linkpower");
pc.setModuleName("test");
pc.setEntity("pojo");
pc.setMapper("mapper");
pc.setService("service");
pc.setController("controller");
mpg.setPackageInfo(pc);
// 4、配置策略
StrategyConfig strategy = new StrategyConfig();
strategy.setInclude("user"); // 设置要映射的表,多个则使用 ”,“ 分割
strategy.setNaming(NamingStrategy.underline_to_camel); // 命名规则(下划线转驼峰)
strategy.setColumnNaming(NamingStrategy.underline_to_camel);//列的名字(下划线转驼峰)
//strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!");
strategy.setEntityLombokModel(true); // 是否使用lombok开启注解
// 设置逻辑删除的别名
strategy.setLogicDeleteFieldName("deleted");
// 设置自动填充配置
TableFill create_time = new TableFill("create_time", FieldFill.INSERT);
TableFill update_time = new TableFill("update_time", FieldFill.INSERT_UPDATE);
ArrayList<TableFill> tableFiledLists = new ArrayList<>();
tableFiledLists.add(create_time);
tableFiledLists.add(update_time);
strategy.setTableFillList(tableFiledLists);
// 乐观锁策略
strategy.setVersionFieldName("version");
// controller 驼峰命名
strategy.setRestControllerStyle(true);
strategy.setControllerMappingHyphenStyle(true); // requestMapping中使用下划线命名
mpg.setStrategy(strategy);
// 执行
mpg.execute();
}
}
运行结束后,代码视图如下所示:
注释
上面的代码生成器,对自动填充
、乐观锁
、逻辑删除
等只是加了注解配置
,并无其他配置项。这些配置项需要手动在对应的配置文件中编写。
1、自动填充
package cn.linkpower.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import java.util.Date;
@Slf4j
@Component // 将组件加载至spring的ioc容器中
public class MyMetaObjectHandler implements MetaObjectHandler {
/**
* 插入时的填充策略
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
log.info("---- insertFill ---");
// metaObject.hasSetter() 可以用来判断是否有这个列,但是即便是没有这个列,写下面的配置也不会报错!
// 插入数据时
// 给 createTime 设定时间
this.setFieldValByName("createTime",new Date(),metaObject);
// 给 update_time 设定时间
this.setFieldValByName("updateTime",new Date(),metaObject);
}
/**
* 更新时的填充策略
* @param metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
log.info("---- updateFill ---");
// 更新操作时,只需要修改 update_time 的数据即可
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}
2、乐观锁和分页
package cn.linkpower.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.aop.interceptor.PerformanceMonitorInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import java.security.PermissionCollection;
@Configuration
@EnableTransactionManagement // 开启事务,默认是开启的
public class MPOptimisticLockerConfig {
/**
* 旧版
*/
// @Bean
// public OptimisticLockerInterceptor optimisticLockerInterceptor() {
// return new OptimisticLockerInterceptor();
// }
/**
* 新版
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
// 乐观锁
mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
// 分页
// 官方给的案例是H2数据库,我们测试使用的是MySQL,此处需要做更改
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return mybatisPlusInterceptor;
}
// 分页旧版
// @Bean
// public PaginationInterceptor paginationInterceptor() {
// PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
// // paginationInterceptor.setOverflow(false);
// // 设置最大单页限制数量,默认 500 条,-1 不受限制
// // paginationInterceptor.setLimit(500);
// // 开启 count 的 join 优化,只针对部分 left join
// paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
// return paginationInterceptor;
// }
/**
* SQL执行效率插件 性能分析插件(3.2.0 之后废除)
*/
// @Bean
// @Profile({"dev","test"})// 设置 dev test 环境开启
// public PerformanceInterceptor performanceInterceptor() {
// PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
// performanceInterceptor.setFormat(true);//格式化语句
// //performanceInterceptor.setMaxTime(5);//执行时间超过多少秒会抛出异常
// return performanceInterceptor;
// }
}
3、逻辑删除
#逻辑删除配置
# 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
mybatis-plus.global-config.db-config.logic-delete-field: deleted
# 逻辑已删除值(默认为 1)
mybatis-plus.global-config.db-config.logic-delete-value: 1
# 逻辑未删除值(默认为 0)
mybatis-plus.global-config.db-config.logic-not-delete-value: 0
代码git地址
https://gitee.com/xiangjiaobunana/springboot-mybatis-plus.git
参考资料