查询条件
构建查询条件
QueryWrapper<User> Wrapper = new QueryWrapper<>();
可以通过链式编程的方式进行条件补充,例如:select id,username from user where username like %a% and price >=10
QueryWrapper<User> wrapper = new QueryWrapper<User>()
.select("id","username")
.like("username","a")
.ge("price",10);
然后进行查询,这里要的是查询后返回的列表
List<User> users = userMapper.selectList(wrapper);
ok,现在是记忆时间
eq,用于设置单个字段的相等条件。
ne,用于设置单个字段的不相等条件。
gt,用于设置单个字段的大于条件
ge,它用于设置单个字段的大于等于条件。
lt,用于设置单个字段的小于条件。
le,它用于设置单个字段的小于等于条件。
between,它用于设置单个字段的 BETWEEN 条件。
like,用于设置单个字段的 LIKE 条件。
isNull,用于设置单个字段的 IS NULL 条件。
in,用于设置单个字段的 IN 条件,即字段的值在给定的集合中。
ps 更多的可以查看官网,条件构造器 | MyBatis-Plus (baomidou.com)
更新条件
设置要更新的数据
User user = new User();
user.setPassword("1234");
构建更新条件,条件是找到username is jack的
QueryWrapper<User> wrapper = new QueryWrapper<User>().eq("username","jack");
更新数据库
userMapper.update(user,wrapper);
如果要面向充值或者扣费的业务操作-100或者+100,就需要setsql的方法,例如:
List<Long> ids = List.of(1L,2L,3L);
UpdateWrapper<User> wrapper = new UpdateWrapper<User>()
.setSql("price= price -100")
.in("id",ids);
userMapper.update(null,wrapper);
Lambda Wrapper
基于 Lambda 表达式的查询条件构造器,它通过 Lambda 表达式来引用实体类的属性,从而避免了硬编码字段名
什么意思呢?直观的看就是少了“”里的东西,更加动态得传递数据了,一个是写死的,另一个更加灵活。
比如说官方里的一个例子:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age", 18);
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.gt(User::getAge, 18);
一个是“age”,一个是User::getAge,在这里User是想要指定的User类中的函数,而getAge是一个方法,对应着 Lambda 表达式,通过反射获得age这个字段名。
自定义的SQL-用于业务层没有sql语句
用wrapper构建复杂where条件,sql自己定义
先构建wrapper的where条件
再自己构建一个函数,把wrapper和其他参数传进去
List<Long> ids = List.of(1L,2L,3L);
int amount = 200;
QueryWrapper<User> wrapper = new QueryWrapper<User>()
.in("id",ids);
userMapper.updateBalanceByIds(wrapper,amount);
Mapper接口处要有相应的函数
void updateBalanceByIds(@Param("ew") QueryWrapper<User> wrapper, @Param("amount") int
warpper固定格式,‘ew’他是custants.WRAPPER的常量
@Param("ew") QueryWrapper<User> wrapper
最后在warpper.xml中写出sql语句
可以通过下载mybatisx快速在xml文件中创建基本格式
点击generate statement快速创建
在Mapper.xml中编写sql语句
<update id="updateBalanceByIds">
UPDATE user SET balance = balance - #{amount} ${ew.customSqlSegment}
</update>