`
hzwowo
  • 浏览: 21469 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

ibatis

    博客分类:
  • web
阅读更多

Ibatis 关于空值(NULL)的解决方案

 

 

<script> var $tag='it'; var $tag_code='5a44c1e4ca6eb96cc222ab5e37974c4b'; var $r_quote_bligid='520998920100b4d3'; </script>标签:

it

分类: Ibatis

使用Ibatis作为数据 库持久层的人都有体会,Ibatis 对NULL值的处理并不优雅.本文讨论常见的NULL值处理方案.jdbcType 应该是java.sql.Types 中所列举的类型中的一种.

1.String为NULL的处理 :拿SQL Server 来说,其中与String对应的类型有很多种,如VARCHAR,NVARCHAR,TEXT...如果存入数据库中的值有可能为NULL的时候,我们只 要在插入或者更新的时候指定它的类型为VARCHAR,或者LONGVARCHAR,对应TEXT类型, (注意不能为NVARCHAR,和LONGNVARCHAR): 如下

<update id="update">
   UPDATE [ArtT_user]
   SET [ArtT_sUserName] = #userName#
      ,[ArtT_sUserPwd] = #password#
      ,[ArtT_sUserEmail] = #userEmail:VARCHAR#
      ,[ArtT_sUserDescription] = #description:LONGVARCHAR#
     WHERE [ArtT_iUserId] = #userId#
  </update>

如果属性userEmail,description为空时,Ibatis把NULL存入数据库.

数据库取出值为NULL,对应的属性为String类型的时候,无需作特别处理,Ibatis会把相应属性设置为空.

2.date ,datetime的处理: 与String的处理相类似,插入或者更新数据时,应该指定日期的类型,DATE 或者TIMESTAMP,如下:

 <update id="update">
   UPDATE [ArtT_user]
   SET [ArtT_sUserName] = #userName#
      ,[ArtT_sUserPwd] = #password#
      ,[ArtT_dLastLoginTime] = #lastLoginTime:TIMESTAMP#
      ,[ArtT_sCreateDate] = #createDate:DATE#
 WHERE [ArtT_iUserId] = #userId#
  </update>

同时,从数据库中取出值时,在resultMap中也应该指定明确的类型,DATE 或者DATETIME,如下:

<result property="lastLoginTime"column="ArtT_dLastLoginTime" columnIndex="12"jdbcType="TIMESTAMP"/ >
<result property="createDate" column="ArtT_sCreateDate" columnIndex="13" jdbcType="DATE"/ >

3.int,double,float的处理 :根据Ibatis 官方文档介绍,因为在javaBean中如果属性为int ,double, float 时,不允许设置为NULL,可以采用一个"神奇数字"来代替属性中的NULL,如-9999.

数据存入数据库时,当检测到属性值为-9999时,Ibatis把空值存入数据库中.

数据从数据库中取出时,当数据库中该字段为NULL时,Ibatis给javaBean中的属性赋值为-9999.

因此,在XML映射文件中,应该同时存入取 出 处指定nullValue='-9999',否则容易导致数据库的不一致.

这种做法虽然保证了数据库的一致性,但对程序来说并不雅观,在程序中如果要判断该属性是否为空,只要 判断它是否等于"神奇数字",不得已而为之.

分享到:
评论

相关推荐

    iBATIS-DAO-2.3.4.726.rar_com.ibatis.dao_iBATIS dao 2_iBatis DAO_

    iBATIS DAO是Java开发中的一个持久层框架,它提供了数据访问对象(DAO)的实现,使得数据库操作更加简单和灵活。在这个2.3.4.726版本的源码中,我们可以深入理解iBATIS DAO的工作原理,并通过添加注释来帮助我们更好...

    ibatis jar包下载

    Ibatis,全称为MyBatis,是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Ibatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Ibatis可以使用简单的XML或注解进行配置和原始映射,将...

    ibatis-2.3.4.726.jar,ibatis-2.3.0.677.jar,ibatis-2.3.3.720.jar下载

    这里提到的是iBATIS的三个不同版本的jar包:ibatis-2.3.4.726.jar、ibatis-2.3.0.677.jar以及ibatis-2.3.3.720.jar。 首先,让我们深入了解iBATIS的核心概念和功能: 1. **SQL Map配置**:iBATIS的核心是SQL Map...

    Spring与iBATIS的集成

    Spring与iBATIS的集成 iBATIS似乎已远离众说纷纭的OR框架之列,通常人们对非常流行的Hibernate情有独钟。但正如Spring A Developer's Notebook作者Bruce Tate 和Justin Gehtland所说的那样,与其他的OR框架相比...

    ibatis总结 ibatis ibatis ibatis ibatis

    Ibatis 是一款轻量级的Java持久层框架,它允许开发者将SQL语句与Java代码分离,从而使得数据库访问更加灵活、易于维护。本篇文章将深入探讨Ibatis的核心概念、最佳实践以及与其他框架如Struts和Spring的整合。 1. ...

    iBATIS2.3.4 jar包及源码

    iBATIS 是一款著名的开源Java持久层框架,它在2005年由Clinton Begin创建,最初命名为Apache MyBatis,后来发展为独立的项目。在本主题中,我们关注的是iBATIS 2.3.4版本的jar包及其源码。 首先,`ibatis-2.3.4.jar...

Global site tag (gtag.js) - Google Analytics