开发者

MybatisPlus常用依赖、配置、插件方式

开发者 https://www.devze.com 2024-08-10 12:12 出处:网络 作者: Sucker_苏
目录MyBATisPlus常用依赖、配置、插件依赖插件配置自动填充代码生成器配置总结MybatisPlus常用依赖、配置、插件
目录
  • MyBATisPlus常用依赖、配置、插件
    • 依赖
    • 插件配置
    • 自动填充
    • 代码生成器配置
  • 总结

    MybatisPlus常用依赖、配置、插件

    依赖

    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-generator</artifactId>
        <version>3.5.1</version>
    </dependency>
    
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.3</version>
    </dependency>
    
    <!-- velocity 模板引擎, Mybatis Plus 代码生成器需要 -->
    <dependency>
        <groupId>org.apache.velocity</groupId>
        <artifactId>velocity-engine-core</artifactId>
        <version>${velocity.version}</version>
    </dependency>
    

    插件配置

    • 一般建立config包,新建一个配置类
    • 一般添加插件直接使用
    @Configuration
    @MapperScan(value = "com.sucker.eduservice.mapper")
    public class EduConfig {
    
        //mybatis-plus插件配置
        @Bean
        public MybatisPlusInterceptor mybatisPlusInterceptor() {
            MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
            interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));//分页插件
            interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());//乐观锁插件
            return interceptor;
        }
    }
    

    自动填充

    • 首先在实体类上需要添加注解
    @TableField(fill = FieldFill.INSERT)
    • 若需要给id添加值,则加上注解
    @TableId(type = IdType.ASSIGN_ID)

    此处例子ID是在数据库中自增因此没有使用该注解

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User {
        private Long id;
        private String name;
        private Integer age;
        private String email;
    
        //数据库中是下划线,实体类要驼峰
        @TableField(fill = FieldFill.INSERT)
        private Date createTime;
    
        @TableField(fill = FieldFill.INSERT_UPDATE)//自动填充注解
        private Date updateTime;编程客栈
    
        @Version
        @TableFipythoneld(fill = FieldFill.INSERT)
        private Integer version;//版本号
    
        @TableLogic
        private Integer deleted;
    
    }
    

    在新建handler包,新建MyMetaObjectHandler类,需要实现MetaObjectHandler

    在其中进行自动填充配置

    @Component
    public class MyMetaObjectHandler implements MetaObjectHandler {
        @Override
        public void insertFill(MetaObject metaObject) javascript{
            this.setFieldValByName("createTime", new Date(), metaObject);
            this.setFieldValByName("updateTime", new Date(), metaObject);
    
            this.setFieldValByName("version", 1, mMnNIddetaObject);
        }
    
        @Override
        public void updateFill(MetaObject metaObject) {
            this.setFieldValByName("updateTime", new Date(), metaObject);
        }
    }
    

    代码生成器配置

    一般只写在test目录中,因为只使用一次

    package com.sucker.demo;
    
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import com.baomidou.mybatisplus.generator.FastAutoGenerator;
    import com.baomidou.mybatisplus.generator.config.OutputFile;
    import com.baomidou.mybatisplus.generator.config.rules.DateType;
    import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
    import org.junit.Test;
    
    import Java.util.Collections;
    
    
    public class CodeGenerator {
        // 演示例子,执行 main 方法控制台输入模块表名回车自动生成对应项目目录中
        @Test
        public void test(){
            FastAutoGenerator.create("jdbc:mysql://localhost:3306/guli_edu?useUnicode=true&characterEncoding=utf8",
                    "root", "123456")
                    .globalConfig(builder -> {
                        builder.author("sucker") // 设置作者
                                .enableSwagger() // 开启 swagger 模式
                                .dateType(DateType.ONLY_DATE)
                                .fileOverride()
                                .outputDir("D:\\JavaCode\\gulimall\\guli_parent1\\service\\service_edu"+"\\src\\main\\java"); // 指定输出目录
                    })
                    .packageConfig(builder -> {
                        builder.parent("com.sucker") // 设置父包名
                                .moduleName("eduservice") // 设置父包模块名
                                .controller("controller")
                                .entity("entity")
                                .service("service")
                                .mapper("mapper")
                                .XML("mapper")
                                .pathInfo(Collections.singletonMap(OutputFile.mapperXml,
                                        "D:\\JavaCode\\gulimall\\guli_parent1\\service\\service_edu\\src\\main\\resources\\mapper")); // 设置mapperXml生成路径
                    })
                    .strategyConfig(builder -> {
                        builder.addInclude("edu_teacher") // 设置需要生成的表名
                                .addTablePrefix("t_", "c_") // 设置过滤表前缀
                                .serviceBuilder()
                                .formatServiceFileName("%sService")
                                .entityBuilder()
                                .enableLombok()
                                .logicDeleteColumnName("is_deleted")
                                .enableTableFieldAnnotation()
                                .controllerBuilder()
                                .formatFileName("%sController")
                                .enableRestStyle()
                                .mapperBuilder()
                                .enableBaseResultMap()
                                .superClass(BaseMapper.cla编程客栈ss)
                                .formatMapperFileName("%sMapper")
                                .enableMapperAnnotation()
                                .formatXmlFileName("%sMapper");
                    })
                    .templateEngine(new VelocityTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                    .execute();
    
        }
    
    }
    

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号