数据库表有内容,但是查询的结果数据为空,怎么回事?

本文讲述了在使用MyBatis查询数据库时遇到数据为null的问题,分析了原因并提供了三种解决方案:使用别名、修改表结构和resultMap自定义映射。核心在于确保数据库查询结果与实体类属性的对应性,利用反射技术进行赋值。
摘要由CSDN通过智能技术生成

最新在学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.所以我们必须让他们对应上才能赋值成功。

最后,其实我们并不是没有查到数据库的数据,而是没能将查到的数据正确赋值给实体类中的属性而已!

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值