先贴一句官方文档内容

如果世界总是这么简单就好了。

正如官方文档所说:如果一切都是这么简单,那该多好啊,但是实际上,我们面对的是复杂的对象,就是对象里有对象,有列表对象,总之五花八门的对象。这个时候我们期盼这mybatis能帮我们来解决这个问题。

今天,我就遇到了这样的一个问题:

在做基于RBAC权限分配模型中,一共有五张表

  • sys_permission  记录权限信息,包括权限名称,权限url等
  • sys_role 记录角色信息,包括角色名和角色id
  • sys_role_permission 记录角色权限对应关系
  • sys_user 记录用户表
  • sys_user_role 记录用户角色对应关系,一个用户可能有多个角色

好的,我在做角色权限的时候,需要这样的一个场景,根据角色id,获取角色的权限列表,然后展示在前台上:

我的思路是:

1,先有mybatis逆向生成pojo,然后包装心的角色类,里面包含权限列表,我们姑且设置为SysRoleCustome

2,然后在mapper.xml里面新增这样的resultmap,如下所示

 <resultMap id="roleCustomeMap" type="com.unisits.zngkpt.common.userprivrman.bojo.SysRoleCustome">
<result property="roleId" column="role_id"></result>
<result property="roleName" column="role_name"></result>
<result property="available" column="available"></result>
<collection property="perList" ofType="com.unisits.zngkpt.common.userprivrman.pojo.SysPermission">
<result property="permissionId" column="permission_id"></result>
<result property="permissionName" column="permission_name"></result>
</collection>
</resultMap>

3,其对应的sql语句为:

   <select id="queryAllRoleCustome" resultMap="roleCustomeMap">
select
a.role_id,a.role_name,a.available ,
b.permission_id,
c.permission_name
from sys_role a, sys_role_permission b, sys_permission c
where a.role_id = b.role_id and b.permission_id = c.permission_id
</select>

这样,我们就可以获取包含list<object>这样的对象了

当然,详细的见解还在官方文档里说明,这里只是抛砖引玉,感叹mybatis的便捷性。

高级结果映射

mybatis之高级结果映射的更多相关文章

  1. MyBatis从入门到精通(第6章):MyBatis 高级查询->6.1.2高级结果映射之一对多映射

    jdk1.8.MyBatis3.4.6.MySQL数据库5.6.45.IntelliJ IDEA 2019.3.1 本章主要包含的内容为 MyBatis 的高级结果映射,主要处理数据库一对一.一对多的 ...

  2. MyBatis从入门到精通(第6章):MyBatis 高级查询->6.1.1高级结果映射之一对一映射

    jdk1.8.MyBatis3.4.6.MySQL数据库5.6.45.IntelliJ IDEA 2019.2.4 本章主要包含的内容为 MyBatis 的高级结果映射,主要处理数据库一对一.一对多的 ...

  3. 深入浅出Mybatis系列八-mapper映射文件配置之select、resultMap

    注:本文转载自南轲梦 注:博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之inse ...

  4. MyBatis学习--高级映射

    简介 前面说过了简单的数据库查询和管理查询,在开发需求中有一些一对一.一对多和多对多的需求开发,如在开发购物车的时候,订单和用户是一对一,用户和订单是一对多,用户和商品是多对多.这些在Hibernat ...

  5. Mybatis 高级结果映射 ResultMap Association Collection

    在阅读本文章时,先说几个mybatis中容易混淆的地方: 1. mybatis中的列不是数据库里的列而是查询里的列,可以是别名(如 select user_name as userName,这时col ...

  6. Mybatis学习记录(六)----Mybatis的高级映射

    1.一对多查询 1.1 需求 查询订单及订单明细的信息. 1.2 sql语句 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关联即可. SELECT orders. ...

  7. Mybatis(四) 高级映射,一对一,一对多,多对多映射

    天气甚好,怎能不学习? 一.单向和双向 包括一对一,一对多,多对多这三种情况,但是每一种又分为单向和双向,在hibernate中我们就详细解析过这单向和双向是啥意思,在这里,在重复一遍,就拿一对多这种 ...

  8. 转:mybatis 高级结果映射(http://blog.csdn.net/ilovejava_2010/article/details/8180521)

    高级结果映射 MyBatis的创建基于这样一个思想:数据库并不是您想怎样就怎样的.虽然我们希望所有的数据库遵守第三范式或BCNF(修正的第三范式),但它们不是.如果有一个数据库能够完美映射到所有应用程 ...

  9. Mybatis高级结果映射

    有时侯,我们用SQL取得的结果需要映射到类似Map<key, Bean>这样的数据结构中或是映射到多个实体类中时,我们就需要使用到resultMap.下面用3个例子说明Mybatis高级结 ...

随机推荐

  1. 转:关于android webview实践的文章集合

    http://blog.csdn.net/jiangqq781931404/article/category/2681765

  2. 程序的入口及AppDelegate窗体显示原理

    AppDelegate.m - (void)dealloc { [_window release]; [super dealloc]; } - (BOOL)application:(UIApplica ...

  3. HDU 1253 胜利大逃亡 NYOJ 523【BFS】

    胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  4. 使用gradle构建Android时 版本号versionName中嵌入git提交信息

    为什么要这么做   在应用开发的版本迭代过程中,通过版本号并不能快速定位到所对应的代码,导致在后面分析问题追溯对应版本的代码时比较麻烦.   如果代码是通过git来管理的,git的commit id等 ...

  5. JavaScript 数组去重并统计重复元素出现的次数

    1.方法一 var arr = [1, 2, 3, 1, 2, 4]; function arrayCnt(arr) { var newArr = []; for(var i = 0; i < ...

  6. [Spring MVC - 2A] - java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

    严重: Servlet.service() for servlet [springMVC] in context with path [/ExceptionManageSystem] threw ex ...

  7. cocos2dx 制作单机麻将(四)

    cocos2dx 制作单机麻将(四) 麻将逻辑5.模拟出牌 // // main.cpp // MajiangLogicTest // // Created by TinyUlt on 14-8-16 ...

  8. css-id选择器

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  9. 【转载】C#根据当前时间获取周,月,季度,年度等时间段的起止时间

    DateTime dt = DateTime.Now; //当前时间 DateTime startWeek = dt.AddDays(1 - Convert.ToInt32(dt.DayOfWeek. ...

  10. java基础讲解07-----数组

    1.什么是数组 2.怎么使用数组 package test; public class ShuZu {            public static void main(String[] args ...