mybatis分页问题

 

spring+mybatis+mysql

t_user和t_role通过中间表t_user_role关联,多对多关系

public class User{

private String userId;

private String userCode;

private String userName;

private String password;

List<role> roles = new ArrayList<role>();

 

..........

}

 

配置文件:

<mapper namespace="com.mapper.UserMapper">

<resultMap type="User" id="userMap">  

        <id column="user_id" property="userId"/>

        <result column="user_name" property="userName"/>

<result column="password" property="password"/>

<result column="create_date" property="createDate"/>

        <collection property="roles" javaType="ArrayList" ofType="Role">

            <result column="role_id" property="roleId" javaType="string"/>

            <result column="role_name" property="roleName" javaType="string"/>           

        </collection>

    </resultMap>

<select id="queryUser" parameterType="User" resultMap="userMap">

SELECT u.user_id,u.user_name,u.password,r.role_id,r.role_name

FROM t_user u LEFT OUTER JOIN t_address a ON u.user_id=a.address_id

LEFT OUTER JOIN t_user_role ur ON ur.user_id=u.user_ID

LEFT OUTER JOIN t_role r ON r.role_id=ur.role_id

    </select>

</mapper>

这是按MYBATIS官网文档做的,这样可以实现多对多的功能,但在做分页时出了问题。

如果一个用户有3个角色,这样在SQL查询结果中同一个用户会有三条记录

 

如果要在用户列表页面做分页时就不知道怎么处理了。

 

 

数据库用的是:MYSQL,本来的想法是在 SELECT后面加LIMIT,但因为同一个用户有多个角色,这样翻页就有问题。请各位给指点一下,如果是程序有问题也请指出来,谢谢


呵呵,使用自动关联查效率是低了一些,但是不影响大碍,因为毕竟实现了分页,每次查询出来的数量是固定的,所以这就是N+1的问题,只要控制住N,性能上就没多大问题了

是用户分页,那管角色什么事?

可以不用在sql语句中写join之类的,可以尝试一下自动关联查询,在resultmap中的result定义的时候添加一个关联查询语句
[code="java"]

[/code]

然后在角色的sqlmap配置文件中增加根据Userid查询角色的select语句,因为查询结果可能会有多个,所以你要在User实体对象中增加1对多的配置,就是加一个List属性。