MyBatis数据持久化(六)resultMap使用
2015-06-18 21:43
495 查看
resultMap是MyBatis最强大也是最重要的特性,使用它我们可以將查询结果或者sql输入条件和一个HashMap的key进行映射,大大简化了sql查询条件的输入,而且使得数据的查询变得非常灵活。
考虑前面的例子,我们从user表中查询出一条数据,查询sql语句配置如下:
我们必须新建一个映射类
在实际使用过程中我们几乎不采用上面这种方式,而是使用resultMap將查询结果映射成一个HashMap,key与数据库字段名建立映射,value为从数据库中查询出的结果,接下来对上面的查询方法进行改写:
select标签中有一个resultMap属性,指定一个id为
然后新建一个测试类
在testResultMap方法中,由于parameterType指定参数类型为hashmap,所以selectOne方法的第二个参数必须为HashMap对象。这里我们new了一个HashMap对象,map对象中的key对应的值会传到sql语句相应的占位符中。
查询结果返回一个HashMap对象,我们可以使用get方法获取数据库查询结果。
打开Outline视图,在testResultMap方法上点击右键Debug As->Junit Test,运行结果为:
博文源码:https://github.com/rongbo-j/mybatis-blog
考虑前面的例子,我们从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
相关文章推荐
- 学习笔记:axure 初级教程
- 返回一个二维整数数组中最大联通子数组的和
- http简介
- 【kd-tree】bzoj2648 SJY摆棋子
- gnome desktop environment
- github笔记
- 用命令行对closure compiler进行封装调用
- ReactiveCocoa框架菜鸟入门(五)——信号的FlattenMap与Map
- hdu 4651Partition(整数拆分模板题)
- 常见的算法题:逆行单一列表
- 【kd-tree】bzoj3053 The Closest M Points
- 转置矩阵
- Codeforces 549B Looksery Party
- BZOJ 4089:[Sdoi2015]graft(SDOI 2015 Round 2 Day 2)
- 分支-15 日K蜡烛图(15)
- 【堆】【kd-tree】bzoj2626 JZPFAR
- iOS开发学习第二十一课——属性 / 点语法
- java集合类
- 关于github开源项目Side-Menu.Android的使用详解
- bzoj-1570 Blue Mary的旅行