Mybatis_many-to-many association query

Many-to-many is two-to-many

A person has multiple roles, and a role has multiple people.

Add a private List<Role> roleList to the Person class; and generate a setter getter

Query how many roles a person has (here is a one-to-many query):

    <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 one-to-many association query. property: one-many attribute name ofType: multiple data types --> 
        < 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 > 
    < 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();
        }
    }

 

To query who is in a role, xml should be written in RoleMapper:

Add a line in Role.java: private List<Person> personList; and add setter getter

Remember to add a line in SQLMapConfig <mapper resource="xxx/x/mapper/RoleMapper.xml" />

    <!-- extends="BaseResultMap" inherits the most basic mapping of Role, BaseResultMap is automatically generated in xml after reverse engineering --> 
    < resultMap type = "xxx.x.Role" id = "selectPersonByRoleIdRM" extends = " BaseResultMap" > 
        <!-- collection means a one-to-many association query collection. property: one-many attribute name ofType: multiple data types --> 
        < collection property ="personList" ofType ="xxx.x.model.Person" > 
            < id column = "person_ID" property = "personId"  /> 
            < result column = " 
            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();
        }
    }

 

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326605328&siteId=291194637