最新在学mybatis,数据库表中明明有数据,sql语句也正确但是在查询的时候一直是null,为此小事耗费我20分钟,实在值得记录。
首先请看我的customer实体类及其属性的定义:
public class Customer {
private Integer id;
private String name;
}
再看我的t_customer表中列属性的定义:
当他们如此不对应的时候,可怕的事就要发生了:在进行数据查询的时候, 一直是null。
这是作为菜鸟新手极其容易出的错误。下面我来解决一下这个问题
方法一:在数据查询的时候使用别名
方法二:修改t_customer表中customer_id为id,customer_name为name,这个不贴演示效果了。
方法三:使用resultMap自定义映射规则,再查询
<resultMap id="customerResult" type="Customer">
<id column="customer_id" property="id"></id>
<result column="customer_name" property="name"></result>
</resultMap>
解释原因:
其实无论是哪个方法他们的本质都在解决一件事情,将数据库中查询到的数据能正确与实体类中的属性进行匹配。而我们将数据库中数值赋值给实体类属性的过程中,用到了反射技术。通过反射赋值,那肯定只有根据实体类自己的属性才能通过反射属性为实体类赋值成功。
比如我们查到了t_customer表中的customer_id的值,用它能通过反射得到类Customer吗?当然不能,因为在这个实体类Customer里它叫id,不叫customer_id.所以我们必须让他们对应上才能赋值成功。
最后,其实我们并不是没有查到数据库的数据,而是没能将查到的数据正确赋值给实体类中的属性而已!