【MyBatis框架点滴】——MyBatis输出映射

原创 2016年06月01日 20:38:30

  上文说到,MyBatis中,通过parameterType指定输入参数的类型。这里说一下用resultType和resultMap来指定输出参数的类型。


resultType


  resultType是最常用的指定输入参数类型的方式,一般用来指定输出简单类型和pojo。

一、指定输出简单类型

  映射文件:

<select id="findUserByUserName" parameterType="string"
        resultType="int">
    select count(*) from user where username =#{username} 
</select>

  实现:

/**
* 根据姓名查询用户数量
* @param username
* @return
* @throws Exception
*/
@Override
public int findUserByUserName(String username) throws Exception {
    SqlSession session=sqlSessionFactory.openSession();
    int result=session.selectOne("com.danny.mybatis.findUserByUserName",username);
    session.close();
    return result;
}

  测试:

@Test
public void testQueryByUserName() throws Exception {
    UserDao userDao = new UserDaoImpl(sqlSessionFactory);
    int result = userDao.findUserByUserName("DannyHoo");
    System.out.println(result);
}


二、指定输入pojo

  用resultType指定输入参数的类型为pojo时,有三种情况:

  1、查询出来的列名与pojo中的属性名完全一致,结果会创建pojo对象,映射成功。

  User.java

public class User implements Serializable {
    private int id;
    private String username;
    private int sex;
    private Date birthday;
    private String address;
    //getter、setter
}

  映射文件:

<select id="findUserById" parameterType="int"
        resultType="com.danny.mybatis.po.User">
    select id,username,sex,birthday,address from user where id=#{value}
</select>

  当查询的字段与User的属性名完全一致时,查询结果会自动映射为pojo对象,且每个属性都会有值,如下:

  这里写图片描述


  2、查询出来的列名与pojo中的属性名部分一致,查询结果会自动映射为pojo对象,且部分属性会有值;

  映射文件:

<select id="findUserById" parameterType="int"
        resultType="com.danny.mybatis.po.User">
    select id,username as name,sex as,birthday as birthdate,address from user where id=#{value}
</select>

  这里写图片描述


  3、查询出来的列名与pojo中的属性名完全不一致,则不会创建对象,结果为null;

<select id="findUserById" parameterType="int"
        resultType="com.danny.mybatis.po.User">
        select id as number,username as name,sex as s,birthday as birthdate,address as addr from user where id=#{value}
    </select>

  这时,输出的user直接为null:

  这里写图片描述

  需要注意的是,当输出类型为pojo时,不管查询结果为单个pojo对象还是集合,resultType的属性值都写成pojo的类型。


  resultType还可以指定输出类型为Map,当指定输出类型为Map时,默认映射的结果集中列名为key值,查询到的数据为value。


resultMap


  上面resultType指定输出类型为pojo时,查询结果集的列名可能与pojo的字段不一致,因此可以使用resultMap为列名和pojo的字段之间作一个映射关系。

  比如上面的第2中情况,用resultType指定输出类型为pojo时,查询出来的列名与pojo中的属性名部分一致,查询结果会自动映射为pojo对象,但只有部分属性会有值。可以利用resultMap为其余不对应的列名与字段建立映射关系,使最终查询到的每列的值都可以一 一对应到pojo对象中。

  映射文件:

<!--定义User的resultMap-->
<resultMap type="com.danny.mybatis.po.User" id="userResultMap">
        <id column="name" property="username"/>
        <id column="birthdate" property="birthday"/>
</resultMap>

<!--User查询语句--> 
<select id="findUserById" parameterType="int" resultMap="userResultMap">
        select id,username as name,sex,birthday as birthdate,address from user where id=#{value}
</select>

  如上,在<select></select>的同级添加<resultMap></resultMap>标签,为两个不对应的属性配置映射关系。

  配置后,查询结果如下:

  这里写图片描述


总结


  使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。

  如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。



【 转载请注明出处——胡玉洋《【MyBatis框架点滴】——MyBatis输出映射》

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【MyBatis框架点滴】——MyBatis输入映射

在MyBatis的映射文件中,通过parameterType指定输入数据的类型,输入类型可以是简单类型如Integer、HashMap、pojo包装类等。 输入类型为简单类型时 /** * 根据...

MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql

前面对MyBatis框架的学习中,我们对Mapper.xml映射文件多少有些了解。本文将对Mapper.xml映射文件作更加细致的梳理,首先从Mapper.xml文件中的输入和输出映射开始。本文案例代...

SSM框架学习之(四)Mybatis——高级映射(多表查询)

SSM框架学习之(四)Mybatis——高级映射(多表查询)使用resultType查询需求:查询订单表和用户表的信息对应sql语句:SELECT orders.*, USER.userna...

【MyBatis框架点滴】——MyBatis一级缓存

跟Hibernate一样,MyBatis提供了缓存查询(一级缓存和二级缓存)的功能,用于提高数据库性能,减轻数据库压力。 一级缓存是SqlSession级别的缓存。在我们利用MyBatis操作数据库时...

【MyBatis框架点滴】——MyBatis多对多查询

上篇文章说了MyBatis中的一对多的查询方法,这里总结一下MyBatis中多对多的查询。  业务还用上篇文章中的订单业务来分析,表结构如下:      一个用户可以购买多种商品,一种商品也可以由多个...

【MyBatis框架点滴】——MyBatis开发DAO的两种方法:原始DAO开发方法和Mapper代理方法

MyBatis常用的开发DAO的方式有两种,第一种就是常用的原始DAO的开发方法,第二种就是Mapper代理的方法。 原始DAO开发方法 原始DAO开发方法就是之前文章《【MyBatis框架点滴】...

【MyBatis框架点滴】——mybatis插入数据返回主键(mysql、oracle)

向数据库中插入数据时,大多数情况都会使用自增列或者UUID做为主键。主键的值都是插入之前无法知道的,但很多情况下我们在插入数据后需要使用刚刚插入数据的主键,比如向两张关联表A、B中插入数据(A的主键是...

【MyBatis框架点滴】——MyBatis二级缓存

在上篇文章的那张图上稍作修改,就可以很明了的看出来什么是二级缓存,它和一级缓存的区别是什么:    一级缓存是SqlSession级别的缓存,二级缓存则是Mapper级别的缓存,这里的Mapper可以...

【MyBatis框架点滴】——MyBatis延迟加载

什么是延迟加载?  延迟加载(lazy load)是(也称为懒加载)Hibernate3关联关系对象默认的加载方式,延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【MyBatis框架点滴】——MyBatis输出映射
举报原因:
原因补充:

(最多只允许输入30个字)