MybatisPlus变成完全自动化了,省事,不需要手写sql,Mapper,service,但是条件还是需要自己来构造的。
这就需要手写Wrapper这个 条件对象,放入查找语句中。
首先写好接口
1. 写Mapper继承baseMapper
Mapper extanted baseMapper
2. 写service继承Iservice
service extends IService<T>
3. 写service实现类 继承ServiceImpl 实现Service
ServiceImpl extends ServiceImpl<Mapper,T> implements Service
官方文档:https://baomidou.com/guides/wrapper/
queryWrapper.lt() 小于
queryWrapper.le() 小于等于
queryWrapper.gt() 大于
queryWrapper.ge() 大于等于
queryWrapper.eq(列名,值) 等于
queryWrapper.like(列名,值) 模糊匹配 不需要在自己写%内容% 了
queryWrapper.likeRight(列名,值) 模糊匹配,在右侧添加百分号
queryWrapper.likeLeft(列名,值) 模糊匹配,在左侧添加百分号
queryWrapper.orderBy(列名/多个列名) 排序
queryWrapper.orderByDesc(列名/多个列名) 降序排序
queryWrapper.orderByAsc(列名/多个列名) 升序排序
queryWrapper.lt().gt()
链式操作之间为and连接
链式或操作:
queryWrapper.lt().or().gt()
调用or方法,使条件之间为or连接
链式优先级操作:
queryWrapper.lt().and(lt().or().gt())
调用and方法相当于sql中加了()的作用,但是显然括号内方法也需要调用者,需要new一个Consumer,正确的写法:
userQueryWrapper.like("email","baomidou.com").and(new Consumer<QueryWrapper<User>>() {
@Override
public void accept(QueryWrapper<User> userQueryWrapper) {
userQueryWrapper.lt("age",18).or().gt("age",40);
}
});
因为太臃肿了,所以又要换成lambda表达式的写法
userQueryWrapper.like("email","baomidou.com").and(userQueryWrapper1 -> userQueryWrapper1.lt("age",18).or().gt("age",40));
UpdateWrapper.eq(“name”,“TOM”).set(列名,值)
LambdaQueryWrapper<User> LambdaQueryWrapper = new LambdaQueryWrapper<User>();
LambdaQueryWrapper.eq(User::getName,"Tom");
查询的区别就是创建的是LambdaQueryWrapper类,使用时的区别就是列名lambda方法来获取列名,这样可以有提示信息
LambdaUpdateWrapper<User> lambdaUpdateWrapper = new LambdaUpdateWrapper<User>();
lambdaUpdateWrapper.eq(User::getName,"Tom").set(User::getAge,16);
userService.update(lambdaUpdateWrapper);
同样的,区别还是在获取列名的方式上。
推荐阅读: