Mybatis_Plus
# Mybatis_Plus
# 1.MyBatis-Plus的Service服务常用API
list():返回List<T>对象,相当于select * from
save(T object):insert添加插入一条T对象的记录
remove(queryWrapper):根据搜索条件删除该记录
removeByIds(List<Long>):删除id列表上所有id对应的记录
updateById(T object):根据object对象中的id字段匹配表记录,然后更新对象中的其他属性(如果object某个属性字段为空则不进行更新)
update(object,updateWrapper):根据updateWrapper搜索条件(相当于where)匹配记录,然后把object对象的属性更新到该条记录
getById(Long id):根据id查找表中的数据,返回一个实体对象
getOne(queryWrapper):根据搜索条件查询表,返回一个对象
count(queryWrapper):根据搜索条件查询表,返回记录的条数
# 2.LambdaUpdateWrapper和LambdaQueryWrapper
- LambdaUpdateWrapper
updateWrapper.eq相当于拼接where条件,第一个变量可以是boolean,第二个指明是类的哪个属性作为字段,第三个指明值。
updateWrapper.set相当于仅仅设置哪个字段,不更新全部。
整个sql语句拼接起来是update table set A=0 where 条件
LambdaUpdateWrapper<AddressBook> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(AddressBook::getUserId, BaseContext.getId());
updateWrapper.set(AddressBook::getIsDefault, 0);
2
3
- LambdaQueryWrapper
queryWrapper.orderByDesc表示根据哪个字段进行降序,一般可以根据更新时间
queryWrapper.orderByDesc模糊查询
使用queryWrapper1.in条件删除多个数据
queryWrapper1.in(SetmealDish::getSetmealId, ids); //ids是一个集合数组
setmealDishService.remove(queryWrapper1);
2
# 3.mybatis-plus分页拦截器
首先配置分页插件,交给Bean管理
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return mybatisPlusInterceptor;
}
}
2
3
4
5
6
7
8
9
然后构建分页构造器->查询构造器->调用Service的page()方法
其中分页构造器需要指明page和pageSize
page()方法中会把查询结果注入到分页构造器的records(本质是一个查询结果列表List<T>),pageinfo就是要的最终的结果。
public R<Page> page(int page, int pageSize, String name) {
Page<Employee> pageinfo = new Page<>(page, pageSize);
LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(StringUtils.isNotEmpty(name), Employee::getName, name);
queryWrapper.orderByDesc(Employee::getUpdateTime);
//执行查询
employeeService.page(pageinfo, queryWrapper);
return R.success(pageinfo);
}
2
3
4
5
6
7
8
9
# 4.逻辑删除
实际后端调用deleteById时,数据库后端并不删除该行记录,仅仅使用表中的show_status位来表示是否删除
- 配置yml中MP的逻辑删除字段值,1则不删除,0则删除。
mybatis-plus:
global-config:
db-config:
logic-delete-value: 0
logic-not-delete-value: 1
2
3
4
5
- 在实体类上添加@TableLogic标注逻辑删除字段
# 5.更新查询语句
在Service实现类中可以直接使用以下框架封装好的api操作数据库。
更新语句使用setsql()
boolean id1 = update().setSql("liked=liked+1").eq("id", id).update();
查询语句实现
List<Blog> list = query().in("id", ids).last("ORDER BY FIELD(id," + idstr + ")").list();