[mybatis]ResultMap输出结果映射

为什么会有ResultMap?

    <!-- ResultMap : 在sql查询中,如果给查询结果的列名定义了别名, 在用resultType进行普通映射时,是无法给当前类属性赋值的, 由于列名的别名与类的属性名不一致,所以产生了ResultMap映射, 用来映射表的别名与类属性 -->

使用ResultMap,在mapper.xml中配置 :

<?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">
<!-- namespace : 命名空间为UserMapper接口的完全限定名 -->
<mapper namespace="mapper.UserMapper" >
    <!-- 定义ResultMap : 将SELECT id id_ , username username_ FROM USER 查询出来的列名和User类中的属性做一个映射 type: resultMap 最终映射成的Java类型, 可以使用总配置文件中xml定义的别名 id : 对resultMap的唯一标识 -->
    <resultMap type="user" id="userResultMap">
        <!-- id表示对id的唯一标识 : column : 查询出来的列名 property :指定pojo类中的属性名 -->
        <id column="id_" property="id" />
        <!-- result表示对普通列的映射关系 column : 查询出来的列名 property :指定pojo类中的属性名 -->
        <result column="username_" property="username" />
    </resultMap>
    <!-- 使用ResultMap进行输出映射 resultMap : 指定定义的resultMap的id, 如果这个resultMap在其他mapper文件被引用, 前面应加namespace命名空间, 例如:(resultMap="mapper.UserMapper.userResultMap") -->
    <select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap">
        SELECT id id_ , username username_ FROM USER WHERE ID=#{id}
    </select>
</mapper>

Mapper接口中的方法定义:

    //根据id查找用户,返回resultMap
    public User findUserByIdResultMap (int id) ;

方法测试 :

    //根据id查找用户,返回resultMap
    @Test
    public void testFindUserByIdResultMap (){
        //创建session
        SqlSession session = sessionFactory.openSession();
        //通过session获取mapper代理
        UserMapper mapper = session.getMapper(UserMapper.class);
        //调用代理接口中的方法
        User user = mapper.findUserByIdResultMap(3);
        //输出user
        System.out.println(user);
    }   

你可能感兴趣的:(spring,Hibernate,mysql,mybatis,javaweb)