MybatisPlus 联合或子查询分页

使用MybatisPlus对于数据库中的表,只需要建立相应的实体类就可以很方便的进行增删查改。

问题1:如果需要进行分页查询,需要怎么操作?

// 创建分页辅助类
Page page = new Page(current, sieze);
...
// 条件构造器构造查询条件
QueryWrapper query = new QueryWrapper();
...
Page<Entity> result = this.page(page, query);

只需要创建相应的分页辅助类,查询条件构造器,再调用 this.page() 方法即可。

这样的操作仅能对单表进行查询,对于联表查询,这样是行不通的。此时可以做相应的修改即可。

问题2:联合查询的分页查询如何进行?

假设联合查询的条件为对用户名进行模糊匹配。

1)Mapper文件添加方法:

IPage<Entity> findByPage(IPage<Entity> page, @Param("ew") Wrapper wrapper);

Entity 为查询结果的映射类。

2)Mapper.xml 实现分页方法:

<select id="findByPage" resultMap="Entity">
    SELECT * FROM user
    LEFT JOIN student
    ON user.id = student.id
    ${ew.customSqlSegment}
</select>

${ew.customSqlSegment} 即代表查询条件。

3)Service 中调用方法:

// 创建分页辅助类
Page page = new Page(current, sieze);
...
// 条件构造器构造查询条件
QueryWrapper query = new QueryWrapper();
...
Page<Entity> result = this.page(page, query);

最后,即可像单表查询操作一样进行分页查询。

当然,如果不想使用条件构造器,也可以使用另外一种方式。

1)Mapper文件添加方法:

IPage<Entity> findByPage(IPage<Entity> page, @Param("userName") String userName);

Entity 为查询结果的映射类。

2)Mapper.xml 实现分页方法:

<select id="findByPage" resultMap="Entity">
 SELECT * FROM user
 LEFT JOIN student
 ON user.id = student.id
 <where>
     <if test="userName != null">
         user_name LIKE concat('%', #{userName}, '%')
     </if>
 </where>
</select>

3)Service 中调用方法:

// 创建分页辅助类
Page page = new Page(current, sieze);
...
Page<Entity> result = this.page(page, userName);

但是这种方式就没那么像MybatisPlus。

Guess you like

Origin blog.csdn.net/never_late/article/details/120221365