二十一、Mybatis之一对多时,PageHelp分页失败的解决办法: Mybatis之懒加载

本文详细介绍了在Mybatis中使用PageHelper插件实现1对多关系的正确分页方法。通过示例代码展示了如何利用懒加载解决PageHelper插件在1对多查询场景下分页失效的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当Mybatis中涉及到1对多查询时,PageHelp分页会失败,具体说明参见:
本文章说明参见 mybatis 使用 PageHelper 实现一对多正确分页

本文只贴示例代码:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bms.dao.UserDao">
    <resultMap id="UserMap" type="User">
        <id column="id" jdbcType="INTEGER" property="id" />
        <result column="name" jdbcType="VARCHAR" property="name" />
        <result column="phone" jdbcType="VARCHAR" property="phone" />
        <result column="telephone" jdbcType="VARCHAR" property="telephone" />
        <result column="address" jdbcType="VARCHAR" property="address" />
        <result column="enabled" jdbcType="BOOLEAN" property="enabled" />
        <result column="username" jdbcType="VARCHAR" property="username" />
        <result column="password" jdbcType="VARCHAR" property="password" />
        <result column="userface" jdbcType="VARCHAR" property="userface" />
        <result column="remark" jdbcType="VARCHAR" property="remark" />
    </resultMap>
    <resultMap id="lazyLoadRolesMap" type="User" extends="UserMap">
        <collection property="roles" ofType="Role" select="com.bms.dao.UserDao.getRolesById" column="id"/>
    </resultMap>
    <resultMap id="eagerLoadRolesMap" type="User" extends="UserMap">
        <collection property="roles" ofType="Role">
            <id column="rid" property="id"/>
            <result column="rname" property="name"/>
            <result column="rnameZh" property="nameZh"/>
        </collection>
    </resultMap>
    <!-- 因为PageHelper插件不支持1对多查询分页,所以这里需要用到懒加载,进行两次查询 -->
    <select id="getUsersByKeyWords" parameterType="String" resultMap="lazyLoadRolesMap">
        SELECT id,name,phone,telephone,address,enabled,remark
        FROM user
        WHERE id NOT IN (
        SELECT ur.user_id FROM user_role ur,role r
        WHERE ur.role_id=r.id
        AND r.name = '${@com.bms.util.FinalName@ROLE_ADMIN}'
        )
        <if test="keyWords != 'all'">
            AND name LIKE concat('%',#{keyWords},'%')
        </if>
        ORDER BY id ASC
    </select>
</mapper>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值