文章摘录自:http://blog.csdn.net/y172158950/article/details/17304645

1. 表关联

a) 嵌套查询(传说中的1+N问题)
  1. <resultMap id="userResult3" type="User">
  2. <association property="role" column="role_id" javaType="Role" select="selectRole"/>
  3. </resultMap>
  4. <select id="selectUser2" parameterType="int" resultMap="userResult3">
  5. select _id id, _name name, _password password, _role_id role_id from _user where _id = #{id};
  6. </select>
  7. <select id="selectRole" parameterType="int" resultType="Role">
  8. select _id id, _name name, _grade grade from _role where _id = #{id};
  9. </select>
i. 是role_id[sleect结果集column别名],不是_role_id[_user表column]。
b) 嵌套结果
  1. <resultMap id="userResult" type="User">
  2. <constructor>
  3. <idArg column="u_id" javaType="int"/>
  4. </constructor>
  5. <result property="name" column="u_name" />
  6. <result property="password" column="u_password" />
  7. <association property="role" column="r_id" javaType="Role">
  8. <id property="id" column="r_id"/>
  9. <result property="name" column="r_name"/>
  10. <result property="grade" column="r_grade"/>
  11. </association>
  12. </resultMap>
  13. <select id="selectUser" parameterType="int" resultMap="userResult">
  14. select u._id u_id, u._name u_name, u._password u_password,
  15. r._id r_id, r._name r_name, r._grade r_grade from _user u
  16. left join _role r on u._role_id=r._id where u._id =#{id};
  17. </select>
i. 别名的意义:每个字段名称必须唯一,重名的情况会照成错误的返回。[太土了]
ii.蛋疼的构造方法:<constructor>定义了javabean的构造方法
  1. public User(Integer id) {  //此处必须写Integer,写int报错
  2. this.id = id;
  3. }
iii. 另外一种写法:resultMap的重用
  1. <resultMap id="userResult" type="User">
  2. <constructor>
  3. <idArg column="u_id" javaType="int"/>
  4. </constructor>
  5. <result property="name" column="u_name" />
  6. <result property="password" column="u_password" />
  7. <association property="role" column="r_id" resultMap="roleResult">
  8. </association>
  9. </resultMap>
  10. <resultMap id="roleResult" type="Role">
  11. <id property="id" column="r_id" />
  12. <result property="name" column="r_name"/>
  13. <result property="grade" column="r_grade"/>
  14. </resultMap>

2. 集合的用法

  1. <select id="selectUser4" parameterType="int" resultType="User">
  2. select _id id, _name name, _password password, _role_id role_id from _user where _role_id = #{id};
  3. </select>
  4. <select id="selectRole4" parameterType="int" resultMap="selectRole4">
  5. select _id id, _name name, _grade grade from _role where _id = #{id};
  6. </select>
  7. <resultMap id="selectRole4" type="Role">
  8. <collection property="users" column="id" ofType="User" select="selectUser4"/>
  9. </resultMap>

i. 仍要注意,resultMap中column都是查询结果集的别名

mybatis_SQL映射(3)的更多相关文章

  1. mybatis_SQL映射(4)鉴别器

    摘录自:http://blog.csdn.net/y172158950/article/details/17505739 鉴别器:有时一个单独的数据库查询也许返回很多不同(但是希望有些关联)数据类型的 ...

  2. mybatis_SQL映射(1)

    文章摘录自:http://blog.csdn.net/y172158950/article/details/17258377 1. select的映射 <select id="sele ...

  3. mybatis_SQL映射(2)

    文章摘录自:http://blog.csdn.net/y172158950/article/details/17258377 1. sql的重用:定义一个sql片段,可在任何SQL语句中重用该片段. ...

  4. Hibernatel框架关联映射

    Hibernatel框架关联映射 Hibernate程序执行流程: 1.集合映射 需求:网络购物时,用户购买商品,填写地址 每个用户会有不确定的地址数目,或者只有一个或者有很多.这个时候不能把每条地址 ...

  5. hibernate多对多关联映射

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  6. Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示

    Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...

  7. ElasticSearch 5学习(9)——映射和分析(string类型废弃)

    在ElasticSearch中,存入文档的内容类似于传统数据每个字段一样,都会有一个指定的属性,为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成字符串值,Elasticsearc ...

  8. .NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper

    好久没有写文章,工作甚忙,但每日还是关注.NET领域的开源项目.五一休息,放松了一下之后,今天就给大家介绍一个轻量级的对象映射工具Tiny Mapper:号称是.NET平台最快的对象映射组件.那就一起 ...

  9. ASP.NET Core的路由[1]:注册URL模式与HttpHandler的映射关系

    ASP.NET Core的路由是通过一个类型为RouterMiddleware的中间件来实现的.如果我们将最终处理HTTP请求的组件称为HttpHandler,那么RouterMiddleware中间 ...

随机推荐

  1. 基于2-channel network的图片相似度判别

    一.相关理论 本篇博文主要讲解2015年CVPR的一篇关于图像相似度计算的文章:<Learning to Compare Image Patches via Convolutional Neur ...

  2. 12.python进程\协程\异步IO

    进程 创建进程 from multiprocessing import Process import time def func(name): time.sleep(2) print('hello', ...

  3. MicroPython+北斗+GPS+GPRS:TPYBoardv702短信功能使用说明

    转载请以链接形式注明文章来源(MicroPythonQQ技术交流群:157816561,公众号:MicroPython玩家汇) TPYBoardv702是目前市面上唯一支持通信定位功能的MicroPy ...

  4. nodejs 之 nvm和pm2

    说道 node不得不提到nodejs的版本管理nvm和Node应用的进程管理器pm2. 当然,关于这两个的介绍的文章那么多,随意baidu,bing,google就可以. 我这里是给自己打一个标签,方 ...

  5. QuickStart系列:docker部署之Elasticsearch

    ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apach ...

  6. 二叉树——遍历篇(递归/非递归,C++)

    二叉树--遍历篇 二叉树很多算法题都与其遍历相关,笔者经过大量学习.思考,整理总结写下二叉树的遍历篇,涵盖递归和非递归实现. 1.二叉树数据结构及访问函数 #include <stdio.h&g ...

  7. spring官方学习地址

    1.http://projects.spring.io/spring-framework/ 2.https://github.com/spring-projects/spring-mvc-showca ...

  8. NEST 中的协变

    Convariant search results version 5.x NEST 直接支持返回协变结果集合.这意味着,可以将搜索结果的类型指定为一个接口或者基类,但是其真实类型仍然是接口或基类的一 ...

  9. c#中常用集合类和集合接口之集合类系列【转】

    常用集合接口系列:http://www.cnblogs.com/fengxiaojiu/p/7997704.html 常用集合类系列:http://www.cnblogs.com/fengxiaoji ...

  10. 跟我一起读postgresql源码(十一)——Executor(查询执行模块之——Materialization节点(上))

    物化节点 顾名思义,物化节点是一类可缓存元组的节点.在执行过程中,很多扩展的物理操作符需要首先获取所有的元组后才能进行操作(例如聚集函数操作.没有索引辅助的排序等),这时要用物化节点将元组缓存起来.下 ...