mybatis-plus使用心得

  mybatis-plus是一款基于mybatis的持久层框架,在mybatis上只做增强不做改变。基本使用流程:

  1. 导入依赖坐标:
    <dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>Latest Version</version>
    </dependency>
  2. 在yml文件中配置使用的数据源。
  3. mybatisplus分别在dao层和service层提供了基础的接口,提供了基础的增删改查实现。只需要继承BaseMapper和Iservice接口。
  4. 在mybatis-plus中集成了分页插件,需要在配置类中将插件配置成bean加入容器中。
    @Bean
        public MybatisPlusInterceptor mybatisPlusInterceptor(){
            MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
            mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
            return mybatisPlusInterceptor;
        }
  5. 集成日志配置,在yml文件中配置:
    mybatis-plus:
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  6. id生成:mybatis-plus自带主键生成策略,使用注解
    @TableId(type = IdType.AUTO)
    private Long id;
  7. 自动填充,一般数据库中都有修改时间,新增时间等字段,mybatis-plus可以通过配置生成策略自动生成。代码中在实体类上需要自动填充的字段使用注解标注。
    @TableField(value = "gmt_create",fill = FieldFill.INSERT)
    private Date gmtCreate;
    
    @TableField(value = "gmt_modified",fill = FieldFill.INSERT_UPDATE)
    private Date gmtModified;

    需要将自动填充策略作为bean添加到容器中,自定义填充字段的生成策略。

    @Slf4j
    @Component
    public class MyMetaObjectHandler implements MetaObjectHandler {
        @Override
        public void insertFill(MetaObject metaObject) {
            log.info("start insert fill....");
            this.setFieldValByName("gmtCreate",new Date(),metaObject);
            this.setFieldValByName("gmtModified",new Date(),metaObject);
        }
    
        @Override
        public void updateFill(MetaObject metaObject) {
            log.info("start update fill....");
            this.setFieldValByName("gmtModified",new Date(),metaObject);
        }
    }
  8. 逻辑删除字段处理,实际开发中数据库的字段一般不会进行物理删除,通常使用逻辑删除修改标记位。mybatis-plus中使用注解@Tablelogic实现,数据库增加逻辑删除字段,实体类上标注
    @TableLogic(value = "1",delval = "0") //逻辑删除
        private Integer deleted;

    在yml文件中指明逻辑删除标记位:

    mybatis-plus:
      global-config:
        db-config:
          logic-delete-field: deleted # 逻辑删除的字段
          logic-delete-value: 1 # 1代表删除
          logic-not-delete-value: 0 # 0代表未删除
  9. 乐观锁/悲观锁 mybatis-plus中使用@Version字段实现乐观锁,数据库添加version字段,实体类处理:
    @Version
        private Integer version;

    将乐观锁组件注册到IOC中

    @Bean
        public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor(){
            return new OptimisticLockerInnerInterceptor();
        }
  10. mybatis-plus处理枚举字段,使用自定义的枚举类表示,可以使用@EnumValue注解加在要保存进数据库中的字段上,mp将会自动映射。使用@JsonValue加在枚举类中要返回给前端的属性的get方法上,返回时将会自动映射,如SexEnum中返回前端的就是(“男人”/“女人”).
    public enum SexEnum {
        MAN(1, "男人"),
        WOMAN(0, "女人");
    
        @EnumValue
        private int code;
    
        private String value;
    
    
        SexEnum(int code, String value) {
            this.code = code;
            this.value = value;
        }
    
    
        public int getCode() {
            return code;
        }
    
        @JsonValue
        public String getValue() {
            return value;
        }
    }

    yml文件中配置

    mybatis-plus:
      type-enums-package: com.codeyoung.json.domain # 指定枚举类所在的包
      configuration:
        default-enum-type-handler: org.apache.ibatis.type.EnumOrdinalTypeHandler # 指定默认枚举类处理器
  11. mybatis-plus处理json字段的数据,如果数据库中字段为json格式的字符串,可以使用@TableFiled(Typehandler=JacksonTypeHandler.class)实现javatype到jdbctype的互转,可以将实体类对象转为json字符串存入到表中。
    @Data
    public class Foo {
        private Long id;
        private String bar;
        private Bar barObj;
        private Date createTime;
    }
    
    @Data
    public class Bar {
        private String name;
        private Integer quz;
        private Date timestamp;
    }

     

posted @ 2021-11-02 17:15  迷茫的bug  阅读(147)  评论(0编辑  收藏  举报
1