原来的分页是这么写的:
<resultMap id="packageSystemRoleResult" type="com.test.admin.domain.result.productpackage.GmsPackageSystemRoleResult">
<id property="systemId" column="system_id" />
<result property="packageId" column="package_id" />
<result property="systemId" column="system_id" />
<result property="systemName" column="system_name" />
<collection property="roleList" ofType="com.yxt.gmsv2.admin.domain.result.productpackage.GmsPackageRoleResult">
<result property="roleId" column="role_id" />
<result property="roleName" column="role_name" />
</collection>
</resultMap>
<select id="getGmsPackageSystemRoleList" resultMap="packageSystemRoleResult">
select a.id,a.package_id,a.system_id,a.role_id,b.system_name,c.role_name
from gms_package_system_role a left join gms_system b on a.system_id = b.id and b.del_flg = 0
left join gms_role c on a.role_id = c.id and c.del_flg = 0
where a.del_flg = 0 and a.package_id = #{params.packageId}
<if test="params.systemName != null and params.systemName != ''">
and b.system_name like concat('%', #{params.systemName}, '%')
</if>
order by a.system_id
</select>
把跟role相关的直接转换成role对象,这样写如果查询所有的数据是没有问题的,但是如果是分页查询的话,总条数就会有问题,这个查询出来的的是包含role的条数,不是单纯system的条数。 修改方案如下:
<resultMap id="packageSystemRoleResult" type="com.test.admin.domain.result.productpackage.GmsPackageSystemRoleResult">
<id property="systemId" column="system_id" />
<result property="packageId" column="package_id" />
<result property="systemId" column="system_id" />
<result property="systemName" column="system_name" />
<collection property="roleList" select="getRoleListBySystemId" column="system_id">
<result property="roleId" column="role_id" />
<result property="roleName" column="role_name" />
</collection>
</resultMap>
<select id="getGmsPackageSystemRoleList" resultMap="packageSystemRoleResult">
select a.id,a.package_id,a.system_id,a.role_id,b.system_name
from gms_package_system_role a left join gms_system b on a.system_id = b.id and b.del_flg = 0
where a.del_flg = 0 and a.package_id = #{params.packageId}
<if test="params.systemName != null and params.systemName != ''">
and b.system_name like concat('%', #{params.systemName}, '%')
</if>
group by a.system_id order by a.system_id
</select>
<select id="getRoleListBySystemId" resultType="com.test.admin.domain.result.productpackage.GmsPackageRoleResult">
select a.role_id, c.role_name
from gms_package_system_role a
left join gms_role c on a.role_id = c.id and c.del_flg = 0
where a.del_flg = 0 and a.system_id = #{system_id}
</select>
先查system,再级联查询role,这样总条数就是system的条数了,