MyBatis_Plus联表分页查询
当我们需要关联表格分页查询时,MyBatis_plus封装的单表方法已经满足不了我们的需求了,那么我们需要进行联表分页查询
假设我们需要的 SQL 语句如下:
1 | sql复制代码 SELECT |
那么我们需要进行如下操作:
- 1、新建 UserInfoVO.java
UserInfoVo实际上是一个页面数据对象,由于页面上需要显示用户表的数据还需要根据用户去查询另一张表中的角色名称,所以UserInfoVO类似构造了一个MyBatis中的result,在MP中我们可以使用IPage<xxxEntity/DTO/Vo>来返回自定义多表联合查询列表数据并分页的展示需求。
1 | text复制代码import lombok.Data; |
- 2、UserInfoMapper.java 中
Constants.WRAPPER:在MP官网的解释是:根据entity条件查询记录,所以
1 | Java复制代码IPage<UserInfoVO> getUserList(@Param("username") String username, @Param("realname") String realname, @Param("status") Integer status, @Param("page") Page<UserInfoVO> page, @Param(Constants.WRAPPER) Wrapper<UserInfoVO> wrapper); |
- 3、UserInfoMapper.xml 中
${ew.customSqlSegment}:表示将自定义的SQL代码包裹,使用QueryWrapper(LambdaQueryWrapper)进行输出。
1 | sql复制代码 <select id="getUserList" resultType="org.jeecg.modules.system.entity.SysUser"> |
- 4、UserInfoServiceImpl.java 中
1 | java复制代码 @Override |
由此可见,serviceImpl返回的是一个IPage<XXXEntity/Dto/Vo>对象,IPage是一个分页对象,在Controller中可以在IPage中传入Page分页数据。
- 5、UserController.java中
1 | java复制代码QueryWrapper<UserInfoVO> queryWrapper = new QueryWrapper<>(); |
以上就是分页查询(联表)时的操作,使用拼写SQL的方式实现多表联合分页查询,是效率最高的一种。
本文转载自: 掘金