遇到标准的字段(实体类的驼峰模式和数据库中的下划线模式), 则需要用到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
1522

被折叠的 条评论
为什么被折叠?



