【MybatisPlus】SpringBoot快速集成MybatisPlus
目录
<!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!-- mybatis-plus 所需依赖 --> <!-- 注意:不要再引入mybatis依赖 mybatis-spring-boot-starter 了,防止造成版本冲突--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.5.1</version> </dependency> <!-- 要用到的模版引擎依赖 --> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.31</version> </dependency> <!-- 实体工具类依赖 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
先上代码:
import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.generator.FastAutoGenerator; import com.baomidou.mybatisplus.generator.config.OutputFile; import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; import com.baomidou.mybatisplus.generator.fill.Column; import java.util.Collections; public class MybatisPlusGeneratorUtil { // TODO 注意:未来每次只需要修改TODO部分 public static void main(String[] args) { // 0、数据库配置【数据库连接、用户名、密码】 String dbUrl = "jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8"; String userName = "username"; String password = "password"; // 1、globalConfig【作者、输出目录】 String author = "author"; String outputDir = System.getProperty("user.dir") + "/src/main/java"; // 2、packageConfig【父包名、父包模块名、实体类PO生成路径、Mapper接口生成路径、Mapper.xml生成路径】 String parent = "com.myself"; String moduleName = "testmybatisplus"; String entityPODir = "entity.po"; String daoDir = "repository"; String daoImplDir = "repository.Impl"; String mapperDir = "mapper"; String mapperXmlDir = System.getProperty("user.dir") + "/src/main/resources/mapper/"; // 3、strategyConfig【过滤表前缀、自动填充的字段、表名】 String[] addTablePrefix = {}; Column[] addTableFills = {new Column("create_time", FieldFill.INSERT), new Column("update_time", FieldFill.INSERT_UPDATE)}; // TODO 【每次必须要改】 String[] addInclude = {"test_mybatis_plus"}; FastAutoGenerator // 数据库配置 .create(dbUrl, userName, password) // 全局配置 .globalConfig(builder -> { builder.author(author) // 设置作者 .fileOverride() // 覆盖已生成文件 .outputDir(outputDir) // 指定输出目录 .disableOpenDir(); // 不打开输出目录 }) // 包配置 .packageConfig(builder -> { builder.parent(parent) // 设置父包名 .moduleName(moduleName) // 设置父包模块名 .entity(entityPODir) // 实体类PO生成路径 .mapper(mapperDir) // Mapper接口生成路径 .service(daoDir) // 设置自定义dao路径 .serviceImpl(daoImplDir) // 设置自定义daoImpl路径 .pathInfo(Collections.singletonMap(OutputFile.mapperXml, mapperXmlDir)); // 设置mapperXml生成路径 }) // 策略配置 .strategyConfig(builder -> { builder.addInclude(addInclude) // 设置需要生成的表名,默认为库中所有表 .addTablePrefix(addTablePrefix) // 设置过滤表前缀 .mapperBuilder().enableBaseResultMap() // 开启表字段映射、cache()默认不开启 .entityBuilder().addTableFills(addTableFills).enableLombok() // 设置自动填充的时间字段、开启lombok模型 ; }) // 模板配置 .templateConfig(builder -> builder .controller("") // 设置不生成controller .service("") // 设置不生成service .serviceImpl("") // 设置不生成serviceImpl .entity("/templates/entity.java") // 设置entity模板 .mapper("/templates/mapper.java") // 设置mapper接口模版 .mapperXml("/templates/mapper.xml") // 设置mapper.xml模板 ) // 模板引擎 .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 // 注入配置 // .injectionConfig() // 执行 .execute(); } }
说明:其实此段逻辑不复杂,就是对【数据源配置、全局配置、包配置、注入配置、模板配置、模板引擎】各项配置进行初始化,各个配置可查看 FastAutoGenerator 类,各项配置对应的具体配置可查看对应的配置类
1、配置需要扫描的mapper包所在的位置:在启动类上添加一个Mapper扫描的注解MapperScan,该配置也可放到任意一个配置类上,效果相同
2、自动填充create_time和update_time的配置类:
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.time.LocalDateTime; @Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { // start insert fill... this.setFieldValByName("createTime", LocalDateTime.now(), metaObject); this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject); } @Override public void updateFill(MetaObject metaObject) { // start update fill... this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject); } }
这个配置类是要和实体类上的注解配置使用的。由于已经在自动生成的工具类上做了设置,所以自动生成的实体中,createTime和updateTime上都会有对应注解,这样才能自动填充,如下注解。
@TableField(fill = FieldFill.INSERT)
@TableField(fill = FieldFill.INSERT_UPDATE)
3、如果我们想要使用Mybatis-Plus中的分页功能,我们还需要添加一个配置类,加入分页拦截器的配置。
import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MybatisPlusConfig { // 老版本,目前已失效 /**@Bean public PaginationInterceptor paginationInterceptor() { PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); return paginationInterceptor; }*/ // 新的分页插件,一缓和二缓遵循mybatis的规则 @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } }
小编不易,如果文章对您有帮助,可否来个三连,赏个赞也是好的呀!!!
博客参考:
SpringBoot教程(十三) SpringBoot集成MybatisPlus:https://blog.csdn.net/m0_67402013/article/details/126114741