建立两张表:用户表,角色表
让用户表和角色表具有多对多的关系。需要使用中间表,中间表中包含各自的主键,在中间表中是外键。
一个Role可以赋予给多个User,因此在Role的实体类中包含User的集合引用:
public class Role implements Serializable { private Integer roleId; private String roleName; private String roleDesc; //多对多的关系映射:一个角色可以赋予多个用户 private List<User> users;}
然后我们需要在IRoleDao.xml中定义封装role和user的一对多的resultMap:
<!--定义role表的ResultMap--> <resultMap id="roleMap" type="role"> <id property="roleId" column="rid"></id> <result property="roleName" column="role_name"></result> <result property="roleDesc" column="role_desc"></result> <collection property="users" ofType="user"> <id property="userId" column="id"></id> <result property="userName" column="username"></result> <result property="userAddress" column="address"></result> <result property="userSex" column="sex"></result> <result property="userBirthday" column="birthday"></result> </collection> </resultMap>
然后写查询语句:role先左关联user_role,再左关联user
<!--查询所有--> <select id="findAll" resultMap="roleMap"> select r.id as rid,r.role_name,r.role_desc,u.* from role r left outer join user_role ur on r.id = ur.rid left outer join user u on U.ID = ur.uid </select>
在测试类中测试:
/** * 测试查询所有 */@Testpublic void testFindAll(){ List<Role> roles = roleDao.findAll(); for(Role role : roles){ System.out.println("---每个角色的信息----"); System.out.println(role); System.out.println(role.getUsers()); }}
一个User可以有多个Role,因此在User的实体类中包含Role的集合引用:
public class User implements Serializable { private Integer userId; private String userName; private String userAddress; private String userSex; private Date userBirthday; //一对多关系映射:主表实体应该包含从表实体的集合引用 private List<Account> accounts; //多对多的关系映射:一个用户可以具备多个角色 private List<Role> roles;}
然后我们需要在IUserDao.xml中定义封装user和role的一对多的resultMap:
<!-- 定义User的resultMap--> <resultMap id="userRoleMap" type="user"> <id property="userId" column="id"></id> <result property="userName" column="username"></result> <result property="userAddress" column="address"></result> <result property="userSex" column="sex"></result> <result property="userBirthday" column="birthday"></result> <!-- 配置角色集合的映射 --> <collection property="roles" ofType="role"> <id property="roleId" column="rid"></id> <result property="roleName" column="role_name"></result> <result property="roleDesc" column="role_desc"></result> </collection> </resultMap>
然后写查询语句:user先左关联user_role,再左关联role
本文系作者在时代Java发表,未经许可,不得转载。
如有侵权,请联系nowjava@qq.com删除。