多对多就是两个一对多
一个人有多个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(); } }