在写代码时发现前后端传递的Book对象的属性:id一直为空,导致根据Book.id进行的curd业务实现失败,检查了dao、service、servlet代码都没有异常,设想也许是在查询获取数据库中Book数据的相关代码有问题,检查了一下对应的JDBC代码都没有发现问题,于是只能通过调试dao层代码寻找问题来源
在调试QueryRunner.query方法时,发现底层的反射代码在BeanProcessor类中,通过别人的文章浅学了BeanProcessor类:DBUtils学习----BeanProcessor类,最终将问题定位在了BeanProcessor类的callSetter方法上,回过头检查了Book.java的代码发现原来漏写了setId()
方法,补充此方法后前后端传递Book.id便得以实现。
总结:Bean中要有无参构造器,且Bean中每个属性都要有规范命名的set方法,因为BeanProcessor类的方法会通过反射调用Bean的无参构造器,以及根据query方法得到的resultset对象中的column找到Bean中对应的属性,通过反射调用属性的set方法从而将resultset的每一行数据封装为实例。