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. 1、检查并修改mysql的my.ini的配置文件

    代码如下: default-character-set=utf8 2.建立数据库是要指定字符集 代码如下: create database mydb default character set utf ...

  2. 关于在react里面es6构建类的时候,一些开始的问题

    一般来说我们写react代码,个人习惯 这个里面没有constructor和super的,这样写也没啥问题.因为他会默认加上 但是有的时候有人会加上这两个 可以不写constructor,一旦写了co ...

  3. Python 模块 Ⅱ

    搜索路径 当你导入一个模块,Python 解析器对模块位置的搜索顺序是: 1.当前目录 2.如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录. 3.如果都 ...

  4. eclipse svn同步过滤掉某些不需要同步的文件

    注:这里说的svn是eclipse里svn插件 默认情况下,我们在点击svn同步时,总是会把一些不需要的目录和文件也给同步了,这样我觉得很晃眼睛,所以在这里说下怎么去去掉不想同步的文件 1.默认同步下 ...

  5. HDU 6438 Buy and Resell ( 2018 CCPC 网络赛 && 贪心 )

    题目链接 题意 : 给出一些数.你可以从左到右对这些数进行三种操作花费 Ai 买入东西.以 Ai 价格卖出你当前有的东西.或者什么都不做.现在问你可以获取的最大利益是多少? 分析 : 和 CF 867 ...

  6. [LOJ2538][PKUWC2018]Slay the Spire:DP

    分析 学会新姿势!我们可以通过调整DP顺序来体现选取物品的优先顺序! 显然选取强化牌的最优策略是倍数从高到低,能选就选,最多选\(k-1\)张,选取攻击牌的最优策略是伤害从高到低,尽量少选,但最少选\ ...

  7. 并发编程--Concurrent-工具类介绍

    并发编程--Concurrent-工具类介绍 并发编程--Concurrent-工具类介绍 CountDownLatch CylicBarrier Semaphore Condition 对象监视器下 ...

  8. MSO Transponder 页面开发思路

    1. 确定Transponder开发页面分类,定义负责模块 2. 定义模块页面布局 3. 选择页面各数据对应的控件类型 4. 选定控件对应set/get所用方式 快捷键链接设置: http://www ...

  9. numpy小记

    import numpy as np # a=np.array([[1,3,2],[4,5,6]]) print(a) a=np.arange(1,13).reshape((3,4))#生成一个3行4 ...

  10. 【Spark机器学习速成宝典】模型篇08保序回归【Isotonic Regression】(Python版)

    目录 保序回归原理 保序回归代码(Spark Python) 保序回归原理 待续... 返回目录 保序回归代码(Spark Python) 代码里数据:https://pan.baidu.com/s/ ...