MyBatis框架之resultMap详解

遇到标准的字段(实体类的驼峰模式和数据库中的下划线模式), 则需要用到resultMap进行映射

举例:

使用上一个例子的情况下 将数据库中的字段更改, 此时查询出来的结果是:

Person [personId=null, name=lisi, gender=2, personAddr=null, birthday=Sat Sep 08 00:00:00 CST 2018]

因为数据库中的字段是person_id和person_addr

必须在PersonMapper.xml文件中配置resultMap映射:

<?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: 命名空间
 -->
<mapper namespace="com.rl.mapper.PersonMapper">

<resultMap type="com.rl.model1.Person" id="BaseResultMap">
    <id column="person_id" property="personId"/>
    <result column="name" property="name"/>
    <result column="gender" property="gender"/>
    <result column="person_addr" property="personAddr"/>
    <result column="birthday" property="birthday"/>
</resultMap>
<!-- 
    id: 唯一标识
    parameterType: 入参类型
    resultType: 返回值类型
 -->
    <select id="selectPersonById" parameterType="java.lang.Integer" resultMap="BaseResultMap">
        select * from person p where p.person_id = #{id}
    </select>
</mapper>

输出结果正常:

Person [personId=1, name=lisi, gender=2, personAddr=天津, birthday=Sat Sep 08 00:00:00 CST 2018]

在项目中尽可能使用resultMap, 但是特殊情况下可以使用resultType, 比如查询数据的条数:

<?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: 命名空间
 -->
<mapper namespace="com.rl.mapper.PersonMapper">

<!-- 
    type: 返回的数据类型
    id: 唯一标识
 -->
<resultMap type="com.rl.model1.Person" id="BaseResultMap">
<!-- 
    只有一个id, 其他都是result
    column: 数据库的列
    property: 实体类的字段
 -->
    <id column="person_id" property="personId"/>
    <result column="name" property="name"/>
    <result column="gender" property="gender"/>
    <result column="person_addr" property="personAddr"/>
    <result column="birthday" property="birthday"/>
</resultMap>
<!-- 
    id: 唯一标识
    parameterType: 入参类型
    resultType: 返回值类型
 -->
    <select id="selectPersonById" parameterType="java.lang.Integer" resultMap="BaseResultMap">
        select * from person p where p.person_id = #{id}
    </select>
    
    <!-- 
        返回不需要字段映射的则可以使用resultType
     -->
    <select id="selectPersonCount" resultType="java.lang.Integer">
        select count(*) from person
    </select>
</mapper>

测试类:

package com.rl.test;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import com.rl.model1.Person;

public class MyBatisTest1 {

    SqlSessionFactory sqlSessionFactory;
    
    @Before
    public void setUp() throws Exception {
        //加载配置文件
        InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
        //初始化
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
    }


    @Test
    public void test1() {
        //创建一个session
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            Integer count = sqlSession.selectOne("com.rl.mapper.PersonMapper.selectPersonCount");
            System.out.println(count);
        } finally{
            sqlSession.close();
        }
    }

}

结果是1

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值