Mybatis_多对多关联查询

多对多就是两个一对多

一个人有多个role,一个role有多个人。

Person类中加一句private List<Role> roleList; 并生成setter getter

查询一个人有多少role(此处为一对多查询):

    <resultMap type="person" id="selectRoleByPersonIdRM">
        <id column = "person_id" property = "personId" />
        <result column = "name" property = "name" />
        <result column = "gender" property = "gender" />
        <result column = "person_addr" property = "personAddr" />
        <result column = "birthday" property = "birthday" />
        <!-- collection一对多的关联查询。property:一中多的属性名  ofType:多的数据类型 -->
        <collection property="roleList" ofType="xxx.x.model.Role">
            <id column = "ROLE_ID" property = "roleId" />
            <result column = "ROLE_NAME" property = "roleName" />
            <result column = "DESCRIPT" property = "descript" />
        </collection>
    </resultMap>
    <select id = "selectRoleByPersonId" parameterType="int" resultMap="selectRoleByPersonIdRM">
        select * from person p,person_role pr,role r where p.PERSON_ID=pr.PERSON_ID and pr.ROLE_ID = r.ROLE__ID and p.PERSON_ID = #{personId}
    </select>
    
    <select id = "selectPersonByRoleId" parameterType="int" resultMap="">
        select * from person p,person_role pr,role r where p.PERSON_ID = pr.PERSON_ID and pr.ROLE_ID = r.ROLE_ID and r.ROLE_ID = #{roleId}
    </select>
    public void selectRoleByPersonId() {
        // 创建SqlSession
        SqlSession session = sessionFactory.openSession();
        try {
            Person person = session.selectOne("xxx.x.mapper.PersonTestMapper.selectRoleByPersonId", 1);
            System.out.println(person);
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        } finally {
            session.close();
        }
    }

查询一个role里有哪些人,xml要在RoleMapper里写了:

在Role.java中添加一行:private List<Person> personList; 并添加setter getter

要记得在SQLMapConfig中添加一行<mapper resource="xxx/x/mapper/RoleMapper.xml" />

    <!-- extends="BaseResultMap" 继承了Role最基本的映射,BaseResultMap是在逆向工程后在xml自动生成的 -->
    <resultMap type="xxx.x.Role" id="selectPersonByRoleIdRM" extends="BaseResultMap">
        <!-- collection一对多的关联查询集合的意思。property:一中多的属性名  ofType:多的数据类型 -->
        <collection property="personList" ofType="xxx.x.model.Person">
            <id column = "person_ID" property = "personId" />
            <result column = "gender" property = "gender" />
            <result column = "person_addr" property = "personAddr" />
            <result column = "birthday" property = "birthday" />
        </collection>
    </resultMap>
    <select id = "selectPersonByRoleId" parameterType="int" resultMap="selectPersonByRoleIdRM">
        select * from person p,person_role pr,role r where p.PERSON_ID = pr.PERSON_ID and pr.ROLE_ID = r.ROLE_ID and r.ROLE_ID = #{roleId}
    </select>
    public void selectPersonByRoleId() {
        // 创建SqlSession
        SqlSession session = sessionFactory.openSession();
        try {
            Role role = session.selectOne("xxx.x.mapper.RoleMapper.selectPersonByRoleId", 1);
            System.out.println(role);
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        } finally {
            session.close();
        }
    }

猜你喜欢

转载自www.cnblogs.com/lonske/p/9016546.html