概述
今天处理一个生产环境报NullPointerException的问题,根据查询的对象,获得对象中的一个字段,结果为空。
报错位置:int partnerCode = servicefeeRecord.getPartnerCode().intValue();
(注:本身这直接取字段不判断是否为空,就获得它的int值。写法本身就有点问题,虽然业务上这个字段一定存在。)
定位问题步骤:
1、查看生产数据库,对象对应的数据改字段是有值的。
为啥没查出来?继续找问题。
2、从源头定位起,从查询对象的service方法,找到dao方法,再找到mapper文件里面的查询sql。
sql查询字段中并没有包括需要的字段。
原来问题在此,那怎么会有这个坑呢?
3、根据最近了解的其他人做相关需求的变动,原来在于有同事做需求拓展时,只在数据库表增加该字段、在实体bean增加该字段,mapper文件中的sql查询,没有增加改字段导致。
总结:
1、原本很简单的问题,却花费大半个小时来处理问题,以及帮别人填坑,实属无奈。
2、开发人员工作的严谨性,相当重要,如果考虑不全,不单单影响到自己,甚至影响到其他人。
3、基于Mybatis的应用:数据库表增加一个字段,还要改哪些地方?
a、写sql脚本修改表结构
b、实体bean增加对象
c、mapper中所有涉及查询整个对象字段的sql,都需一一添加对应的新增字段
d、mapper配置中涉及整个对象的查询尽量采用以下方式:
<sql id="queryColumns">
Column1,Column2,Column3,....
</sql>
<select id="查询方法名称" resultMap="返回结果对象">
SELECT
<include refid="queryColumns" />
FROM
...
</select>
这样很多类似查询,都是引用queryColumns,到时只需改一个地方即可。
最后
以上就是斯文冬天为你收集整理的基于Mybatis的应用:数据库表增加一个字段,还要改哪些地方的全部内容,希望文章能够帮你解决基于Mybatis的应用:数据库表增加一个字段,还要改哪些地方所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复