1.
user对role 是多对一
role对user是一对多
即
一个user对应一个role 一个role 对应多个user
2.
memu和role是多对多关系
即
一个role对应多个menu,
一个menu对应多个role
3.
menue对fun 是一对多关系
fun对menu 是多对一关系
即
一个menu对应多个fun
一个fun对应一个menu
实体类之间的关系
1.user和role
user:因为一个user对应一个role,所以user中除了本表以外,还应该包含role对象的引用
role:因为一个role对应多个user,所以role类中应该存放user的一个集合。
2.role和menu两个实体类关系
因为role和menu是多对多的关系,所以两个类中均应该含有对方的集合属性
3.menu和funs俩个实体类关系
menu:因为一个munu对应多个fun所以menu中应该含有fun的集合
funs:因为funs对应一个menu,所以funs中含有一个menu引用
和四个表相对应的四个实体类
role
public class Role {
private Integer roleId;
private String roleName;
private List<User> users;
private List<Menu> menus;
public List<Menu> getMenus() {
return menus;
}
public void setMenus(List<Menu> menus) {
this.menus = menus;
}
public Integer getRoleId() {
return roleId;
}
public void setRoleId(Integer roleId) {
this.roleId = roleId;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
}
user
public class User {
private String id;
private String username;
private String password;
private Integer roleId;
private String iconURL;
//role对象
private Role role;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getRoleId() {
return roleId;
}
public void setRoleId(Integer roleId) {
this.roleId = roleId;
}
public String getIconURL() {
return iconURL;
}
public void setIconURL(String iconURL) {
this.iconURL = iconURL;
}
public Role getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}
}
menu
public class Menu {
private Integer menuId;
private String menuName;
private String menuURL;
private Integer fatherId;
private List<Role> roles;
private List<Funs> funs;
public Integer getMenuId() {
return menuId;
}
public void setMenuId(Integer menuId) {
this.menuId = menuId;
}
public String getMenuName() {
return menuName;
}
public void setMenuName(String menuName) {
this.menuName = menuName;
}
public String getMenuURL() {
return menuURL;
}
public void setMenuURL(String menuURL) {
this.menuURL = menuURL;
}
public Integer getFatherId() {
return fatherId;
}
public void setFatherId(Integer fatherId) {
this.fatherId = fatherId;
}
public List<Role> getRoles() {
return roles;
}
public void setRoles(List<Role> roles) {
this.roles = roles;
}
public List<Funs> getFuns() {
return funs;
}
public void setFuns(List<Funs> funs) {
this.funs = funs;
}
}
funs
public class Funs {
private Integer funId;
private String funName;
private String funURL;
private Integer menuId;
private Menu menu;
public Integer getFunId() {
return funId;
}
public void setFunId(Integer funId) {
this.funId = funId;
}
public String getFunName() {
return funName;
}
public void setFunName(String funName) {
this.funName = funName;
}
public String getFunURL() {
return funURL;
}
public void setFunURL(String funURL) {
this.funURL = funURL;
}
public Integer getMenuId() {
return menuId;
}
public void setMenuId(Integer menuId) {
this.menuId = menuId;
}
public Menu getMenu() {
return menu;
}
public void setMenu(Menu menu) {
this.menu = menu;
}
}
mapper.xml 映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.openlab.mapper.UserMapper">
<!--SQL语句进行四表联查-->
<select id="queryByUserName" resultMap="userMapping">
SELECT
u.id,u.username,u.password,
r.roleId,r.roleName,
m.menuId,m.menuName,m.menuURL,
f.funId,f.funName,f.funURL
FROM
user u
LEFT JOIN role r
ON u.roleId=r.roleId
LEFT JOIN role_menu rm
ON r.roleId = rm.roleId
LEFT JOIN menu m
ON rm.menuId=m.menuId
LEFT JOIN funs f
ON m.menuId=f.menuId
WHERE u.username LIKE concat('%',#{username},'%')
</select>
<!--定义user的映射-->
<resultMap id="userMapping" type="User">
<id column="id" property="id"></id>
<result column="username" property="username"></result>
<result column="password" property="password"></result>
<association property="role" javaType="Role" resultMap="roleMapping"></association>
</resultMap>
<!--定义role的映射-->
<resultMap id="roleMapping" type="Role">
<id column="roleId" property="roleId"></id>
<result column="roleName" property="roleName"></result>
<collection property="menus" ofType="Menu" resultMap="menuMapping"></collection>
</resultMap>
<!--定义menu的映射-->
<resultMap id="menuMapping" type="Menu">
<id column="menuId" property="menuId"></id>
<result column="menuName" property="menuName"></result>
<result column="menuURL" property="menuURL"></result>
<collection property="funs" ofType="Funs" resultMap="funsMapping"></collection>
</resultMap>
<!--定义funs的映射-->
<resultMap id="funsMapping" type="Funs">
<id column="funId" property="funId"></id>
<result column="funName" property="funName"></result>
<result column="funURL" property="funURL"></result>
</resultMap>
</mapper>
四表联查测试代码
public class Test {
@org.junit.Test
public void testUserMapper() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSession sqlSession = new SqlSessionFactoryBuilder().build(is).openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.queryByUserName("zhangsan");
System.out.println("用户信息");
System.out.println(user.getId()+"\t"+user.getUsername()+"\t"+user.getPassword());
System.out.println("========================");
System.out.println("角色信息");
Role role =user.getRole();
System.out.println(role.getRoleId()+"\t"+role.getRoleName());
List<Menu> menus = role.getMenus();
System.out.println("========================");
System.out.println("角色对应菜单");
System.out.println("========================");
for (Menu menu : menus) {
System.out.println("菜单:"+menu.getMenuId()+"\t"+menu.getMenuName()+"\t"+menu.getMenuURL());
System.out.println(""+menu.getMenuName()+"菜单对应的功能表信息");
List<Funs> funs = menu.getFuns();
for (Funs fun : funs) {
System.out.println(fun.getFunId()+"\t"+fun.getFunName()+"\t"+fun.getFunURL());
}
System.out.println("========================");
}
}
}
测试结果*
用户信息
00001 zhangsan 1231230
========================
角色信息
1 管理员
========================
角色对应菜单
========================
菜单:1 系统菜单 null
用户管理菜单对应的功能表信息
1 主页 index.jsp
2 头页面 header.jsp
3 菜单页面 menu.jsp
4 操作页面 body.jsp
5 底页面 footer.jsp
6 成功页面 ok.jsp
7 错误页面 error.jsp
8 角色错误页面 norole.jsp
========================
菜单:2 用户管理 null
用户管理菜单对应的功能表信息
========================
菜单:3 添加用户 register.jsp
用户管理菜单对应的功能表信息
50 添加用户页面 register.jsp
51 添加用户的动作 registerServlet.do
========================单:4 查询用户 body.jsp
用户管理菜单对应的功能表信息
60 查询用户页面 body.jsp
61 查询用户动作 registerServlet.do
62 显示用户页面 body.jsp
63 预更新用户查询动作 preUpdata.do
64 更新用户页面 updataUser.jsp
65 更新用户动作 updataUser.do
66 删除用户动作 deleteUser.do
========================
菜单:5 商品管理 null
用户管理菜单对应的功能表信息
========================
菜单:6 添加商品 addGoods.jsp
用户管理菜单对应的功能表信息
70 添加商品页面 addProduct.jsp
71 添加商品动作 addProduct.do
========================
菜单:7 查询商品 findGoods.jsp
用户管理菜单对应的功能表信息
80 查询商品页面 findProduct.jsp
81 查询商品动作 findProduct.do
82 预更新商品动作 preUpdataProduct.do
83 显示更新商品页面 updataProduct.jsp
84 更新商品动作 updataProduct.do
85 删除商品动作 deleteProduct.do
========================
菜单:8 查看购物车 null
用户管理菜单对应的功能表信息
========================
菜单:9 购物车 shopping.jsp
用户管理菜单对应的功能表信息
90 查看购物车页面 findcar.jsp
========================
Process finished with exit code 0