1.实体

package com.govmade.govdata.modules.sys.pojo;

import java.util.List;

import javax.persistence.Table;
import javax.persistence.Transient; import com.google.common.collect.Lists;
import com.govmade.govdata.common.persistence.BasePo; @Table(name = "sys_role")
public class Role extends BasePo<Role> {
private static final long serialVersionUID = 1L; private Integer companyId; @Transient
private String companyName; private String name; private String enname; private Integer useable; @Transient
private String menuIds; @Transient
private List<Menu> menuList = Lists.newArrayList(); // 拥有菜单列表 public Role() {
super();
} public Integer getCompanyId() {
return companyId;
} public void setCompanyId(Integer companyId) {
this.companyId = companyId;
} public String getCompanyName() {
return companyName;
} public void setCompanyName(String companyName) {
this.companyName = companyName;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getEnname() {
return enname;
} public void setEnname(String enname) {
this.enname = enname;
} public Integer getUseable() {
return useable;
} public void setUseable(Integer useable) {
this.useable = useable;
} public String getMenuIds() {
return menuIds;
} public void setMenuIds(String menuIds) {
this.menuIds = menuIds;
} public List<Menu> getMenuList() {
return menuList;
} public void setMenuList(List<Menu> menuList) {
this.menuList = menuList;
}
}

2.RoleService定义

/**
* 根据分页查询角色列表
*
* @param page
* @return
*/
public List<Role> findList(Page<Role> page) {
Map<String, Object> params = Maps.newHashMap();
params.put("delFlag", Global.DEL_FLAG_NORMAL);
params.put("orderByClause", "id desc");
page.startPage();
page.setParams(params); List<Role> roleList = roleDao.findList(page);
return roleList;
}

3.RoleDao定义

public List<Role> findList(Page<Role> page);

4.XML定义

<resultMap id="roleResult" type="Role">
<id property="id" column="id" />
<result property="companyId" column="companyId" />
<result property="companyName" column="companyName" />
<result property="name" column="name" />
<result property="enname" column="enname" />
<result property="remarks" column="remarks" />
<result property="useable" column="useable" />
<collection property="menuList" ofType="Menu">
<id property="id" column="menuList.id" />
</collection>
</resultMap> <sql id="roleColumns">
a.id,
a.company_id AS "companyId",
a.name,
a.enname,
a.useable,
a.create_by AS "createBy",
a.create_date AS "createDate",
a.update_by AS "updateBy",
a.update_date AS "updateDate",
a.remarks,
a.del_flag AS "delFlag",
c.name AS "companyName"
</sql> <select id="findList" resultMap="roleResult">
SELECT
<include refid="roleColumns" />,
rm.menu_id AS "menuList.id"
FROM (select * from sys_role order by #{params.orderByClause} limit #{startRow}, #{endRow}) a
LEFT JOIN sys_company c ON c.id = a.company_id
LEFT JOIN sys_role_menu rm ON rm.role_id = a.id
WHERE a.del_flag = #{params.delFlag}
</select>
												

mybatis多对多级联查询的更多相关文章

  1. Mybatis中使用级联查询,一对多的查询

    一.需求描述 自己在开发一个小程序的过程中,需要做的一个查询是稍微比较复杂的查询,根据用户信息去查询用户所对应的宠物信息. 一个用户可能对应多个宠物,所以在用户和宠物信息的对应关系就是一对多的关系. ...

  2. mybatis多对多关联查询——(十)

    1.需求 查询用户及用户购买商品信息. 2     sql语句 查询主表是:用户表 关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表: orders.orderdetail. ...

  3. mybatis多对多关联查询

    多对多关系 一个学生可以选多门课程,而一门课程可以由多个学生选择,这就是一个典型的多对多关联关系.所谓多对多关系,其实是由两个互反的一对多关系组成.即多对多关系都会通过一个中间表来建立,例如选课表.学 ...

  4. 阶段3 1.Mybatis_09.Mybatis的多表操作_8 mybatis多对多操作-查询角色获取角色下所属用户信息

    一个角色对应多个用户 生成getter和setter 查看两个表的数据 中间表定义了谁有角色,谁没有角色 根据中间表的关系,最终查询出来的列表的数据样子.这需要两个左外链接才能实现功能. 第一个左外链 ...

  5. 阶段3 1.Mybatis_09.Mybatis的多表操作_9 mybatis多对多操作-查询用户获取用户所包含的角色信息

    sql语句以user作为主表 用户的全部信息,以为用户下的角色的.并不是所有的用户都有角色,有角色的就带角色.没角色的就为null 首先修改实体类 定义List<Role> 生成gette ...

  6. mybatis多对一关联

    mybatis多对一关联查询实现 1.定义实体 定义实体的时候需要注意,若是双向关联,就是说双方的属性中都含有对方对象作为域属性出现, 那么在写toString()方法时需要注意,只让某一方输出即可, ...

  7. mybatis级联查询,多对一查询问题

    在使用Mybatis进行多表级联查询时遇到了一个问题:查询结果只有一项,但正确结果是两项.经测试,SQL语句本身没有问题. 在SQL映射文件(XML)中: <!-- 级联查询数据 --> ...

  8. Mybatis 之级联查询 一对多配置

    Mybatis级联 查询相对于hibenate是有点麻烦,但是相应好处也是有的,Mybatis轻量.根据自己要的字段配置方便 一对多配置用   <collection property=&quo ...

  9. Mybatis 级联查询 (一对多 )

    后台系统中 涉及到添加试卷 问题 答案的一个模块的.我需要通过试卷 查询出所有的试题,以及试题的答案.这个主要要使用到Mybatis的级联查询. 通过试卷 查询出与该试卷相关的试题(一对多),查询出试 ...

随机推荐

  1. Acwing-121-赶牛入圈(二分, 二维前缀和,离散化)

    链接: https://www.acwing.com/problem/content/123/ 题意: 农夫约翰希望为他的奶牛们建立一个畜栏. 这些挑剔的畜生要求畜栏必须是正方形的,而且至少要包含C单 ...

  2. 关于python-selenium-chromedriver提示

    问题一:AttributeError: module 'selenium.webdriver' has no attribute 'Chromedriver' 配置selenium环境时,执行代码 f ...

  3. 1,Java消息服务-JMS

    一,消息服务 消息服务指的是两个应用程序之间进行异步通信的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建.发送.读取消息等,用于支持应用程序开发.在Java中,当两个应用程序使用JMS ...

  4. head first 设计模式笔记9-迭代器模式

    迭代器模式:提供一种方法顺序访问一个集合对象中的各个元素,而又不暴露其内部的表示. 迭代器接口 /** * @author oy * @date 2019年9月22日 上午9:03:08 * @ver ...

  5. Tomcat 激活spring profile

    springboot打包war部署到外部tomcat的时候指定profile启动 windows 在%tomcat%/bin下创建setenv.bat文件 linux 在%tomcat%/bin下创建 ...

  6. java知识查漏补缺

    一.重写(override)和重载(overload)的区别 二者除了名字相似,其实没什么联系 范围不同:重载发生在同一个类的不同方法之间.重写发生在父类和子类自荐. 前提: 重载要求:方法名相同,参 ...

  7. docker运行jpress

    1.前提安装好docker mkdir docker//建立工作文件夹 cd docker 2.下载tomcat镜像和jpress开源项目 docker pull docker pull hub.c. ...

  8. MQTT协议 Websocket JS客户端

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  9. typescript 第二部分

    ts 中不允许变量同名 函数定义的两种方式 第一种:命名函数 = 声明式定义 function fn(){} 第二种:匿名函数 var fn = function(){} function fn(x: ...

  10. spark 笔记 5: SparkContext,SparkConf

    SparkContext 是spark的程序入口,相当于熟悉的'main'函数.它负责链接spark集群.创建RDD.创建累加计数器.创建广播变量. ) scheduler.initialize(ba ...