文档章节

mybatis结果集映射小结

qb11
 qb11
发布于 2017/02/16 16:20
字数 750
阅读 17
收藏 0
点赞 0
评论 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

© 著作权归作者所有

共有 人打赏支持
qb11
粉丝 1
博文 2
码字总数 1042
作品 0
成都
MyBatis 实践 -Mapper与DAO

标签: Java与存储 MyBatis简介 MyBatis前身是iBatis,是一个基于Java的数据持久层/对象关系映射(ORM)框架. MyBatis是对JDBC的封装,使开发人员只需关注SQL本身,而不需花费过多的精力去处理如注...

hanqing280441589 ⋅ 2016/02/28 ⋅ 0

mybatis学习笔记(7)-输出映射

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

brianway ⋅ 2016/02/28 ⋅ 0

mybatis高级映射

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

byxdaz ⋅ 2017/11/08 ⋅ 0

【Mybatis框架】输出映射-resultType与resultMap

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

Mysoft ⋅ 2015/09/18 ⋅ 0

MyBatis 之 概述

一、原始的JDBC连接数据库 public static void main(String[] args) {Connection conn = null;CallableStatement cs = null; String tableName = "emp";//分页每页显示的记录数int pageSize ......

pradosoul ⋅ 2015/08/27 ⋅ 1

【MyBiatis框架】Jdbc的弊端探讨和MyBiatis框架的简介

我们使用JSP+Servlet做Web应用的时候经常使用JDBC作为数据库的连接,那么,直接使用JDBC操作数据库进行增删改查是有一定弊端的,正因为如此才衍生出了Hibernate、MyBatis等一系列优秀的ORM框...

Mysoft ⋅ 2015/09/09 ⋅ 0

MyBatis 实践 -动态SQL/关联查询

标签: Java与存储 动态SQL 动态SQL提供了对SQL语句的灵活操作,通过表达式进行判断,对SQL进行拼接/组装. if 对查询条件进行判断,如果输入参数不为空才进行查询条件的拼接. mapper 会自动处理...

hanqing280441589 ⋅ 2016/02/28 ⋅ 0

mybatis select 结果集是 map 写法

<select id="selectPerson" parameterType="int" resultType="hashmap">SELECT * FROM PERSON WHERE ID = #{id}</select> 这个语句被称作 selectPerson,接受一个 int(或 Integer)类型的参......

之渊 ⋅ 2016/12/15 ⋅ 0

mybatis调用视图和存储过程

现在的项目是以Mybatis作为O/R映射框架,确实好用,也非常方便项目的开发。MyBatis支持普通sql的查询、视图的查询、存储过程调用,是一种非常优秀的持久层框架。它可利用简单的XML或注解用语...

mifans ⋅ 2016/10/20 ⋅ 0

Mybatis resultMap

resultMap 元素是 MyBatis 中最重要最强大的元素。它的作用是告诉Mybatis将从结果集取出的数据准换成开发者所需要的对象。 下面是最简单的映射语句示例: <select id="selectUsers" resultT...

小衰哥有点帅 ⋅ 02/10 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 9分钟前 ⋅ 0

CentOS开机启动subversion

建立自启动脚本: vim /etc/init.d/subversion 输入如下内容: #!/bin/bash## subversion startup script for the server## chkconfig: 2345 90 10# description: start the subve......

随风而飘 ⋅ 12分钟前 ⋅ 0

Nginx + uwsgi @ubuntu

uwsgi 安装 sudo apt-get install python3-pip # 注意 ubuntu python3默认没有安装pippython3 -m pip install uwsgi 代码(test.py) def application(env, start_response): start_res......

袁祾 ⋅ 13分钟前 ⋅ 0

版本控制工具

CSV , SVN , GIT ,VSS

颖伙虫 ⋅ 15分钟前 ⋅ 0

【2018.06.19学习笔记】【linux高级知识 13.1-13.3】

13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令

lgsxp ⋅ 23分钟前 ⋅ 0

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 51分钟前 ⋅ 0

彻底删除Microsoft Office的方法

参照此链接彻底删除Office https://support.office.com/zh-cn/article/%e4%bb%8e-pc-%e5%8d%b8%e8%bd%bd-office-9dd49b83-264a-477a-8fcc-2fdf5dbf61d8?ui=zh-CN&rs=zh-CN&ad=CN......

Kampfer ⋅ 今天 ⋅ 0

大盘与个股之间关系

大盘走多:积极出手 顺势加码 大盘走空: 少量出手 退场观望 大盘做头:逆势减码 少量操作 大盘做底 : 小量建仓 小量试单

guozenhua ⋅ 今天 ⋅ 0

Day16 LVM(逻辑卷管理)与磁盘故障小案例

lvm详解 简述 LVM的产生是因为传统的分区一旦分区好后就无法在线扩充空间,也存在一些工具能实现在线扩充空间但是还是会面临数据损坏的风险;传统的分区当分区空间不足时,一般的解决办法是再...

杉下 ⋅ 今天 ⋅ 0

rsync实现多台linux服务器的文件同步

一、首先安装rsync,怎样安装都行,rpm,yum,还是你用源码安装都可以。因为我用的是阿里云的ESC,yum install rsync就ok了。 二、配置rsync服务 1.先建立个同步数据的帐号 123 groupadd r...

在下头真的很硬 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部