mybatis级联查询
1.定义四个实体。User Role Privilege Resource,他们之间的对于关系为
2.需求:我通过用户名username查找出该用户对应的角色以及角色对应的权限和资源
3.实体
public class User implements Serializable {
private String id;
private String username;
private String password; private Set<Role> role = new HashSet<Role>();
public class Role implements Serializable {
private String id;
private String name;
private String des; private Set<Privilege> privilege = new HashSet<Privilege>();
public class Privilege implements Serializable { private String id; private String name; private String des;
private Set<Resource> resource = new HashSet<Resource>(); private Privilege parent; private Set<Privilege> child = new HashSet<Privilege>();
public class Resource implements Serializable {
private String id;
private String uri;
private String des;
4.UserMapper.xml的查询方法为
<resultMap type="user" id="userResult">
<id column="id" property="id"/>
<result column="username" property="username"/>
<collection property="role" javaType="java.util.Set" resultMap="roleResult"/>
</resultMap> <resultMap type="role" id="roleResult">
<id column="rid" property="id"/>
<result column="rname" property="name"/>
<result column="rdes" property="des"/>
<collection property="privilege" javaType="java.util.Set" resultMap="privilegeResult"/>
</resultMap> <resultMap type="privilege" id="privilegeResult">
<id column="pid" property="id"/>
<result column="pname" property="name"/>
<collection property="resource" javaType="java.util.Set" resultMap="resourceResult"/>
</resultMap> <resultMap type="resource" id="resourceResult">
<id column="resid" property="id"/>
<result column="resuri" property="uri"/>
</resultMap>
<select id="findUserByUserName" parameterType="string" resultMap="userResult">
select u.id,u.username,r.id as rid,r.name as rname,r.des as rdes,p.id as pid,p.name as pname,res.id as resid,res.uri as resuri
from tb_user u
left join user_role ur on ur.user_id=u.id
join tb_role r on r.id=ur.role_id
join role_privilege rp on rp.role_id=r.id
join tb_privilege p on p.id=rp.privilege_id
join tb_resource res on res.privilege_id=p.id
where u.username=#{username}
</select>
5.UserMapper.java定义方法
@Component
public interface UserMapper { User findUserByUserName(@Param(value="username")String username); }
mybatis级联查询的更多相关文章
- Mybatis 级联查询 (一对多 )
后台系统中 涉及到添加试卷 问题 答案的一个模块的.我需要通过试卷 查询出所有的试题,以及试题的答案.这个主要要使用到Mybatis的级联查询. 通过试卷 查询出与该试卷相关的试题(一对多),查询出试 ...
- mybatis级联查询,多对一查询问题
在使用Mybatis进行多表级联查询时遇到了一个问题:查询结果只有一项,但正确结果是两项.经测试,SQL语句本身没有问题. 在SQL映射文件(XML)中: <!-- 级联查询数据 --> ...
- mybatis ---- 级联查询 一对多 (集合映射)
关联有嵌套查询和嵌套结果两种方式,本文是按照嵌套结果这种方式来说明的 上一章介绍了多对一的关系,用到了<association></association>,这是一个复杂类型的 ...
- Mybatis 级联查询时只查出了一条数据
造成这个问题的原因是: 主表和明细表的id字段名相同造成的. 问题的关键在于resultMap中如果不定义类似主键之类的能够区分每一条结果集的字段的话,会引起后面一条数据覆盖前面一条数据的现象.
- Mybatis 之级联查询 一对多配置
Mybatis级联 查询相对于hibenate是有点麻烦,但是相应好处也是有的,Mybatis轻量.根据自己要的字段配置方便 一对多配置用 <collection property=&quo ...
- Mybatis中使用级联查询,一对多的查询
一.需求描述 自己在开发一个小程序的过程中,需要做的一个查询是稍微比较复杂的查询,根据用户信息去查询用户所对应的宠物信息. 一个用户可能对应多个宠物,所以在用户和宠物信息的对应关系就是一对多的关系. ...
- Mybatis Collection查询集合只出现一条数据
1.原因 如果两表联查,主表和明细表的主键都是id的话,明细表的多条只能查询出来第一条. 2.解决办法 级联查询的时候,主表和从表有一样的字段名的时候,在mysql上命令查询是没问题的.但在mybat ...
- MyBatis基础:MyBatis关联查询(4)
1. MyBatis关联查询简介 MyBatis中级联分为3中:association.collection及discriminator. ◊ association:一对一关联 ◊ collecti ...
- MyBatis关联查询,一对多关联查询
实体关系图,一个国家对应多个城市 一对多关联查询可用三种方式实现: 单步查询,利用collection标签为级联属性赋值: 分步查询: 利用association标签进行分步查询: 利用collect ...
随机推荐
- Centos 7 安装Mono和Jexus 默认目录安装 (一)
一.准备环境 yum -y install gcc gcc-c++ bison pkgconfig glib2-devel gettext make libpng-devel libjpeg-deve ...
- SQL 处理空值
问题: 在数据库中经常会有为null和''的值的列,在查询的时候,我们需要将它们转化成有效的值. 解决方案: 在emp表中的comm注释有的为null有的为'',在查询的时候 我们希望没有注释的显示为 ...
- Chrome设计文档-多进程架构
chromium multi-process architecture 本文档从high-level的角度描述Chromium的多进程架构. 问题 要构建一个决不崩溃或挂起的渲染引擎几乎是不可能的.同 ...
- MYSQL @、@@、@x
说明一: @var这种形式表示的是用户自定义的变量. 说明二: @@var这种形式表示的是系统变量.它又可以分为两种一种是全局(@@global)的一种是会话(@@session)的. 说明三: MY ...
- Win7下使用protel99se、protel99
很多网友需要用的protel99se,由于该软件开发的时间比较就早,在现在笔记本普及,尤其是win7普及的情况下,用该软件着实让许多人头痛,有人选择安装XP系统,但这就牺牲了win7良好的操作体验.也 ...
- 所有的GUI Toolkit,类型之多真开眼界
The GUI Toolkit, Framework Page User interfaces occupy an important part of software development. Th ...
- css em
em与px换算 任意浏览器的默认字体高度16px(16像素).所有未经调整的浏览器都符合: 1em=16px.那么,12px=0.75em,10px=0.625em.为了简化font-size的换算, ...
- stl非变易算法(二)
这里接着上篇stl非变易算法(一)进行总结.主要解析算法函数count.count_if.mismatch.equal.search.search_n以及find_end.给出算法函数的实现及測试用例 ...
- android项目 之 记事本(12) ----- 图片的等比例缩放及给图片加入边框
本文是自己学习所做笔记.欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 在Android的UI开发中常常会遇到图片的缩放,就比方记事本,如今的图片都比較 ...
- UNIX网络编程---简介
UNIX网络编程---简介 一. 概述 a) 在编写与计算机通信的程序时,首先要确定的就是和计算机通信的协议,从高层次来确定通信由哪个程序发起以及响应在合适产生.大多数 ...