[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);
    }   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值