`
zhanghteye
  • 浏览: 49205 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

基于Mybatis的应用:数据库表增加一个字段,还要改哪些地方

阅读更多

今天处理一个生产环境报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,到时只需改一个地方即可。

 

       

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics