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

初次接触iBATIS

阅读更多

初次使用iBATIS。
配置文件都生成好了,测试类也写好了,插入数据。
但是出现报错信息,
Exception in thread "main" com.ibatis.common.jdbc.exception.NestedSQLException: 
--- The error occurred in com/unmi/Person.xml.
--- The error occurred while applying a parameter map.
--- Check the insertPerson-InlineParameterMap.
--- Check the parameter mapping for the 'marketcode' property.
--- Cause: java.sql.SQLException: 无效的列类型
Caused by:java.sql.SQLException: 无效的列类型

在网上查个究竟,原来没有给此字段赋值,而配置文件中也没有配置好该字段为null该如何处理,所以报错。
网上处理的方法很多,但是我觉得下面这段写的很好。

 


以下文字摘自  http://blog.sina.com.cn/s/blog_520998920100b4d3.html

 

使用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',否则容易导致数据库的不一致.

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

 

 

分享到:
评论

相关推荐

    Manning iBATIS in Action

    《Manning iBATIS in Action》是一本专为Java开发者设计的...书中的内容丰富详实,适合初学者和有经验的开发者阅读,无论你是想要初次接触iBATIS,还是希望进一步提升你的iBATIS技能,这本书都将为你提供宝贵的指导。

    iBatis入门教程

    此教程主要面向初次接触iBatis的技术人员,帮助他们快速掌握iBatis的基本用法和核心概念。 #### 三、iBatis的核心功能 1. **SQL语句的编写**:允许开发者直接编写原生态的SQL语句,而不必通过复杂的API。 2. **...

    ibatis教程入门

    这个教程适合初次接触Ibatis的初学者,通过具体的例子来学习如何使用Ibatis进行数据操作。 首先,我们需要进行一些准备工作。确保你已经安装了Eclipse 3.0.1,这是用来编写和运行Java项目的集成开发环境。同时,JDK...

    ibatis_SqlMapConfig配置详解

    iBATIS 是一款知名的持久层框架,它将SQL与Java代码分离,提供了更灵活的数据访问方式。SqlMapConfig.xml是iBATIS的核心配置文件,它定义...对于初次接触iBATIS的人来说,深入理解这些配置项的含义和作用是必不可少的。

    iBATIS3 beta2 测试完整实例

    这个测试完整实例旨在帮助开发者更好地理解和运用iBATIS3的新特性,特别是对于那些正在从早期版本迁移或者初次接触iBATIS3的人来说。在本实例中,我们将会探讨如何使用iBATIS3与MySQL数据库进行交互,并通过`news....

    ibatis-2000数据库

    标题中的“ibatis-2000数据库”指的是使用iBATIS数据持久层框架与Microsoft SQL Server 2000数据库...对于熟悉iBATIS但初次接触SQL Server 2000,或者需要解决动态参数问题的开发者来说,这是一个非常有价值的资源。

    struts2_spring2.5_ibatis开发指南

    Struts2、Spring 2.5 和 iBATIS 是经典的Java Web开发框架组合,它们各自在应用程序架构的不同层面上发挥着关键作用。...对于初次接触这些框架或者想要深化理解的开发者来说,这是一个非常宝贵的资源集合。

    java软件开发——顶岗实习周记25篇.pdf

    首先,实习生接触到了一系列Java相关的框架和技术,包括Hibernate、Spring、iBATIS、jQuery、EXTJS、DWR和EasyUI等。这些技术分别在数据库操作、依赖注入、前端交互、UI设计和远程调用等方面发挥重要作用。Hibernate...

    spring2.5.6中文文档

    Spring框架是Java开发中不可或缺的一...对于那些已经熟悉Spring 2.0或者初次接触Spring框架的人来说,这份文档是一份宝贵的参考资料。通过学习,你可以更好地掌握Spring的精髓,从而在实际项目中发挥出它的强大能力。

Global site tag (gtag.js) - Google Analytics