mybatis - resultMap

resultMap有比较强大的自动映射,下面是摘自mybatis中文官网的的片段:

当自动映射查询结果时,MyBatis会获取sql返回的列名并在java类中查找相同名字的属性(忽略大小写)。 这意味着如果Mybatis发现了ID列和id属性,Mybatis会将ID的值赋给id。

通常数据库列使用大写单词命名,单词间用下划线分隔;而java属性一般遵循驼峰命名法。 为了在这两种命名方式之间启用自动映射,需要将 mapUnderscoreToCamelCase设置为true。

自动映射甚至在特定的result map下也能工作。在这种情况下,对于每一个result map,所有的ResultSet提供的列, 如果没有被手工映射,则将被自动映射。自动映射处理完毕后手工映射才会被处理。

下面在hello mybatis基础上,加入resultMap

1、PersonMapper.xml中加入resultMap,加一个select语句:select * from person

resultMap没做手动映射,所以按上面说的,mybatis会做自动映射

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="model.PersonMapper">
    <select id="queryPersonById" parameterType="int" resultType="Person"
            useCache="false">
        <![CDATA[
        select * from person where id = #{id}
        ]]>
    </select>

    <resultMap id="personListMap" type="Person">
    </resultMap>
    <select id="queryPerson" resultMap="personListMap">
        select * from person
    </select>
</mapper>

2、Person.java加个toString方法

    @Override
    public String toString(){
        return id + " : " +
                name +  " : " +
                passWord +  " : " +
                sex +  " : " +
                email;
    }

3、PersonTest.java的main方法中加入下面语句

 List<Person> personList = session.selectList("model.PersonMapper.queryPerson");
 for (Person p : personList){
     System.out.println(p.toString());
  }

4、运行测试方法,即可打印出person表里的所有记录

1 : danny2 : pwd : m : [email protected]
2 : danny2 : pwd : m : [email protected]
3 : danny1 : pwd : m : [email protected]
4 : danny2 : pwd : m : [email protected]
5 : danny3 : pwd : m : [email protected]
6 : danny4 : pwd : m : [email protected]
7 : danny5 : pwd : m : [email protected]
8 : danny6 : pwd : m : [email protected]
9 : danny7 : pwd : m : [email protected]
10 : danny8 : pwd : m : [email protected]
11 : danny9 : pwd : m : [email protected]
12 : danny10 : pwd : m : [email protected]

时间: 2024-08-07 09:46:41

mybatis - resultMap的相关文章

hao947 : Mybatis resultMap配置插入和主键自增返回 : 好947

映射配置文件  好947  <!-- type:映射实体类的数据类型 id:resultMap的唯一标识 -->  <resultMap type="person" id="BaseResultMap">   <!-- column:库表的字段名 property:实体类里的属性名 -->   <id column="person_id" property="personId" /&g

mybatis resultmap标签type属性什么意思

mybatis resultmap标签type属性什么意思? :就表示被转换的对象啊,被转换成object的类型啊 <resultMap id="BaseResultMap" type="BaseObject"> <id property="id" column="id" /> <result property="appId" column="appid"

Mybatis resultMap空值映射问题

参考博客:https://www.oschina.net/question/1032714_224673 http://stackoverflow.com/questions/22852383/how-to-change-valuenull-to-empty-string-from-query-when-using-mybatis Mybatis在使用resultMap来映射查询结果中的列,如果查询结果中包含空值的列(不是null),则Mybatis在映射的时候,不会映射这个字段,例如 查询 n

Mybatis resultMap空值映射问题解决

Mybatis在使用resultMap来映射查询结果中的列,如果查询结果中包含空值的列(不是null),则Mybatis在映射的时候,不会映射这个字段,例如 查询 name,sex,age,数据库中的age字段没有值,Mybatis返回的map中只映射了 name和sex字段,而age字段则没有包含. 网上找到两种解决办法: 一.使用Mybatis config配置 创建configuration.xml <?xml version="1.0" encoding="UT

Mybatis ResultMap复合映射使用以及源码分析

我们知道在mybatis中可以针对一列值作为入参进行嵌套查询,那么如果入参为多个时该如何处理呢? mybatis支持复合映射,下面通过示例代码看看复合映射的使用 <resultMap id="postLiteMap2NestedWithSelect" type="org.apache.ibatis.domain.blog.BlogLite"> <id column="blog_id" property="id"

Mybatis resultMap经验

Mybatis中的resultMap使用经验: 先来看一个官方的例子: <resultMap id="detailedBlogResultMap" type="Blog">  <constructor>    <idArg column="blog_id" javaType="int"/>  </constructor>  <result property="ti

mybatis ResultMap详解

前言 MyBatis是基于"数据库结构不可控"的思想建立的,也就是我们希望数据库遵循第三范式或BCNF,但实际事与愿违,那么结果集映射就是MyBatis为我们提供这种理想与现实间转换的手段了,而resultMap就是结果集映射的配置标签了. 在深入ResultMap标签前,我们需要了解从SQL查询结果集到JavaBean或POJO实体的过程. 从SQL查询结果到领域模型实体 通过JDBC查询得到ResultSet对象 遍历ResultSet对象并将每行数据暂存到HashMap实例中,以

Mybatis ResultMap多表映射DTO

解决问题:n+1问题,之前我的习惯是拿到单表里面的数据,然后遍历,再拿到一个与其他表对应的逻辑上的外键,然后for循环去查找其他表的数据(原因是数据量小,没有在意,还有主要是不想建外键,你知道的,外键是很麻烦的,虽然有利于查询,但是增删改确实很让人头疼),这样做也能达到效果,但是效率低,访问数据库的次数也太多了,假设我查询出了1000条数据,我要用他里面的逻辑外键去查找其他表1000次,就意味着访问数据1000次,这样做还会遇到一些问题,若当前的逻辑外键查找在对应的表里面没有数据,就会抛出异常,

Mybatis ResultMap 和 resultType 区别

一.概述MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在.在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值.①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resu