mybatisplus的详细使用(自动填充,乐观锁,分页,条件查询)

1.自动填充

@Data
@EqualsAndHashCode(callSuper = false)
@TableName("t_user")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    private String nickname;

    private String password;

    private String salt;

    /**
     * 注册时间	
     */
    @TableField(fill = FieldFill.INSERT)
    private Date registerDate;

    /**
     * 登录次数
     */
    private Integer loginCount;
    @TableField(fill = FieldFill.UPDATE)
private Date updateTime;

}

注意:@TabelName不能缺,否则填充失败

@Mapper
public interface UserMapper extends BaseMapper<User> {
    
}

按道理不需要加@Mapper,但不知道为什么不加会报错
实现接口:


@Component//注解不要忘记,表示交给Spring容器管理
//用于自动填充的工具类,规定必须要实现这个接口
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
    public void insertFill(MetaObject metaObject)
{
    this.setFieldValByName("registerDate",new Date(),metaObject);
    this.setFieldValByName("updateTime",new Date(),metaObject);
    //当使用mybatis plus实现添加操作时会执行这个方法

}
@Override
    public void updateFill(MetaObject metaObject)
{

    this.setFieldValByName("updateTime",new Date(),metaObject);
}

}

测试添加:

    @Autowired
    private UserMapper userMapper;
    @Test
    public void updateUser(){
        User user = new User();
        user.setId(2);
        user.setSalt("3241341");
   userMapper.updateById(user);
//   User u2 = new User();
//   u2.setId(33);
//   u2.setNickname("小红");
//   u2.setPassword("12341");
//   u2.setSalt("efswagq");
//   userMapper.insert(u2);
    }

运行插入:

在这里插入图片描述

更新:
在这里插入图片描述

2.乐观锁

数据库中添加版本号:

version
在这里插入图片描述

添加插件:

@Configuration
@MapperScan("按需修改")
public class MybatisPlusConfig {
    /**
     * 旧版
     */
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
    
    /**
     * 新版
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}

在实体类的字段上加上@Version注解
@Version
private Integer version;

支持的数据类型只有:int,Integer,long,Long,Date,Timestamp,LocalDateTime
整数类型下 newVersion = oldVersion + 1
newVersion 会回写到 entity 中
仅支持 updateById(id) 与 update(entity, wrapper) 方法
在 update(entity, wrapper) 方法下, wrapper 不能复用!!!

可以自动填充的方式设置版本号的默认值。

3.分页

配置分页插件:

    @Bean
   
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }

测试:


    @Test
    public void testPage(){
        //创建page对象 传入两个参数:当前页和每页显示记录数
    Page<User>page = new Page<>(1,3);
    //调用mybatisplus分页查询的方法 把分页所有数据封装到page对象中
    userMapper.selectPage(page,null);
    page.getRecords().forEach(System.out::println);
    }

配置类上面一定要加@Configuration,否则没有插件效果

4.条件查询


    @Test
    public void testSelect(){
        //执行复杂查询操作
        QueryWrapper<User> wrapper = new QueryWrapper<>();
//        wrapper.ge("age",30);//查询age>=30的记录
//        List<User> users = userMapper.selectList(wrapper);
//        System.out.println(users);
        wrapper.eq("nickname","小明");//nickname=小明的数据
        List<User> users = userMapper.selectList(wrapper);
        System.out.println(users);
    }

输出:
[User(id=2, nickname=小明, password=123, salt=3241341, registerDate=null, loginCount=null, updateTime=Thu Jul 29 11:28:56 CST 2021, version=null)]

指定查询的列:

   wrapper.select("nickname");
        List<User> users = userMapper.selectList(wrapper);
        for(User user:users)
            System.out.println(user.getNickname());

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值