一、QueryWrapper多表查询实现
QueryWrapper是MyBatis-Plus的查询封装,由于它可以用来构建SQL语句,可以通过它进行多表查询。 下面是一个简单的多表查询示例,查询`user`和`role`表。 QueryWrapper wrapper = new QueryWrapper(); wrapper.select("u.id", "u.name", "r.id as roleId", "r.name as roleName") .from("user u") .leftJoin("user_role ur ON u.id = ur.user_id") .leftJoin("role r ON ur.role_id = r.id") .eq("u.name", "tom"); List<Map> result = userMapper.selectMaps(wrapper);
QueryWrapper首先使用select方法从不同的表中选择要查询的列。在这个例子中,我们使用了user表的id和name字段,以及role表的id和名称字段。
紧接着,我们使用from方法引用我们要查询的表,使用leftJoin方法连接多个表。
最后,我们使用eq方法限制查询条件,这里是限制user表的name等于“tom”。
调用selectMaps方法返回的是列表,其中元素包含指定列的值。
二、QueryWrapper多表查询条件
QueryWrapper可以通过条件来筛选返回结果。
例如,下面的示例查询user表和role表,并通过role表的name、user表的age以及user表的name作为查询条件:
QueryWrapper wrapper = new QueryWrapper(); wrapper.select("u.id", "u.name", "r.id as roleId", "r.name as roleName") .from("user u") .leftJoin("user_role ur ON u.id = ur.user_id") .leftJoin("role r ON ur.role_id = r.id") .eq("r.name", "管理员") .ge("u.age", 18) .like("u.name", "张%"); List<Map> result = userMapper.selectMaps(wrapper);
以下是上面select,from,leftJoin等方法的说明:
select:选择要查询的列,可以使用聚合函数或起别名,例如上面的“r.name as roleName”。
from:我们将user表与多个表进行连接操作,可以使用leftJoin,rightJoin,innerJoin等方法。
eq,ge,like:分别对应等于,大于等于,包含等于等操作符。
三、QueryWrapper多表查询分页
在实际应用中,我们通常需要对查询结果进行分页。MyBatis-Plus提供了IPage接口,可以轻松地实现分页功能。通过selectMapsPage方法,既可以进行分页查询。
IPage<Map> page = new Page(1, 10); // 第1页,每页10条数据 QueryWrapper wrapper = new QueryWrapper(); wrapper.select("u.id", "u.name", "r.id as roleId", "r.name as roleName") .from("user u") .leftJoin("user_role ur ON u.id = ur.user_id") .leftJoin("role r ON ur.role_id = r.id") .eq("r.name", "管理员") .ge("u.age", 18) .like("u.name", "张%"); IPage<Map> result = userMapper.selectMapsPage(page, wrapper);
以上代码将返回第一页(每页10条记录)符合条件的结果。其中,Page是分页模型,它接收两个参数:当前页和每页大小。
我们可以使用IPage接口及其实现类Page,选择要查询的列,并通过selectMapsPage方法进行分页查询。
四、QueryWrappear常用操作符
除了上面介绍的eq,ge,like等常用操作符,QueryWrapper还提供了其他常用操作符,如下表所示:
方法 | 说明 |
---|---|
eq | 等于 |
ne | 不等于 |
gt | 大于 |
lt | 小于 |
ge | 大于等于 |
le | 小于等于 |
like | 包含 |
notLike | 不包含 |
isNull | 为空 |
isNotNull | 不为空 |
in | 在指定范围内查询 |
notIn | 不在指定范围查询 |
between | 在指定范围内查询 |
notBetween | 不在指定范围查询 |
orderByAsc | 升序排序 |
orderByDesc | 降序排序 |
五、QueryWrapper总结
QueryWrapper是MyBatis-Plus的查询封装,它可以用来构建SQL语句,可以通过它进行多表查询。
本文介绍了如何使用QueryWrapper对多个表进行联接,以及如何使用常用操作符对查询结果进行条件筛选和排序。
QueryWrapper非常强大,可适用于各种场景,掌握它的用法对于快速、高效地完成开发任务是非常有帮助的。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/271640.html