美文网首页
MyBatis多表查询(3)

MyBatis多表查询(3)

作者: 凡哥爱丽姐 | 来源:发表于2020-06-20 11:19 被阅读0次

两表联查(多对多)

1、创建一个功能菜单(menu)表、角色(role)表和中间(middle)表

CREATE TABLE menu(
  menuid INT PRIMARY KEY,
  menuname VARCHAR(30)
);
INSERT INTO menu VALUES (1,"商品查询");
INSERT INTO menu VALUES (2,"商品管理");
INSERT INTO menu VALUES (3,"供应商管理");
INSERT INTO menu VALUES (4,"用户管理");
CREATE TABLE role(
    roleid INT,
    rolename VARCHAR(30)
);
INSERT INTO role VALUES (1,"普通用户");
INSERT INTO role VALUES (2,"管理员");
INSERT INTO role VALUES (3,"超级管理员");
CREATE TABLE middle(
   MID INT PRIMARY KEY,
   menuid INT ,
   roleid INT
);
INSERT INTO middle VALUES (1,1,1);
INSERT INTO middle VALUES (2,1,2);
INSERT INTO middle VALUES (3,1,3);
INSERT INTO middle VALUES (4,2,2);
INSERT INTO middle VALUES (5,2,3);
INSERT INTO middle VALUES (6,3,3);
INSERT INTO middle VALUES (7,4,2);
INSERT INTO middle VALUES (8,4,3);

2、创建Menu和Role的实体类

package com.fan.entity;

import java.util.List;

public class Menu {
    private Integer menuId;
    private String menuName;

    private List<Role> roleList;

    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 List<Role> getRoleList() {
        return roleList;
    }

    public void setRoleList(List<Role> roleList) {
        this.roleList = roleList;
    }
}

package com.fan.entity;

import java.util.List;

public class Role {
    private Integer roleId;
    private String roleName;

    private List<Menu> menu;
    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<Menu> getMenu() {
        return menu;
    }

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

3、创建RoleDao接口

package com.fan.dao;

import com.fan.entity.Menu;

public interface RoleDao {
    //根据menu中的id查询menuname和对应的角色信息
    public Menu findByMenuId(int menuId);
}

4、配置RoleMapper.xml映射文件并将其配置到mybatis-config.xml

<mapper namespace="com.fan.dao.RoleDao">
    <resultMap id="a1" type="Menu">
        <id property="menuId" column="menuid"></id>
        <result property="menuName" column="menuname"></result>
        <collection property="roleList" ofType="Role">
            <id property="roleId" column="roleid"></id>
            <result property="roleName" column="rolename"></result>
        </collection>
    </resultMap>

    <select id="findByMenuId" resultMap="a1">
        select * from menu,role,middle where menu.menuid=middle.menuid
                                         and role.roleid=middle.roleid
                                         and menu.menuid=#{menuId}
    </select>
</mapper>

mybatis-config.xml获取对应的映射文件

 <mapper resource="Mapper/RoleMapper.xml"></mapper>

5、添加测试类

import com.fan.dao.RoleDao;
import com.fan.entity.Menu;
import com.fan.entity.Role;
import com.fan.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class Test4 {
    public static void main(String[] args) {
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        RoleDao roleDaoMapper = sqlSession.getMapper(RoleDao.class);
        Menu byMenuId = roleDaoMapper.findByMenuId(1);
        System.out.println(byMenuId.getMenuName());
        System.out.println("可以调用"+byMenuId.getMenuName()+"的角色如下:");
        List<Role> roleList = byMenuId.getRoleList();
        for (Role role:roleList) {
            System.out.println(role.getRoleName());
        }
    }
}

测试结果如下:

测试结果

相关文章

  • MyBatis多表查询(3)

    两表联查(多对多) 1、创建一个功能菜单(menu)表、角色(role)表和中间(middle)表 2、创建Men...

  • 5/10day51_查询&多表

    回顾 优化测试方法 mybatis查询和多表 一 Mybatis单表查询 1.1 resultMap标签 如果数据...

  • Mybatis多表查询

    mybatis的连接池 我们在实际开发中都会用到连接池,因为他可以减少我们获取连接消耗的时间。 mybatis提供...

  • mybatis-plus配置xml进行多表查询

    mybatis-plus多表查询,需自己写xml进行查询。 在mapper中定义,如需分页查询可添加page。 在...

  • 4.MySQL多表&事务

    主要内容 1 . 多表查询2 . 事务3 . DCL 多表查询: 事务 DCL:

  • mybatis联合多表查询

    数据库表 pms_user_tea表保存教师用户信息 pms_exp表保存实验室信息查询信息:所有教师下的所有实验...

  • mybatis多表联合查询

    开发环境:postgresql数据库、idea工具、easy code插件、springboot+mybatis数...

  • MyBatis多表查询(1)

    两表联查(一对一) 1、创建一个丈夫(husband)表和妻子(wife)表 2、创建Husband和Wife的实...

  • MyBatis多表查询(2.1)

    两表联查(一对多) 1、创建学生(student)表和班级(grade)表 2、创建Student和Grade实体...

  • 06 Mybatis 多表查询

    一、 一对一查询 建立user与account表之间的关联 sql实现查询 定义一个实体类来接受连表查询结果集, ...

网友评论

      本文标题:MyBatis多表查询(3)

      本文链接:https://www.haomeiwen.com/subject/htzuohtx.html