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 : danny.yao@13.com
2 : danny2 : pwd : m : danny.yao@13.com
3 : danny1 : pwd : m : danny.yao@13.com
4 : danny2 : pwd : m : danny.yao@13.com
5 : danny3 : pwd : m : danny.yao@13.com
6 : danny4 : pwd : m : danny.yao@13.com
7 : danny5 : pwd : m : danny.yao@13.com
8 : danny6 : pwd : m : danny.yao@13.com
9 : danny7 : pwd : m : danny.yao@13.com
10 : danny8 : pwd : m : danny.yao@13.com
11 : danny9 : pwd : m : danny.yao@13.com
12 : danny10 : pwd : m : danny.yao@13.com

posted on 2016-12-31 14:03  蛋尼  阅读(391)  评论(0编辑  收藏  举报