今天温习Mybatis,由于想做点有难度的,故把项目中的一个数据dao拷贝出来,尝试利用MyBatis实现(原先是利用封装过的Hibernate实现)。但是没想到进行第一个最简单的get实体对象就失败了,现象是:利用MyBatis取出的对象除了ID之外,其他属性都为空。
参照官方的参考文档,文档列出如下xml。
很不可思议,我写的SQL语句也是
后来就想:MyBatis是如何实现属性与列的对应的?查遍配置文件也没有发现有写这个对应关系。既然id有值是否是利用sql实现这个对应关系。
通过一个实验证实了我的想法。
MyBatis查询出的对象colum1属性就已经有了值。
总结:select * from tb_xxx 的查询必须有一个前提:数据库列名必须与实体对象属性名相同,否则就会造成名字与列不相同的属性值为null。
这个时候需要select 列名 as 属性名 from table。
参照官方的参考文档,文档列出如下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">
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="selectBlog" parameterType="int" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
很不可思议,我写的SQL语句也是
select * from tb_xxx where id = #{id}
后来就想:MyBatis是如何实现属性与列的对应的?查遍配置文件也没有发现有写这个对应关系。既然id有值是否是利用sql实现这个对应关系。
通过一个实验证实了我的想法。
select id,colum1 as property1 from tb_xxx where id = #{id}
MyBatis查询出的对象colum1属性就已经有了值。
总结:select * from tb_xxx 的查询必须有一个前提:数据库列名必须与实体对象属性名相同,否则就会造成名字与列不相同的属性值为null。
这个时候需要select 列名 as 属性名 from table。