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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/51553225

  上文说到,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输出映射》】

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程坑太多

Mybatis入门到精通

891
来自专栏chenssy

【死磕Sharding-jdbc】---group by结果合并(2)

在sharding-jdbc源码之group by结果合并(1)中主要分析了sharding-jdbc如何在GroupByStreamResultSetMerg...

1002
来自专栏JMCui

Hybris IMPEX

1、Impex是基于java Model的一种面向对象的数据操作手段,因此写impex代码前需要理清java Model之间的依赖关系。 2、基本语法:mode...

3796
来自专栏Danny的专栏

未经处理的异常在 System.Data.dll 中发生。其他信息:在应使用条件的上下文(在 '***' 附近)中指定了非布尔类型的表达式。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

2042
来自专栏钟绍威的专栏

递归思想解决输出目录下的全部文件

刚刚了解了下递归思想 递归就是在方法内调用本方法 下面说一个实际的应用 输出目录下的全部文件,当目录中还有目录时,则进入目录输出里面的文件 import j...

1947
来自专栏陈树义

5.Redis常用命令:Hash

  我们可以将Redis中的Hashes类型看成具有String Key和String Value的map容器。所以该类型非常适合于存储值对象的信息。如User...

3807
来自专栏me的随笔

Redis中的数据结构与常用命令

对于Redis的介绍这里只写一句:Redis是一种基于内存的高性能非关系型数据库,它以kye-value的形式来存储数据。

1893
来自专栏Java帮帮-微信公众号-技术文章全总结

【数据库】MySQL进阶七、limit用法& varchar类型排序

【数据库】MySQL进阶七、 limit用法与varchar排序 limit用法 limit是mysql的语法 select * from table limi...

3496
来自专栏Django Scrapy

day3 sql语句

sqlplus / as sysdba startup sqlplus scott/tiger vi .bash_profile 容宽不够 set lines ...

3109
来自专栏AhDung

【SQL】小心字符串拼接导致长度爆表

别想当然以为它会返回8002,而是8000,select @max也只会得到8000个a,后面两个b没了。我们知道,varchar(max)类型不受字符数限制,...

1633

扫码关注云+社区

领取腾讯云代金券