一、QueryWrapper多表查询实现
QueryWrapper是MyBatis-Plus的查询封装,由于它可以用来构建SQL语句,可以通过它进行多表查询。 下面是一个简单的多表查询示例,查询`user`和`role`表。 QueryWrapperwrapper = 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
QueryWrapper首先使用select方法从不同的表中选择要查询的列。在这个例子中,我们使用了user表的id和name字段,以及role表的id和名称字段。 紧接着,我们使用from方法引用我们要查询的表,使用leftJoin方法连接多个表。 最后,我们使用eq方法限制查询条件,这里是限制user表的name等于“tom”。 调用selectMaps方法返回的是列表,其中元素包含指定列的值。
二、QueryWrapper多表查询条件
QueryWrapper可以通过条件来筛选返回结果。 例如,下面的示例查询user表和role表,并通过role表的name、user表的age以及user表的name作为查询条件:
QueryWrapperwrapper = 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
以下是上面select,from,leftJoin等方法的说明: select:选择要查询的列,可以使用聚合函数或起别名,例如上面的“r.name as roleName”。 from:我们将user表与多个表进行连接操作,可以使用leftJoin,rightJoin,innerJoin等方法。 eq,ge,like:分别对应等于,大于等于,包含等于等操作符。
三、QueryWrapper多表查询分页
在实际应用中,我们通常需要对查询结果进行分页。MyBatis-Plus提供了IPage接口,可以轻松地实现分页功能。通过selectMapsPage方法,既可以进行分页查询。
IPage
以上代码将返回第一页(每页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非常强大,可适用于各种场景,掌握它的用法对于快速、高效地完成开发任务是非常有帮助的。