MybatisPlus的知识点

文章介绍了MybatisPlus的关键特性,包括使用DAO接口操作数据库,如插入、删除、更新和查询;通过@Data注解自动生成方法;利用分页拦截器实现分页查询;条件查询的方式,如Lambda表达式和NULL值处理;以及字段映射、ID生成策略、逻辑删除和乐观锁的概念及其应用。
摘要由CSDN通过智能技术生成

MybatisPlus的知识点

在这里插入图片描述
通过使用dao的接口来调用方法

  • insert() 给数据库中插入某个元素或对象
  • deleteById() 通过id进行产删除
  • updateById(Object) 修改元素的某项值
  • selectById() 通过id来进行查询
  • selectList(null) 查询所有

常用注解

  • @Data,为当前实体类在编译期设置对应的get/set方法,无参/无参构造方法,toString方法,
    hashCode方法,equals方法等

分页功能

  • 在配置类中设置响应的拦截器,就可以实现分页功能
@Configuration       //确保可以被配置类扫描到
public class MybatisPlusConfig {

    //制作分页拦截器
    @Bean      
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        //1.定义MP拦截器
        MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
        //2.添加具体的拦截器
        mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());    //添加分页的拦截器
        mpInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());  //添加乐观锁的拦截器
        return mpInterceptor;

    }

  • 实现分页查询
//分页查询
@Test
void testSelectPage(){
//1 创建IPage分页对象,设置分页参数
IPage<User> page=new Page<>(1,3);
//2 执行分页查询
userDao.selectPage(page,null);
//3 获取分页结果
System.out.println("当前页码值:"+page.getCurrent());
System.out.println("每页显示数:"+page.getSize());
System.out.println("总页数:"+page.getPages());
System.out.println("总条数:"+page.getTotal());
System.out.println("当前页数据:"+page.getRecords());
}

条件查询方式

按条件查询
  • mybatisplus将条件查询的条件封装在Wrapper中,从而进行条件查询
  • 方式一
QueryWrapper qw = new QueryWrapper();
        qw.lt("age", 18);    //添加条件,age<18
        List<User> userList = userDao.selectList(qw);
        System.out.println(userList);
  • 方式二:lambda格式条件查询
//方式二:lambda格式条件查询
       QueryWrapper<User> wq = new QueryWrapper<>();
        wq.lambda().lt(User::getAge,10);
        List<User> userList = userDao.selectList(wq);
        System.out.println(userList);
  • 也可以添加多个条件
`  lqw.lt(User::getAge, 30);
   lqw.gt(User::getAge,10);   //年龄大于10小于30`
 lqw.lt(User::getAge,10).or().gt(User::getAge,30);  //或者关系
    and   //并且关系
NULL值处理
  • 如果有的条件为null,也要执行sql
 //condition条件为真,则执行后面的条件。条件为假则不执行任何操作
        lqw.lt(null!=uq.getAge2(), User::getAge, uq.getAge2());
        lqw.gt(null!=uq.getAge(), User::getAge,uq.getAge());
查询投影
  • LambdaQueryWapper只能查询字段内中的属性名
  • QueryWrapper可以查询字段名和一些函数
  LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<>();
        //显示某些字段,这种格式只适用与Lambda格式
        lqw.select(User::getId,User::getUsername,User::getAge);
//        QueryWrapper<User> qw = new QueryWrapper<>();
//        qw.select("id","username","age","tel");
        List<User> userList = userDao.selectList(lqw);
        System.out.println(userList);
  • 分组求和
 qw.select("count(*) as count","gender");
        qw.groupBy("gender");  //按性别分组

        List<Map<String, Object>> userList = userDao.selectMaps(qw);
查询条件的设定
  • 范围匹配(> 、 = 、between)
  • 模糊匹配(like)
  • 空判定(null)
  • 包含性匹配(in)
  • 分组(group)
  • 排序(order)

  • eq表示==,相等
wrapper.eq("username", "周周");   //username==周周
  • 范围查询 lt le(<=) gt ge(>=) eq between

  • 删除 ,通过id删除

list.add(18);
        list.add(19);
        userDao.deleteBatchIds(list);
字段映射与表名映射
  • 在模型类属性上方,使用@TableField属性注解,通过value属性,设置当前属性对应的数据库表中的字段关系。
    @TableField(value = “password”,select = false) //将密码暴露很危险,不能被轻易查询
  • 使实体类类名与数据表表名对应
    @TableName(value = “tb_user”)
id生成策略(insert)

在这里插入图片描述

逻辑删除(Delete/Update)
  • 逻辑删除:为数据设置是否可用状态字段,删除时设置状态字段为不可用状态,数据保留在数据库中
 //逻辑删除字段,记录当前字段是否被删除
    @TableLogic(value = "0",delval = "1")
    private int deleted;
乐观锁

乐观锁主张的思想是什么?

  • 业务并发现象带来的问题:秒杀
  • 使用@Version来定义一个乐观锁的字段
//添加乐观锁
    @Version
    private Integer version;

  • 在配置类中添加拦截器
//2.添加乐观锁拦截器
mpInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
  • 添加乐观锁后,操作成功后,version会+1, 当要操作同一个值时
//1.先通过要修改的数据id将当前数据查询出来
User user = userDao.selectById(3L); //version=3
User user2 = userDao.selectById(3L); //version=3
user2.setName("Jock aaa");
userDao.updateById(user2); //version=>4
user.setName("Jock bbb");
userDao.updateById(user); //verion=3?条件还成立吗?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值