文章目录
目录
一 问题背景
数据库有用户表user、角色表role、菜单表menu、功能表funs和角色菜单关系表role_menu,
各表的字段及数据如下
用户user表
角色表role
扫描二维码关注公众号,回复:
11527421 查看本文章
角色菜单关系表role_menu
菜单表menu
功能表funs
二 实际问题
- 表与表之间的关系
- 类与类之间的关系
- 四表连查 user、role、menu、funs、role_menu,通过username来进行查询用户信息、对应的角色信息、角色对应的菜单信息及菜单底下的功能。
三 问题解决
一、数据库的表之间的关系
1.一个user对应一个role 一个role 对应多个user
user对role 是多对一关系
role对user是一对多关系
2.一个role对应多个menu,一个menu对应多个role
memu和role是多对多关系
3.一个menu对应多个fun 一个fun对应一个menu
menue对fun 是一对多关系
fun对menu 是多对一关系
二、pojo实体类的关系
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引用
各实体类的属性及互相持有的引用如下
用户User类
package cn.wx.pojo;
public class User {
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column user.id
*
* @mbggenerated Fri Jul 24 17:04:28 CST 2020
*/
private String id;
private Role role;
public Role getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column user.username
*
* @mbggenerated Fri Jul 24 17:04:28 CST 2020
*/
private String username;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column user.password
*
* @mbggenerated Fri Jul 24 17:04:28 CST 2020
*/
private String password;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column user.roleId
*
* @mbggenerated Fri Jul 24 17:04:28 CST 2020
*/
private Integer roleid;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column user.iconURL
*
* @mbggenerated Fri Jul 24 17:04:28 CST 2020
*/
private String iconurl;
@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
", role=" + role +
", username='" + username + '\'' +
", password='" + password + '\'' +
", roleid=" + roleid +
", iconurl='" + iconurl + '\'' +
'}';
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column user.id
*
* @return the value of user.id
*
* @mbggenerated Fri Jul 24 17:04:28 CST 2020
*/
public String getId() {
return id;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column user.id
*
* @param id the value for user.id
*
* @mbggenerated Fri Jul 24 17:04:28 CST 2020
*/
public void setId(String id) {
this.id = id;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column user.username
*
* @return the value of user.username
*
* @mbggenerated Fri Jul 24 17:04:28 CST 2020
*/
public String getUsername() {
return username;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column user.username
*
* @param username the value for user.username
*
* @mbggenerated Fri Jul 24 17:04:28 CST 2020
*/
public void setUsername(String username) {
this.username = username;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column user.password
*
* @return the value of user.password
*
* @mbggenerated Fri Jul 24 17:04:28 CST 2020
*/
public String getPassword() {
return password;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column user.password
*
* @param password the value for user.password
*
* @mbggenerated Fri Jul 24 17:04:28 CST 2020
*/
public void setPassword(String password) {
this.password = password;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column user.roleId
*
* @return the value of user.roleId
*
* @mbggenerated Fri Jul 24 17:04:28 CST 2020
*/
public Integer getRoleid() {
return roleid;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column user.roleId
*
* @param roleid the value for user.roleId
*
* @mbggenerated Fri Jul 24 17:04:28 CST 2020
*/
public void setRoleid(Integer roleid) {
this.roleid = roleid;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column user.iconURL
*
* @return the value of user.iconURL
*
* @mbggenerated Fri Jul 24 17:04:28 CST 2020
*/
public String getIconurl() {
return iconurl;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column user.iconURL
*
* @param iconurl the value for user.iconURL
*
* @mbggenerated Fri Jul 24 17:04:28 CST 2020
*/
public void setIconurl(String iconurl) {
this.iconurl = iconurl;
}
}
角色类role
package cn.wx.pojo;
import java.util.List;
public class Role {
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column role.roleId
*
* @mbggenerated Fri Jul 24 17:04:28 CST 2020
*/
private Integer roleid;
private List<Menu> menus ;
private List<User> users;
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
public List<Menu> getMenus() {
return menus;
}
public void setMenus(List<Menu> menus) {
this.menus = menus;
}
@Override
public String toString() {
return "Role{" +
"roleid=" + roleid +
", menus=" + menus +
", rolename='" + rolename + '\'' +
'}';
}
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column role.roleName
*
* @mbggenerated Fri Jul 24 17:04:28 CST 2020
*/
private String rolename;
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column role.roleId
*
* @return the value of role.roleId
*
* @mbggenerated Fri Jul 24 17:04:28 CST 2020
*/
public Integer getRoleid() {
return roleid;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column role.roleId
*
* @param roleid the value for role.roleId
*
* @mbggenerated Fri Jul 24 17:04:28 CST 2020
*/
public void setRoleid(Integer roleid) {
this.roleid = roleid;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column role.roleName
*
* @return the value of role.roleName
*
* @mbggenerated Fri Jul 24 17:04:28 CST 2020
*/
public String getRolename() {
return rolename;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column role.roleName
*
* @param rolename the value for role.roleName
*
* @mbggenerated Fri Jul 24 17:04:28 CST 2020
*/
public void setRolename(String rolename) {
this.rolename = rolename;
}
}
菜单类menu
package cn.wx.pojo;
import java.util.List;
public class Menu {
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column menu.menuId
*
* @mbggenerated Fri Jul 24 21:02:39 CST 2020
*/
private Integer menuid;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column menu.menuName
*
* @mbggenerated Fri Jul 24 21:02:39 CST 2020
*/
private String menuname;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column menu.menuURL
*
* @mbggenerated Fri Jul 24 21:02:39 CST 2020
*/
private String menuurl;
private List<Role> roles;
private List<Funs> funss;
public List<Funs> getFunss() {
return funss;
}
public void setFunss(List<Funs> funss) {
this.funss = funss;
}
public List<Role> getRoles() {
return roles;
}
public void setRoles(List<Role> roles) {
this.roles = roles;
}
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column menu.fatherId
*
* @mbggenerated Fri Jul 24 21:02:39 CST 2020
*/
private Integer fatherid;
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column menu.menuId
*
* @return the value of menu.menuId
*
* @mbggenerated Fri Jul 24 21:02:39 CST 2020
*/
public Integer getMenuid() {
return menuid;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column menu.menuId
*
* @param menuid the value for menu.menuId
*
* @mbggenerated Fri Jul 24 21:02:39 CST 2020
*/
public void setMenuid(Integer menuid) {
this.menuid = menuid;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column menu.menuName
*
* @return the value of menu.menuName
*
* @mbggenerated Fri Jul 24 21:02:39 CST 2020
*/
public String getMenuname() {
return menuname;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column menu.menuName
*
* @param menuname the value for menu.menuName
*
* @mbggenerated Fri Jul 24 21:02:39 CST 2020
*/
public void setMenuname(String menuname) {
this.menuname = menuname;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column menu.menuURL
*
* @return the value of menu.menuURL
*
* @mbggenerated Fri Jul 24 21:02:39 CST 2020
*/
public String getMenuurl() {
return menuurl;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column menu.menuURL
*
* @param menuurl the value for menu.menuURL
*
* @mbggenerated Fri Jul 24 21:02:39 CST 2020
*/
public void setMenuurl(String menuurl) {
this.menuurl = menuurl;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column menu.fatherId
*
* @return the value of menu.fatherId
*
* @mbggenerated Fri Jul 24 21:02:39 CST 2020
*/
public Integer getFatherid() {
return fatherid;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column menu.fatherId
*
* @param fatherid the value for menu.fatherId
*
* @mbggenerated Fri Jul 24 21:02:39 CST 2020
*/
public void setFatherid(Integer fatherid) {
this.fatherid = fatherid;
}
@Override
public String toString() {
return "Menu{" +
"menuid=" + menuid +
", menuname='" + menuname + '\'' +
", menuurl='" + menuurl + '\'' +
", roles=" + roles +
", funss=" + funss +
", fatherid=" + fatherid +
'}';
}
}
功能类funs
package cn.wx.pojo;
public class Funs {
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column funs.funId
*
* @mbggenerated Fri Jul 24 21:02:39 CST 2020
*/
private Integer funid;
private Menu menu;
public Menu getMenu() {
return menu;
}
public void setMenu(Menu menu) {
this.menu = menu;
}
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column funs.funName
*
* @mbggenerated Fri Jul 24 21:02:39 CST 2020
*/
private String funname;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column funs.funURL
*
* @mbggenerated Fri Jul 24 21:02:39 CST 2020
*/
private String funurl;
@Override
public String toString() {
return "Funs{" +
"funid=" + funid +
", funname='" + funname + '\'' +
", funurl='" + funurl + '\'' +
", menuid=" + menuid +
'}';
}
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column funs.menuId
*
* @mbggenerated Fri Jul 24 21:02:39 CST 2020
*/
private Integer menuid;
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column funs.funId
*
* @return the value of funs.funId
*
* @mbggenerated Fri Jul 24 21:02:39 CST 2020
*/
public Integer getFunid() {
return funid;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column funs.funId
*
* @param funid the value for funs.funId
*
* @mbggenerated Fri Jul 24 21:02:39 CST 2020
*/
public void setFunid(Integer funid) {
this.funid = funid;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column funs.funName
*
* @return the value of funs.funName
*
* @mbggenerated Fri Jul 24 21:02:39 CST 2020
*/
public String getFunname() {
return funname;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column funs.funName
*
* @param funname the value for funs.funName
*
* @mbggenerated Fri Jul 24 21:02:39 CST 2020
*/
public void setFunname(String funname) {
this.funname = funname;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column funs.funURL
*
* @return the value of funs.funURL
*
* @mbggenerated Fri Jul 24 21:02:39 CST 2020
*/
public String getFunurl() {
return funurl;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column funs.funURL
*
* @param funurl the value for funs.funURL
*
* @mbggenerated Fri Jul 24 21:02:39 CST 2020
*/
public void setFunurl(String funurl) {
this.funurl = funurl;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column funs.menuId
*
* @return the value of funs.menuId
*
* @mbggenerated Fri Jul 24 21:02:39 CST 2020
*/
public Integer getMenuid() {
return menuid;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column funs.menuId
*
* @param menuid the value for funs.menuId
*
* @mbggenerated Fri Jul 24 21:02:39 CST 2020
*/
public void setMenuid(Integer menuid) {
this.menuid = menuid;
}
}
四 sql与xml映射文件
<resultMap id="BaseResultMap" type="cn.wx.pojo.User" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Fri Jul 24 17:04:28 CST 2020.
-->
<id column="id" property="id" jdbcType="VARCHAR" />
<result column="username" property="username" jdbcType="VARCHAR" />
<result column="password" property="password" jdbcType="VARCHAR" />
<result column="roleId" property="roleid" jdbcType="INTEGER" />
<result column="iconURL" property="iconurl" jdbcType="VARCHAR" />
<association property="role" javaType="cn.wx.pojo.Role" resultMap="roleMapping">
</association>
</resultMap>
<!--定义role的映射-->
<resultMap id="roleMapping" type="cn.wx.pojo.Role">
<id column="roleId" property="roleid" jdbcType="INTEGER" />
<result column="roleName" property="rolename" jdbcType="VARCHAR" />
<collection property="menus" ofType="cn.wx.pojo.Menu" resultMap="menuingMapping">
</collection>
</resultMap>
<!--定义menu映射-->
<resultMap id="menuingMapping" type="cn.wx.pojo.Menu">
<id column="menuId" property="menuid" jdbcType="INTEGER" />
<result column="menuName" property="menuname" jdbcType="VARCHAR" />
<result column="menuURL" property="menuurl" jdbcType="VARCHAR" />
<result column="fatherId" property="fatherid" jdbcType="INTEGER" />
<collection property="funss" ofType="cn.wx.pojo.Funs" resultMap="funsingMapping">
</collection>
</resultMap>
<!--定义funs映射-->
<resultMap id="funsingMapping" type="cn.wx.pojo.Funs">
<id column="funId" property="funid" jdbcType="INTEGER" />
<result column="funName" property="funname" jdbcType="VARCHAR" />
<result column="funURL" property="funurl" jdbcType="VARCHAR" />
<result column="menuId" property="menuid" jdbcType="INTEGER" />
</resultMap>
<sql id="Base_Column_List" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Fri Jul 24 17:04:28 CST 2020.
-->
id, username, password, roleId, iconURL
</sql>
<!-- <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >-->
<!-- <!–-->
<!-- WARNING - @mbggenerated-->
<!-- This element is automatically generated by MyBatis Generator, do not modify.-->
<!-- This element was generated on Fri Jul 24 17:04:28 CST 2020.-->
<!-- –>-->
<!-- select-->
<!-- u.id,u.username,u.password,u.roleId,u.iconURL,r.roleId,r.roleName-->
<!-- from user u,role r-->
<!-- where u.u.roleId=r.roleId-->
<!-- and id = #{id,jdbcType=VARCHAR}-->
<!-- </select>-->
<select id="selectfindByName" resultMap="BaseResultMap" parameterType="java.lang.String">
select
u.id,u.username,u.password,u.iconURL,r.roleId,r.roleName,
m.menuId,m.menuName,m.menuURL,m.fatherId,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>
<delete id="deleteByPrimaryKey" parameterType="java.lang.String" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Fri Jul 24 17:04:28 CST 2020.
-->
delete from user
where id = #{id,jdbcType=VARCHAR}
</delete>
<insert id="insert" parameterType="cn.wx.pojo.User" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Fri Jul 24 17:04:28 CST 2020.
-->
insert into user (id, username, password,
roleId, iconURL)
values (#{id,jdbcType=VARCHAR}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR},
#{roleid,jdbcType=INTEGER}, #{iconurl,jdbcType=VARCHAR})
</insert>
<insert id="insertSelective" parameterType="cn.wx.pojo.User" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Fri Jul 24 17:04:28 CST 2020.
-->
五 测试
import cn.wx.mapper.UserMapper;
import cn.wx.pojo.Role;
import cn.wx.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class Test {
@org.junit.Test
public void testDemo01() throws IOException {
String resource="mybatis-config.xml";
InputStream is= Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
SqlSession session= sqlSessionFactory.openSession();
UserMapper mapper =session.getMapper(UserMapper.class);
User u =mapper.selectfindByName("zhangsan");
System.out.println(u);
}
}
最后打印的结果是
User{id='00001', role=Role{roleid=1, menus=[Menu{menuid=1, menuname='系统菜单', menuurl='null', roles=null, funss=[Funs{funid=1, funname='主页', funurl='index.jsp', menuid=1}, Funs{funid=2, funname='头页面', funurl='header.jsp', menuid=1}, Funs{funid=3, funname='菜单页面', funurl='menu.jsp', menuid=1}, Funs{funid=4, funname='操作页面', funurl='body.jsp', menuid=1}, Funs{funid=5, funname='底页面', funurl='footer.jsp', menuid=1}, Funs{funid=6, funname='成功页面', funurl='ok.jsp', menuid=1}, Funs{funid=7, funname='错误页面', funurl='error.jsp', menuid=1}, Funs{funid=8, funname='角色错误页面', funurl='norole.jsp', menuid=1}], fatherid=-1}, Menu{menuid=2, menuname='用户管理', menuurl='null', roles=null, funss=[Funs{funid=null, funname='null', funurl='null', menuid=2}], fatherid=1}, Menu{menuid=3, menuname='添加用户', menuurl='register.jsp', roles=null, funss=[Funs{funid=50, funname='添加用户页面', funurl='register.jsp', menuid=3}, Funs{funid=51, funname='添加用户的动作', funurl='registerServlet.do', menuid=3}], fatherid=2}, Menu{menuid=4, menuname='查询用户', menuurl='body.jsp', roles=null, funss=[Funs{funid=60, funname='查询用户页面', funurl='body.jsp', menuid=4}, Funs{funid=61, funname='查询用户动作', funurl='registerServlet.do', menuid=4}, Funs{funid=62, funname='显示用户页面', funurl='body.jsp', menuid=4}, Funs{funid=63, funname='预更新用户查询动作', funurl='preUpdata.do', menuid=4}, Funs{funid=64, funname='更新用户页面', funurl='updataUser.jsp', menuid=4}, Funs{funid=65, funname='更新用户动作', funurl='updataUser.do', menuid=4}, Funs{funid=66, funname='删除用户动作', funurl='deleteUser.do', menuid=4}], fatherid=2}, Menu{menuid=5, menuname='商品管理', menuurl='null', roles=null, funss=[Funs{funid=null, funname='null', funurl='null', menuid=5}], fatherid=1}, Menu{menuid=6, menuname='添加商品', menuurl='addGoods.jsp', roles=null, funss=[Funs{funid=70, funname='添加商品页面', funurl='addProduct.jsp', menuid=6}, Funs{funid=71, funname='添加商品动作', funurl='addProduct.do', menuid=6}], fatherid=5}, Menu{menuid=7, menuname='查询商品', menuurl='findGoods.jsp', roles=null, funss=[Funs{funid=80, funname='查询商品页面', funurl='findProduct.jsp', menuid=7}, Funs{funid=81, funname='查询商品动作', funurl='findProduct.do', menuid=7}, Funs{funid=82, funname='预更新商品动作', funurl='preUpdataProduct.do', menuid=7}, Funs{funid=83, funname='显示更新商品页面', funurl='updataProduct.jsp', menuid=7}, Funs{funid=84, funname='更新商品动作', funurl='updataProduct.do', menuid=7}, Funs{funid=85, funname='删除商品动作', funurl='deleteProduct.do', menuid=7}], fatherid=5}, Menu{menuid=8, menuname='查看购物车', menuurl='null', roles=null, funss=[Funs{funid=null, funname='null', funurl='null', menuid=8}], fatherid=1}, Menu{menuid=9, menuname='购物车', menuurl='shopping.jsp', roles=null, funss=[Funs{funid=90, funname='查看购物车页面', funurl='findcar.jsp', menuid=9}], fatherid=8}], rolename='管理员'}, username='zhangsan', password='1231230', roleid=1, iconurl='null'}