mybatis 多对多

来源:互联网 发布:外文电子期刊数据库 编辑:程序博客网 时间:2024/04/30 18:40

mybatis 的多对多级联查询

本例有user_info、group_info和user_group_info三个表
user_info
这里写图片描述

group_info
这里写图片描述

user_group_info
这里写图片描述
外键
这里写图片描述

userinfo.xml

<mapper namespace="com.ldu.mapper.UserInfoMapper">    <resultMap type="UserInfo" id="userMap">        <id property="userId" column="user_id"></id>        <result property="userName" column="user_name"></result>        <result property="userSex" column="user_sex"></result>        <collection property="groups" ofType="GroupInfo" column="user_id"            fetchType="lazy" select="com.ldu.mapper.GroupInfoMapper.selectGroupByUserId" />    </resultMap>    <select id="selectUsers" parameterType="int" resultMap="userMap">        select *        from user_info where user_id=#{userId}    </select>    <select id="selectUserByGroupId" parameterType="int" resultMap="userMap">        select u.*        from user_info u,user_group_info ug        where u.user_id=ug.uid        and ug.gid=#{groupId}    </select></mapper>

UserInfoMapper.java

public interface UserInfoMapper {    public UserInfo selectUsers(int userId);    public List<UserInfo> selectUserByGroupId(int groupId);}

groupinfo.xml

<mapper namespace="com.ldu.mapper.GroupInfoMapper">    <resultMap type="GroupInfo" id="groupMap">        <id property="groupId" column="group_id"></id>        <result property="groupName" column="group_name"></result>        <collection property="users" ofType="UserInfo" column="group_id"            fetchType="lazy" select="com.ldu.mapper.UserInfoMapper.selectUserByGroupId"/>    </resultMap>    <select id="selectGroups" parameterType="int" resultMap="groupMap">            select * from group_info where group_id=#{GroupId}    </select>    <select id="selectGroupByUserId" parameterType="int" resultMap="groupMap">    select g.*    from group_info g,user_group_info ug    where g.group_id=ug.gid and ug.uid=#{userId}    </select></mapper>

GroupInfoMapper

public interface GroupInfoMapper {    public GroupInfo selectGroups(int groupId);    public List<GroupInfo> selectGroupByUserId(int UserId);}

测试

@Test    public void getUser(){        UserInfo user=userMapper.selectUsers(1);        System.out.println(user);        System.out.println(user.getGroups().size());        for(GroupInfo ginfo:user.getGroups()){            System.out.println(ginfo);        }    }    @Test    public void getGroup(){        GroupInfo group=groupMapper.selectGroups(1);        System.out.println(group);        System.out.println(group.getUsers().size());        for(UserInfo uinfo:group.getUsers()){            System.out.println(uinfo);        }    }