【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包装类等。 输入类型为简单类型时 /** * 根据...
  • huyuyang6688
  • huyuyang6688
  • 2016年05月31日 23:08
  • 580

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

本文主要讲解mybatis的输出映射。
  • h3243212
  • h3243212
  • 2016年02月29日 14:41
  • 2882

Mybatis 输入和输出映射

在mybatis中,我们常常需要通过输入和输出映射来指定输入和输出的类型。 输入映射: 在mapper的statement中,我们通过parameterType指定输入参数的类型,类型可以是简单类...
  • little_nai
  • little_nai
  • 2016年11月30日 15:46
  • 1005

详解Java的MyBatis框架中SQL语句映射部分的编写

这篇文章主要介绍了Java的MyBatis框架中SQL语句映射部分的编写,文中分为resultMap和增删查改实现两个部分来讲解,需要的朋友可以参考下 1.resultMap SQL 映射XML ...
  • a1258531
  • a1258531
  • 2016年06月06日 15:59
  • 2646

【MyBatis学习06】输入映射和输出映射

在前面几篇博文的例子中也可以看到mybatis中输入映射和输出映射的身影,但是没有系统的总结一下,这篇博客主要对这两个东东做一个总结。我们知道mybatis中输入映射和输出映射可以是基本数据类型、ha...
  • eson_15
  • eson_15
  • 2016年06月12日 21:49
  • 7225

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

跟Hibernate一样,MyBatis提供了缓存查询(一级缓存和二级缓存)的功能,用于提高数据库性能,减轻数据库压力。 一级缓存是SqlSession级别的缓存。在我们利用MyBatis操作数据库时...
  • huyuyang6688
  • huyuyang6688
  • 2016年06月27日 19:47
  • 734

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

在上篇文章的那张图上稍作修改,就可以很明了的看出来什么是二级缓存,它和一级缓存的区别是什么:    一级缓存是SqlSession级别的缓存,二级缓存则是Mapper级别的缓存,这里的Mapper可以...
  • huyuyang6688
  • huyuyang6688
  • 2016年06月27日 22:20
  • 561

【MyBatis】输入映射和输出映射

在mybatis中,我们需要通过输入和输出映射来指定输入(参数)和输出(返回值)的类型。 【输入映射】 在mapper的statement中,我们通过parameterType指定输入参数的类型,类型...
  • u013036274
  • u013036274
  • 2017年02月21日 08:20
  • 317

MyBatis框架搭建及增删改查操作

一.搭建好myBatis的环境   1.引入jar包     (1).mybatis-3.2.7jar核心jar     (2).mysql核心jar     (3).junit-4.9.ja...
  • u013045552
  • u013045552
  • 2016年09月21日 20:36
  • 986

【mybatis深度历险系列】mybatis中的输入映射和输出映射

在前面的博文中,小编介绍了mybatis的框架原理以及入门程序,还有mybatis中开发到的两种方法,原始开发dao的方法和mapper代理方法,今天博文,我们来继续学习mybatis中的相关知识,随...
  • u010850027
  • u010850027
  • 2016年08月13日 00:00
  • 1628
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【MyBatis框架点滴】——MyBatis输出映射
举报原因:
原因补充:

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