mybatis-plus 高级用法二

1、字段类型处理器

        在某些场景下,我们在实体类中是使用 Map 集合作为属性接收前端传递过来的数据的,但是这些数据存储在数据库时,我们使用的是 json 格式的数据进行存储,json本质是一个字符串,就是 varchar 类型。那怎么做到实体类的 Map 类型和数据库的varchar类型的互相转换,这里就需要使用到字段类型处理器来完成。

示例:

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName(autoResultMap = true) //查询时将json字符串封装为Map集合
public class User extends Model<User> {
    private Long id;
    private String name;
    private Integer age;
    private String email;
    private GenderEnum gender;
    private Integer status;
    @TableField(typeHandler = FastjsonTypeHandler.class)  //指定字段类型处理器
    private Map<String,String> contact;  // 添加map类型的参数
}

以上就可以实现 map 转 json 字符串和 json 字符串转 map。

2、字段自动填充

        这个功能在设置时间日期的时候特别实用。

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName(autoResultMap = true)
public class User extends Model<User> {
    @TableId
    private Long id;
    private String name;
    private Integer age;
    private String email;
    private Integer status;
    private GenderEnum gender;
    @TableField(typeHandler = FastjsonTypeHandler.class)
    private Map<String,String> contact;
    @TableField(fill = FieldFill.INSERT)  // 指定填充时机
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE) // 指定填充时机
    private Date updateTime;
}

 编写自动填充处理器,自定义填充策略

@Component
public class MyMetaHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        setFieldValByName("createTime",new Date(),metaObject);
        setFieldValByName("updateTime",new Date(),metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        setFieldValByName("updateTime",new Date(),metaObject);
    }
}
3、乐观锁

实现步骤:

1、在数据库中添加version字段(int 类型,默认值为1)

2、实体类添加对应的属性,并使用@Version标注为这是一个乐观锁字段信息。

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
    @Version    // 标注此字段是乐观锁字段
    private Integer version;
}

3、通过拦截器的配置,让每条修改的sql语句在执行的时候,都加上版本控制的功能。

        乐观锁的效果是,一个请求在修改的过程中,是允许另一个请求查询的,但是修改时会通过版本号是否改变来决定是否修改,如果版本号变了,证明已经有请求修改过数据了,那这次修改不生效,如果版本号没有发生变化,那就完成修改。

@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); // 添加乐观锁拦截器
        return interceptor;
    }
}
4、多数据源配置
4.1、引入依赖
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.1.0</version>
</dependency>
4.2、配置文件(application.yml)
spring:
  datasource:
    dynamic:
      primary: master 
      strict: false
      datasource:
        master:
          username: root
          password: root
          url: jdbc:mysql://localhost:3306/mybatisplus?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
          driver-class-name: com.mysql.cj.jdbc.Driver
        slave_1:
          username: root
          password: root
          url: jdbc:mysql://localhost:3306/mybatisplus2?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
          driver-class-name: com.mysql.cj.jdbc.Driver
4.3、创建多个Service,分别使用@DS注解描述不同的数据源信息
@Service
@DS("master")
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService {
}
//===========================================================================
@Service
@DS("slave_1")
public class UserServiceImpl2 extends ServiceImpl<UserMapper, User> implements UserService{
}

TODO:是否支持单个方法配置指定的数据源

5、逆向工程

使用mybatisX插件进行逆向工程操作:(直接在idea设置-> Plugins中查询安装即可)

1、使用idea连接数据库。

2、选中表右键,选择MybatisX-Generator,填写相应信息即可生成。

总结:本文介绍 mybatis-plus 中字段类型处理器、字段自动填充、乐观锁实现、多数据源配置使用、逆向工程操作等内容。

        本人是一个从小白自学计算机技术,对运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:it自学社团。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值