论坛首页 入门技术论坛

ibatis中的空值处理

浏览 3512 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-04-09   最后修改:2009-09-27

   今天碰到一个问题,那就是数据库的空值处理问题;其实这个问题也是老生常谈了,如果是在命令行里面打命令的话估计不会有什么问题;关键是现在的开发中到少不了用orm进行持久层的处理的了,具体原因在这里不在赘述;现在的开发中,我用的是ibatis;今天的问题是这样的把 一个对象的各个属性保存到为一条记录的字段,这问题才普通不过了;问题是如果属性是空的话怎么办了,想过把一个默认值赋予对象的属性,但感觉这样的思路非常的别扭,一个方面是由于加大了不必要的工作量,二是数据库那端也比较难管理;为了健忘,整理如下:

 

<insert id="saveMpsOperatorAuthority">
        insert into mps_OperatorAuthority (infoId,companyId,localId,operatorId)
        values (mps_OperatorAuthority_seq.nextVal,#companyId:NUMERIC#,#localId:VARCHAR# ,#operatorId#)
    </insert>

 

以上的配置的意思就是如果插入对象的companyId属性为null,则把numberic类型的默认值插入数据库,localid属性做同样的处理;需要留意的是 一定要写成NUMERIC 不能写成NUMBER(如果是日期类型,精确到秒的则用TIMESTAMP) ,否则插入时候就会有异常,今天为这个问题搞了好几个小时 ,先顶了;

 

同样的道理,如果要把数据库中的记录影射成对象的各个属性也面临着同样的问题,那 就是如果数据库中该字段为空则对象属性作何处理,具体如下:

 

<resultMap id="result"
        class="com.skywin.mps.model.MpsOperatorAuthority">
        <result property="infoId" column="infoId" columnIndex="1" />
        <result property="companyId" column="companyId" columnIndex="2" jdbcType="NUMERIC" />
        <result property="localId" column="localId" columnIndex="3" jdbcType="VARCHAR"/>
        <result property="operatorId" column="operatorId" columnIndex="4" jdbcType="VARCHAR" />

    </resultMap>

 

这里的jdbcType="NUMERIC"中的NUMERIC和NUMBER可以互换,也就是两者中写哪一个都可以,为了这个问题弄了半天真是郁闷,不过到头来还是很High;

 

   发表时间:2009-04-09  
  这个好像在ibatis的文档里有说明。numberic,varchar都是数据库里面的数据类型,如果对应javavbean的属性为null,可以通过设定相应属性的jdbctype,如果不设定,将会出现异常。
0 请登录后投票
   发表时间:2009-04-15  
业务问题,刻意的去避免这种错误,测试的时候都不知道是谁的错。
0 请登录后投票
   发表时间:2009-04-15  
gongjiyun 写道
业务问题,刻意的去避免这种错误,测试的时候都不知道是谁的错。

配置文件的写法问题,ibatis的配置问题是业务问题?我真不知道你是怎么理解这个问题的了 !!!!!!!!!!!!!
0 请登录后投票
   发表时间:2009-04-16  
qinjingkai 写道
gongjiyun 写道
业务问题,刻意的去避免这种错误,测试的时候都不知道是谁的错。

配置文件的写法问题,ibatis的配置问题是业务问题?我真不知道你是怎么理解这个问题的了 !!!!!!!!!!!!!

对不起,我不该看你的帖子,更不该写东西。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics