• Mybatis-Plus最新教程


    目录

    原理:MybatisPlus通过扫描实体类,并基于反射获取实体类信息作为数据库信息。

    ​编辑1.添加依赖

    2.常用注解

    3.常见配置:

    4.条件构造器

    5.QueryWrapper

    6.UpdateWrapper

    7.LambdaQueryWrapper:避免硬编码

    8.自定义SQL

    9.Iservice接口

    10.案例:实现接口​编辑

    11.Lambda

    12.批量新增

    13.代码生成

    14.静态工具

    15.逻辑删除

    16.通用枚举

    17. JSON类型处理器

    18. 生成秘钥

    19.分页插件:


    原理:MybatisPlus通过扫描实体类,并基于反射获取实体类信息作为数据库信息

    规定:

    1.添加依赖

    1. service 继承IService<实体类>
    2. 实现类中要继承IService的实现类ServiceImpl<mapper,实体类>

    1. 自定义 mapper 要继承BaseMapper<实体类>

    新增:insert(实体)  查询:selectByid(5L) 批量查:selectBatchIds(List.of(1L,2L,3L))

        修改updateById(实体)  删除deleteById(5L)

    2.常用注解

    @TableName(”表名”):指定表名

    @TableId(value=””,type=”主键类型”):用来指定表中的主键字段信息

    @TableField(“”):用来指定表中的普通字段信息

    转义:@TableField(“ ‘order’ ”);

    成员变量不是数据库字段:@TableField(exist = false)

    3.常见配置:

    4.条件构造器

    5.QueryWrapper

    无论是修改、删除、查询,都可以使用QueryWrapper来构建查询条件

    Eg:查询:查询出名字中带o的,存款大于等于1000元的人

    // 2.查询数据

        List users = userMapper.selectList(wrapper);

        users.forEach(System.out::println);

    更新:更新用户名为jack的用户的余额为2000

    userMapper.update(user, wrapper)//(实体类,wrapper)

    6.UpdateWrapper

    SET的赋值结果是基于字段现有值的

    更新id为1,2,4的用户的余额,扣200

    UPDATE user SET balance = balance - 200 WHERE id in (1, 2, 4)

    前面实体为更新的内容,后面为更新的条件

    .setSql("balance = balance - 200")

    userMapper.update(null, wrapper);

    7.LambdaQueryWrapper:避免硬编码

    8.自定义SQL

    利用MyBatisPlus的wrapper来构建复杂的where条件,然后自己定义SQL语句剩下的部分。利用Wrapper生成查询条件,再结合Mapper.xml编写SQL

    拼接 ${ew.customSqlSegment}

    9.Iservice接口

    自定义Service继承Iservice<实体>,自定义实现类继承ServiceImpl<自定义Mapper,实体>再实现自定义接口

    • save:新增
    • remove:删除
    • update:更新
    • get:查询单个结果
    • list:查询集合结果
    • count:计数
    • page:分页查询

    多个ID查:userService.listByIds(List.of(1L,2L,3L).var

    Users.forEach(System.out::println)

    LambdaQuery()

    LambdaUpdate()

    10.案例:实现接口

    11.Lambda

    实现一个根据复杂条件查询用户的接口,查询条件如下:

    • name:用户名关键字,可以为空
    • status:用户状态,可以为空
    • minBalance:最小余额,可以为空
    • maxBalance:最大余额,可以为空
    • .one():最多1个结果
    • .list():返回集合结果
    • .count():返回计数结果

    2.扣减后余额为0,则将用户status修改为冻结状态=2

    // 4.扣减余额 update tb_user set balance = balance - ?

        int remainBalance = user.getBalance() - money;

        lambdaUpdate()

                .set(User::getBalance, remainBalance) // 更新余额

                .set(remainBalance == 0, User::getStatus, 2) // 动态判断,是否更新status

                .eq(User::getId, id)

                .eq(User::getBalance, user.getBalance()) // 乐观锁

                .update();

    12.批量新增

    13.代码生成

    14.静态工具

    有的时候Service之间也会相互调用,为了避免出现循环依赖问题,MybatisPlus提供一个静态工具类:Db

    1.需求:改造根据id用户查询的接口,查询用户的同时返回用户收货地址列表

    15.逻辑删除

    对于一些比较重要的数据,我们往往会采用逻辑删除的方案,即:

    • 在表中添加一个字段标记数据是否被删除
    • 当删除数据时把标记置为1
    • 查询时只查询标记为0的数据

    一旦采用了逻辑删除,所有的查询和删除逻辑都要跟着变化,非常麻烦。

    为了解决这个问题,MybatisPlus就添加了对逻辑删除的支持。

    注意,只有MybatisPlus生成的SQL语句才支持自动的逻辑删除,自定义SQL需要自己手动处理逻辑删除。

    例如:逻辑删除字段:deleted

    删除操作:Update user SET deleted = 1 WHERE id = 1 AND deleted = 0

    查询操作:SELECT * FROM  User WHERE deleted = 0

    方法与普通删除一模一样,但是底层的SQL逻辑变了:

    16.通用枚举

    像这种字段我们一般会定义一个枚举,做业务判断的时候就可以直接基于枚举做比较。但是我们数据库采用的是int类型,对应的PO也是Integer。因此业务操作时必须手动把枚举与Integer转换,非常麻烦。

    枚举类型与数据库类型自动转换

    1. 在application.yaml文件中添加配置:

    mybatis-plus:  
      configuration:
         default-enum-type-handler:        com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler

    17. JSON类型处理器

    数据库的user表中有一个info字段,是JSON类型:

    格式像这样:

    {"age": 20, "intro": "佛系青年", "gender": "male"}

    而目前User实体类中却是String类型:

    将User类的info字段修改为UserInfo类型,并声明类型处理器:

    测试可以发现,所有数据都正确封装到UserInfo当中了:

    同时,为了让页面返回的结果也以对象格式返回,我们要修改UserVO中的info字段:

    此时,在页面查询结果如下:

    18. 生成秘钥

    19.分页插件:

  • 相关阅读:
    [附源码]计算机毕业设计时间管理软件appSpringboot程序
    CobaltStrike4.8--云服务器搭建
    Java 8 Stream API 引入和使用
    hdfs file system shell的简单使用
    Java经纬度校验,获取当前经纬度与目标经纬度之间的距离
    Ubuntu系统中安装libcurl库用来做爬虫
    穿越障碍:最小路径和的高效算法比较【python力扣题64】
    教师产假多少天
    最小公倍数
    图扑税务信息化系统管理平台,构建项目管理“一张网”
  • 原文地址:https://blog.csdn.net/qq_61338849/article/details/134405036