文档章节

mybatis结果集映射小结

零域1
 零域1
发布于 2017/02/16 16:20
字数 750
阅读 22
收藏 0

mybatis结果集映射小结

1.普通对象结果集映射

1.对象的属性都是一些java的八种常用类型或者String类型, 直接进行映射即可,如下:

<resultMap type="com.test.entity.Person" id="person">
		<id property="id" column="id" />
		<result property="name" column="user_name"/>
		<result property="sex" column="user_sex"/>
                         	┇
</resultMap>

2.对象属性含有另一种对象的结果集映射

1.对象属性中,部分属性是另一种对象,并且是has - one关系(一对一关系),如:一个博客有一个作者。 这类情况使用 association 映射节点。

1.association 和普通的resultMap配置属性基本相同

2.具体如下:

<select id="selectBlog" parameterType="int" resultMap="blogResult">
    select  
    B.id as blog_id,  
    B.title as blog_title,  
    **B.author_id as blog_author_id,**  
    **A.id as author_id,**  
    A.username as author_username,  
    A.password as author_password,  
    A.email as author_email,  
    A.bio as author_bio  
    from Blog B left outer join Author A on B.author_id = A.id  
    where B.id = #{id}  
</select>
*如上的这类一对一嵌套查询可以使用如下的这类映射:*
<resultMap id="blogResult" type="Blog">  
    <id property=”blog_id” column="id" />  
    <result property="title" column="blog_title"/>  
    <association property="author" column="blog_author_id"     javaType="Author"  
    resultMap=”authorResult”/>  
</resultMap>  
       
<resultMap id="authorResult" type="Author">  
    <id property="id" column="author_id"/>  
    <result property="username" column="author_username"/>  
    <result property="password" column="author_password"/>  
</resultMap>
*或者直接将这两个查映射直接嵌套写:*
<resultMap id="blogResult" type="Blog">  
    <id property=”blog_id” column="id" />  
    <result property="title" column="blog_title"/>  
    <association property="author" column="blog_author_id"     javaType="Author">  
        <id property="id" column="author_id"/>  
        <result property="username" column="author_username"/>  
        <result property="password" column="author_password"/>  
    </association>  
</resultMap>
    *id元素在嵌套结果映射中扮演了非常重要的角色,你应该总是指定一个或多个属性来唯一标识这个结果集。
事实上,如果您没有那样做,MyBatis也会工作,但是会导致严重性能开销。选择尽量少的属性来唯一标识结果,
而使用主键是最明显的选择(即使是复合主键)。*

2.对象属性中,部分属性是另一种对象,并且是has - many关系(一对多关系),如:一个博客有多篇文章。 这类情况使用 collection 映射节点,具体如下:

1.collection的属性 ofType :是集合中元素的类型,一般是普通java对象,其余与association 基本相同

2.具体实现:

<select id="selectBlog" parameterType="int" resultMap="blogResult">
    select  
    B.id as blog_id,  
    B.title as blog_title,  
    B.author_id as blog_author_id,  
    P.id as post_id,  
    P.subject as post_subject,  
    P.body as post_body,  
    from Blog B  
    left outer join Post P on B.id = P.blog_id  
where B.id = #{id}  
</select> 
*将两个结果集嵌套,当然也可以分开,提高重用性*
<resultMap id="blogResult" type="Blog">  
    <id property=”id” column="blog_id" />  
    <result property="title" column="blog_title"/>  
    <collection property="posts" ofType="Post">  
        <id property="id" column="post_id"/>  
        <result property="subject" column="post_subject"/>  
        <result property="body" column="post_body"/>  
    </collection>  
</resultMap>

3.Discriminator(识别器)结果集筛选:

1.功能类似于java的switch,

2.case中的resultMap需要extends父resultMap,不然结果集值包含case中resultMap中的属性。

3.具体实现:

<resultMap id="vehicleResult" type="Vehicle">  
    <id property=”id” column="id" />  
    <result property="vin" column="vin"/>  
    <result property="color" column="color"/>  
    <discriminator javaType="int" column="vehicle_type">  
        <case value="1" resultMap="carResult"/>  
        <case value="2" resultMap="truckResult"/>  
    </discriminator>  
</resultMap> 

<resultMap id="carResult" type="Car" **extends=”vehicleResult”**>
    <result property=”doorCount” column="door_count" />
</resultMap>

参考:http://blog.csdn.net/jr_soft/article/details/35274691 http://www.cnblogs.com/yansum/p/5819973.html http://www.mybatis.org/mybatis-3/sqlmap-xml.html

© 著作权归作者所有

共有 人打赏支持
零域1
粉丝 2
博文 2
码字总数 1042
作品 0
成都
mybatis学习笔记(7)-输出映射

mybatis学习笔记(7)-输出映射 标签: mybatis [TOC] 本文主要讲解mybatis的输出映射。 输出映射有两种方式 resultType 使用进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可...

brianway
2016/02/28
131
0
MyBatis 实践 -Mapper与DAO

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hanqing280441589/article/details/50760236 标签: Java与存储 MyBatis简介 MyBatis前身是iBatis,是一个基于...

菜鸟-翡青
2016/02/28
0
0
Mybaits一对多映射结果集丢失数据问题

目前Java Web开发使用最多的项目架构还是MVC,数据库持久层使用一般会选择用mybatis或者hibernate框架。对于mybatis和hibernate之间的区别大家自行百度,今天主要是记录下最近使用mybatis开发...

MaxBill
06/26
0
0
mybatis高级映射

转载自 http://blog.csdn.net/zd836614437/article/details/51814108 一、介绍 resultType : 作用:将查询结果按照sql列名pojo属性名一致性映射到pojo中。 场合: 常见一些明细记录的展示,...

byxdaz
2017/11/08
0
0
【Mybatis框架】输出映射-resultType与resultMap

输出映射 接下来说说有关Mapper.xml配置文件中查询标签中关于返回值类型resultType与resultMap的一些内容 1.resultType 使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致...

Mysoft
2015/09/18
527
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux命令备忘录: jobs 显示Linux中的任务列表及任务状态命令

jobs命令用于显示Linux中的任务列表及任务状态,包括后台运行的任务。该命令可以显示任务号及其对应的进程号。其中,任务号是以普通用户的角度进行的,而进程号则是从系统管理员的角度来看的...

开元中国2015
59分钟前
1
0
springboot Whitelabel Error Page(Not Found)解决方案

当出现上图图的错误时注意 报错信息 There was an unexpected error (type=Not Found, status=404). Not Found代表未访问到资源 解决方案:比较访问路径和代码的路径有没有写错 正确的访问路...

斩神魂
59分钟前
2
0
记一次hbase master停止服务的原因以及恢复

在Hdfs空间不足的情况下,拒绝写入,hbase会down掉。如果hdfs空间没有清理的情况下,重新启动hbase,会报splitlog失败,原因是wal日志重写过程中会写hdfs,写不进去导致的。重启不成功。 解决...

PageYi
今天
1
0
如何从平面设计转行到UI设计?

时代的变迁,科技的进步,工具的发展,薪资的差距,促使许多人转行的原因,但平面与界面两者之间有着哪些的差异呢?如果,想要转行又该具备哪些条件呢? 平面、界面设计之间的差异性 平面设计...

mo311
今天
4
0
线程池整理

一般在生产环境中,我们都不会直接new一个Thread,然后再去start(),因为这么做会不断频繁的创建线程,销毁线程,过大的线程会耗尽CPU和内存资源,大量的垃圾回收,也会给GC带来压力,延长GC停顿时间...

算法之名
今天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部