本地建设网站,市场调研问卷调查怎么做,网站响应度,架子鼓谱那个网站做的好目录 原理#xff1a;MybatisPlus通过扫描实体类#xff0c;并基于反射获取实体类信息作为数据库信息。
编辑1.添加依赖
2.常用注解
3.常见配置#xff1a;
4.条件构造器
5.QueryWrapper
6.UpdateWrapper
7.LambdaQueryWrapper:避免硬编码
8.自定义SQL
9.Iservic…目录 原理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.添加依赖 service 继承IService实体类实现类中要继承IService的实现类ServiceImplmapper,实体类 自定义 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.查询数据 ListUser 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.分页插件