Maven项目使用mybatis实现多表联查

一.数据库表

user表

role表 

 menu表

funs表

role_menu表

二.分析关系 

1、数据库的表之间的关系

	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 是多对一关系

 

2、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 com.wmh.pojo;

public class User {
   
    private String id;

    
    private String username;

    
    private String password;

   
    private Integer roleid;

    
    private Role role;
    
    public Role getRole() {
		return role;
	}

	public void setRole(Role role) {
		this.role = role;
	}

	private String iconurl;
	


    @Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", password="
				+ password + ", roleid=" + roleid + ", role=" + role
				+ ", iconurl=" + iconurl + "]";
	}

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

Role类

package com.wmh.pojo;

import java.util.List;

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


    @Override
	public String toString() {
		return "Role [roleId=" + roleId + ", roleName=" + roleName + ", users="
				+ users + ", 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;
    }
}

Funs类

package com.wmh.pojo;

public class Funs {
    /**
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column funs.funId
     *
     * @mbggenerated Mon Jul 27 10:03:57 CST 2020
     */
    private Integer funId;

    /**
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column funs.funName
     *
     * @mbggenerated Mon Jul 27 10:03:57 CST 2020
     */
    private String funName;

    /**
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column funs.funURL
     *
     * @mbggenerated Mon Jul 27 10:03:57 CST 2020
     */
    private String funURL;

    /**
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column funs.menuId
     *
     * @mbggenerated Mon Jul 27 10:03:57 CST 2020
     */
    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;
	}



    @Override
	public String toString() {
		return "Funs [funId=" + funId + ", funName=" + funName + ", funURL="
				+ funURL + ", menuId=" + menuId + ", menu=" + menu + "]";
	}

	public Menu getMenu() {
		return menu;
	}

	public void setMenu(Menu menu) {
		this.menu = menu;
	}

}

Menu类

package com.wmh.pojo;

import java.util.List;

public class Menu {
    
    private Integer menuId;

    private String menuName;
    
    private String menuURL;
    
    private Integer fatherId;
    
    private List<Role> roles;
    private List<Funs> funs;

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

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

	@Override
	public String toString() {
		return "Menu [menuId=" + menuId + ", menuName=" + menuName
				+ ", menuURL=" + menuURL + ", fatherId=" + fatherId
				+ ", roles=" + roles + ", funs=" + funs + "]";
	}

	
	
}

UserMapper.XML

<mapper namespace="com.wmh.mapper.UserMapper">

    <!--定义user的映射-->
  <resultMap id="BaseResultMap" type="com.wmh.pojo.User">
    <id column="id" jdbcType="VARCHAR" property="id" />
    <result column="username" jdbcType="VARCHAR" property="username" />
    <result column="password" jdbcType="VARCHAR" property="password" />
    <result column="roleId" jdbcType="INTEGER" property="roleid" />
    <result column="iconURL" jdbcType="VARCHAR" property="iconurl" />
    
    <association property="role" javaType="com.wmh.pojo.Role" resultMap="roleMapping">
    <!-- <id column="roleId" jdbcType="INTEGER" property="roleid" />
    <result column="roleName" jdbcType="VARCHAR" property="rolename" /> -->
    </association>
  </resultMap>
  
  <!--定义role的映射-->
    <resultMap id="roleMapping" type="com.wmh.pojo.Role">
        <id column="roleId" property="roleId"></id>
        <result column="roleName" property="roleName"></result>
        <collection property="menus" ofType="com.wmh.pojo.Menu" resultMap="menuMapping"></collection>
    </resultMap>
    
    <!--定义menu的映射-->
    <resultMap id="menuMapping" type="com.wmh.pojo.Menu">
        <id column="menuId" property="menuId"></id>
        <result column="menuName" property="menuName"></result>
        <result column="menuURL" property="menuURL"></result>
        <result column="fatherId" property="fatherId" jdbcType="INTEGER" />
        <collection property="funs" ofType="com.wmh.pojo.Funs" resultMap="funsMapping"></collection>
    </resultMap>
    
    <!--定义funs的映射-->
    <resultMap id="funsMapping" type="com.wmh.pojo.Funs">
        <id column="funId" property="funId"></id>
        <result column="funName" property="funName"></result>
        <result column="funURL" property="funURL"></result>
        <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 Mon Jul 27 10:03:57 CST 2020.
    -->
    id, username, password, roleId, iconURL
  </sql>
  <!-- <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
    
      WARNING - @mbggenerated
      This element is automatically generated by MyBatis Generator, do not modify.
      This element was generated on Mon Jul 27 10:03:57 CST 2020.
   
    select 
    u.id,u.userName,u.password,u.iconURL,u.roleId,r.roleId,r.roleName
    from user u,role r
    where u.roleId = r.roleId
    and id = #{id,jdbcType=VARCHAR}
  </select> -->
  
  <!--SQL语句进行四表联查-->
    <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>
</mapper>

四.测试类

package com.wmh.test;

import java.io.IOException;
import java.io.InputStream;

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 com.wmh.mapper.UserMapper;
import com.wmh.pojo.User;

public class Test01 {
	public static void main(String[] args) {
		
		try {
			InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
	        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);
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		

	}

}

测试结果

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'}
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值