resultMap是MyBatis最强大也是最重要的特性,使用它我们可以將查询结果或者sql输入条件和一个HashMap的key进行映射,大大简化了sql查询条件的输入,而且使得数据的查询变得非常灵活。

考虑前面的例子,我们从user表中查询出一条数据,查询sql语句配置如下:

    <select id="queryUserInfoByName" parameterType="string"  resultType="user">
select * from User where username = #{username}
</select>

我们必须新建一个映射类com.mybatis.domain.User,它属性和数据库中的每一个字段对应,resultType指定为com.mybatis.domain.User类型,这样才能从数据库中获取每个字段的内容,这种操作是比较繁琐的,而且有时候我们并不需要查询结果中所有的字段。

在实际使用过程中我们几乎不采用上面这种方式,而是使用resultMap將查询结果映射成一个HashMap,key与数据库字段名建立映射,value为从数据库中查询出的结果,接下来对上面的查询方法进行改写:

    <resultMap type="hashmap"  id="queryUserInfoByNameResult">
<result property="username" column="username"/>
<result property="password" column="password"/>
<result property="phone" column="phone"/>
</resultMap>
<select id="queryUserInfoByNameV1" parameterType="hashmap" resultMap="queryUserInfoByNameResult">
select * from User where username = #{username}
</select>

select标签中有一个resultMap属性,指定一个id为queryUserInfoByNameResult的映射,我们在resultMap标签中定义该映射,property指定hashmap的key,column为映射的数据库字段名。

然后新建一个测试类com.mybatis.exam4.ResultMap,testResultMap为测试方法:

package com.mybatis.exam4;

import java.io.IOException;
import java.io.Reader;
import java.util.HashMap;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; public class ResultMap {
private Reader reader = null;
private SqlSessionFactory sessionFactory = null;
private SqlSession session = null;
@Before
public void before()
{
try {
reader = Resources.getResourceAsReader("SqlMapConfig.xml");
sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//创建一个数据库会话
session = sessionFactory.openSession();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} @Test
@SuppressWarnings({ "rawtypes", "unchecked" })
public void testResultMap()
{ HashMap map = new HashMap();
map.put("username", "小王");
HashMap userInfoMap = (HashMap)session.selectOne("User.queryUserInfoByNameV1",map);
System.out.println("username: " + userInfoMap.get("username"));
System.out.println("password: " + userInfoMap.get("password"));
System.out.println("phone: " + userInfoMap.get("phone"));
} @After
public void after()
{
if(null != session)
{
session.close();
}
}
}

在testResultMap方法中,由于parameterType指定参数类型为hashmap,所以selectOne方法的第二个参数必须为HashMap对象。这里我们new了一个HashMap对象,map对象中的key对应的值会传到sql语句相应的占位符中。

查询结果返回一个HashMap对象,我们可以使用get方法获取数据库查询结果。

打开Outline视图,在testResultMap方法上点击右键Debug As->Junit Test,运行结果为:

username: 小王
password: 123456a
phone: 13535999538

博文源码:https://github.com/rongbo-j/mybatis-blog

MyBatis数据持久化(六)resultMap使用的更多相关文章

  1. MyBatis数据持久化(十一)Mybatis3、Spring4、Struts2整合开发

    上一节我们將Mybatis和Spring4进行整合,本节向大家介绍Mybatis在Web开发中的应用,并与主流的MVC框架Struts2进行整合. 我们首先需要获取Struts2框架,Struts2官 ...

  2. MyBatis数据持久化(七)多表连接查询

    本节继续以多表连接查询的案例介绍使用resultMap的好处,对于两张以上的表进行关联查询,当我们有选择的从不同表查询所需字段时,使用resultMap是相当方便的.例如我们有两张表,分别为用户表Us ...

  3. MyBatis数据持久化(十)与Spring4整合

    前面几节介绍了mybatis的基本使用方法,本节主要介绍如何使用mybatis与主流的IoC容器Spring进行整合. 我们首先需要获取Spring框架的jar文件,在写本文时spring的最新Rel ...

  4. MyBatis数据持久化(三)增删改查

    上篇文章中我们使用mybatis成功建立数据库会话,并从表中查询出相应的数据,本文在此基础上介绍MyBatis另外几种操作,即插入.修改.删除记录. 1.修改User.xml文件,增加几条sql语句: ...

  5. MyBatis数据持久化(二)建立数据库会话

    上篇文章中介绍了我们使用mybatis前的准备工作,并在程序中通过jdbc与mysql数据库成功建立连接,接下来介绍如何使用mybatis与数据库建立会话.我们需要以下几个步骤: 1.在build p ...

  6. MyBatis数据持久化(九)动态sql

    本文摘自:mybatis参考文档中文版 MyBatis的一个强大的特性之一通常是它的动态SQL能力.如果你有使用JDBC或其他相似框架的经验,你就明白条件地串联SQL字符串在一起是多么的痛苦,确保不能 ...

  7. MyBatis数据持久化(八)sql复用

    在mybatis中,我们可以將sql语句中公共的部分提取出来,然后需要该段sql的地方通过include标签引入即可,这样可以达到sql语句复用的目的. 例如我们有两条相似的查询语句: <sel ...

  8. MyBatis数据持久化(五)数据源配置优化

    在前面的教程中,我们把数据库的驱动.用户名.密码等配置项全部写在 SqlMapConfig.xml中: <dataSource type="POOLED"> <p ...

  9. MyBatis数据持久化(四)类型别名

    Mybatis的类型别名指的是我们可以为Java类型自定义一个简短的名字,以达到简化配置的目的,在上篇博文中我们的sql语句配置文件内容如下: <?xml version="1.0&q ...

随机推荐

  1. mybatis、spring、mysql、maven实现简单增删查改

    之前写过的mybatis博客作为学习mybatis.spring还是不太合适. 现在找到一个不错的例子,首先将这个完整的mybatis增删查改例子在本地上实现出来,然后再进行学习. 项目结构与运行结果 ...

  2. [转] Java 插入表记录后得到自增的id (附3种方法代码)

    转自:https://blog.csdn.net/yaerfeng/article/details/7231093 在MySQL中,使用auto_increment类型的id字段作为表的主键,并用它作 ...

  3. c# CacheHelper缓存帮助类

    一.开篇 主要功能:改善程序性能.服务器的响应速度,尤其是当数据的处理过程变得复杂以及访问量变大时,变得比较明显.有些数据并非时刻在发生变化,如果我们可以将一些变化不频繁的数据的最终计算结果(包括页面 ...

  4. 用过的jQuery记录

    var list= $('input:radio[name="name"]:checked').val(); //选择input中单选name为“name”的并且是选中状态的 in ...

  5. innerHTML 与 outerHTML区别

    示例代码: <div id="test"> <p>这是innerHTML</p> <p>这是innerHTML</p> ...

  6. Xcode7 下导入第三方库 图文介绍

    网上没有很好的图文介绍,干脆我自己写一个好了,方便新手入门. 这里以导入著名的第三方网络库AFNetWorking v3.0.4和数据库FMDB v2.6.2为例进行说明. 好,下面开始. 下载源文件 ...

  7. CorelDRAW X8制作金属质感3D立体按钮

    本教程教您使用CorelDRAW X8制作金属质感3D立体按钮.绘图中主要应用渐变填充技巧为立体按钮表现物体质感和丰富的色彩变化,最后实现的效果也是不错的,是很实用的案例,教程难度一般,完成图如下: ...

  8. OCR文字识别软件FineReader系列产品双十一特惠!

    17年的双十一,似乎比以往来的更早一些,说是双十一,这不,从十月里就开始了各种宣传,各种造势,说到底还是影响力太大,关注人群太多,优惠力度太劲爆,简直让人不注意都不行啊!对于ABBYY来说,给用户来点 ...

  9. JQuery选择器排除某元素实现js代码

    使用JQuery选择器实现排除某一大元素下的某一元素的核心代码是使用.not()方法,如下所示: $("button").not("#save").attr(& ...

  10. 使用命令:ssh-add 时,出现 “Could not open a connection to your authentication agent.”

    为 GitHub 账号设置 SSH Key时, 使用命令:ssh-add,出现“Could not open a connection to your authentication agent”,解决 ...