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(); } }