Mybatis-Plus是一个增强版的MyBatis,提供了许多实用的功能,QueryWrapper和UpdateWrapper是Mybatis-Plus中的一种条件构造器,能够帮助我们更方便地进行动态SQL查询和更新。
QueryWrapper
基本使用
QueryWrapper用于构造查询条件,我们可以通过它的链式方法设置查询条件。例如:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("username", "admin")
.ge("age", 18)
.between("create_time", "2021-01-01", "2021-12-31");
List<User> userList = userMapper.selectList(queryWrapper);
这个例子中我们创建了一个空的QueryWrapper,然后通过eq、ge和between方法设置了查询条件,最后执行selectList方法获取符合条件的用户列表。在这个例子中,我们查询了用户名为admin,年龄大于等于18,创建时间在2021年之内的用户列表。
模糊查询
QueryWrapper支持模糊查询,常用的方式有like、notLike、likeLeft和likeRight。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("username", "jo")
.notLike("email", "@")
.likeLeft("phone", "135")
.likeRight("phone", "666");
List<User> userList = userMapper.selectList(queryWrapper);
以上代码演示了四种不同的模糊查询方式。其中like和notLike分别表示模糊匹配和排除匹配,同时可以设置多个匹配条件。likeLeft和likeRight分别表示左模糊和右模糊匹配,例如例子中我们查询了手机号以135开头,以666结尾的用户列表。
IN查询
在Mybatis中使用IN查询时,需要使用foreach标签来构造。而在Mybatis-Plus中,我们可以直接使用in方法进行IN查询。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.in("id", Arrays.asList(1, 2, 3));
List<User> userList = userMapper.selectList(queryWrapper);
这个例子中我们查询了id为1、2、3的用户列表。如果需要进行子查询,可以使用inSql方法,详细文档请参考官方文档。
ORDER BY、LIMIT
通过orderBy方法可以实现排序查询,如果需要做分页查询,可以使用Page对象和selectPage方法,这点和Mybatis-Plus其他功能类似。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByDesc("create_time");
IPage<User> page = new Page<>(1, 10);
IPage<User> userPage = userMapper.selectPage(page, queryWrapper);
这个例子中我们查询了最新的10个用户,按照创建时间倒序。
示例
以上是QueryWrapper的基础用法,下面通过示例演示如何利用QueryWrapper进行更复杂的查询。
示例1:查询年龄在18到30之间,邮编为100000和200000,性别为男的用户列表
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.between("age", 18, 30)
.in("zipcode", Arrays.asList(100000, 200000))
.eq("gender", "男");
List<User> userList = userMapper.selectList(queryWrapper);
示例2:查询订单总金额大于10000的用户列表
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.apply("id in (select user_id from orders group by user_id having sum(amount) > 10000)");
List<User> userList = userMapper.selectList(queryWrapper);
以上代码演示了如何利用apply方法实现子查询。在这个示例中,我们查询了所有订单总金额大于10000的用户列表。
UpdateWrapper
UpdateWrapper用于构造更新条件,我们可以通过它的链式方法设置更新条件。例如:
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("username", "admin")
.set("password", "new_password");
int updateRows = userMapper.update(null, updateWrapper);
这个例子中我们创建了一个空的UpdateWrapper,然后通过eq、set方法设置了更新条件,最后执行update方法更新符合条件的用户记录。在这个例子中,我们更新了用户名为admin的用户密码。
UpdateWrapper与QueryWrapper的用法大同小异,它们都可以通过链式调用设置多个条件。
示例
以下是一个更新用户最近一次登陆IP的示例:
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", 1)
.set("last_login_ip", "127.0.0.1");
int updateRows = userMapper.update(null, updateWrapper);
以上代码中,我们更新了id为1的用户的最近一次登陆IP。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mybatis plus条件构造器queryWrapper、updateWrapper - Python技术站