在上一篇的入门示例:
https://blog.youkuaiyun.com/codingToMaster/article/details/104219287
打印结果是:blog is:Blog(id=1, title=My Colourful Garden, authorId=0, state=ACTIVE, featured=true, style=pink)
我们发现打印结果中authorId=0,并不是数据库中的结果??????
原因就是:Bolg实体类中的属性名是:authorId。但是数据库的列名中是:author_id。
实体类属性名和数据库列名不一致?????怎么处理呢?????
有两种处理办法:
第一种:在sql语句中使用别名
<!--针对属性名和列名不一致的情况,第一种解决办法-->
<select id="selectBlog1" resultType="Blog">
select
id,
title,
author_id as authorId,
state,
featured,
style
from blog
where id = #{id}
</select>
在mapper中增加接口:
Blog selectBlog1(Integer id);
编写测试用例:
@Test
public void testSelectBlog1() {
SqlSession sqlSession = MyBatisUtil.getSqlSession();
BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog1(1);
sqlSession.close();
logger.info("blog is:{}", blog);
}
运行结果:
第二中解决办法:使用resultMap
<resultMap id="blogResultMap" type="Blog">
<id column="id" property="id"></id>
<result column="author_id" property="authorId"></result>
</resultMap>
<select id="selectBlog2" resultType="Blog" resultMap="blogResultMap">
select * from Blog where id = #{id}
</select>
添加接口:
Blog selectBlog2(Integer id);
添加测试用例:
@Test
public void testSelectBlog2() {
SqlSession sqlSession = MyBatisUtil.getSqlSession();
BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog2(1);
sqlSession.close();
logger.info("blog is:{}", blog);
}
运行结果: