`
seavers
  • 浏览: 173220 次
  • 来自: ...
社区版块
存档分类
最新评论

ibatis typehandler

    博客分类:
  • java
阅读更多
今天配置typehandler时碰到一个问题

主要解决的问题是
java.sql.SQLException: Cannot convert value '0000-00-00 00:00:00' from column 18 to TIMESTAMP

解决方案: 替换掉系统默认的 typehandler, 抛出异常时,改为null


<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE sqlMapConfig
 PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
 "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
	<settings 
		cacheModelsEnabled="true" 
	/>
	<typeHandler javaType="java.util.Date" callback="xxxxxxxxx.CustomDateTypeHandler" />
	
	<sqlMap resource="sqlmap/sqlmap-price.xml" />	
</sqlMapConfig>




这里需要注意的是

1. typeHandler 中的 jdbcType 取值应为 null, DATE, TIME, 这里用的null
2. typehandler 必须要在 sqlmap 前面, 否则sqlmap中的类型handler就会用默认的


下面是自定义的datetypehandler

package xxxxxxxxx;

import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.ibatis.sqlmap.engine.type.DateTypeHandler;

public class CustomDateTypeHandler extends DateTypeHandler {


	@Override
	public Object getResult(ResultSet rs, String columnName) throws SQLException {
		try {
			return super.getResult(rs, columnName);
		} catch(SQLException e) {
			if("S1009".equals(e.getSQLState())) {
				return null;
			}
			throw e;
		}
	}

	@Override
	public Object getResult(ResultSet rs, int columnIndex) throws SQLException {
		try {
			return super.getResult(rs, columnIndex);
		} catch(SQLException e) {
			if("S1009".equals(e.getSQLState())) {
				return null;
			}
			throw e;
		}
	}

	@Override
	public Object getResult(CallableStatement cs, int columnIndex) throws SQLException {
		try {
			return super.getResult(cs, columnIndex);
		} catch(SQLException e) {
			if("S1009".equals(e.getSQLState())) {
				return null;
			}
			throw e;
		}
	}

}




分享到:
评论

相关推荐

    使用iBatis的类型处理器TypeHandlerCallback

    4. 使用`@TypeHandler`注解:对于实体类的属性,可以直接在字段上使用`@TypeHandler`注解指定对应的类型处理器。 通过深入理解和灵活运用`TypeHandlerCallback`,开发者可以更好地控制数据在Java应用和数据库之间的...

    ibatis源码

    Ibatis提供了一系列内置的TypeHandler,如StringTypeHandler、DateTypeHandler等,同时允许自定义TypeHandler以处理特殊类型。 6. **Mapper接口和映射文件**:Mapper接口定义了数据库操作的方法,而映射文件则包含...

    Mybatis中自定义TypeHandler处理枚举详解

    `CustomDisplayedEnumTypeHandler` 类需要实现`org.apache.ibatis.type.TypeHandler`接口,覆盖`setParameter`和`getResult`方法,以处理枚举值到数据库字段以及字段到枚举值的转换。 通过这种方式,我们不仅可以...

    ibatis自定义数据类型在不支持中文的数据库存储汉字

    总结来说,`iBatis`的自定义数据类型机制允许我们在不支持中文的数据库中存储汉字,通过编写自定义的TypeHandler,我们可以灵活地将中文字符串转换为数据库可以接受的格式,然后在读取时恢复原状。这种方式在无法...

    ibatis开发包(common+sqlmap+dao)

    例如,`org.apache.ibatis.type.TypeHandler`接口定义了如何在Java对象和数据库字段之间进行转换的逻辑,这对于处理复杂的数据类型尤其有用。 2. **ibatis-sqlmap-2.jar**: 这是Ibatis的核心组件,实现了SQL映射...

    最新的ibatis 3.0(包含源码)

    7. **TypeHandler**:Ibatis的TypeHandler机制用于处理Java类型与数据库类型的转换,3.0版本对TypeHandler进行了优化,扩展性更强。 8. **插件支持**:Ibatis 3.0引入了插件机制,允许用户在运行时拦截SqlSession、...

    ibatis.util包

    TypeHandler是Ibatis中处理Java类型和数据库类型之间转换的关键,`TypeHandlerRegistry`可以根据Java类型或JDBC类型找到对应的TypeHandler。 8. **Plugins**: 插件机制是Ibatis的一大特色,`ibatis.util.Plugins`类...

    ibatis-common.jar包

    2. **TypeHandler**:TypeHandler是Ibatis处理Java类型和数据库类型之间转换的关键接口。每个数据库字段类型都可能对应一个TypeHandler,用于将Java对象转化为SQL语句中的参数,或者将查询结果转化为Java对象。例如...

    ibatis 支持枚举类型

    注册自定义的`TypeHandler`到Ibatis配置中是非常重要的一步。在`mybatis-config.xml`中添加以下配置: ```xml &lt;typeHandler handler="com.example.StatusTypeHandler" javaType="com.example.Status"/&gt; ``` ...

    ibatis相关的common,dao,sqlmap包

    Ibatis-common 包含了Ibatis框架的基础工具类和通用模块,提供了诸如类型处理器(TypeHandler)、结果映射(ResultMap)等核心功能。TypeHandler是Ibatis中用于处理Java类型与数据库类型的转换,确保数据在Java对象...

    iBATIS 框架简介

    6. **TypeHandler**和**DataExchange**:在参数映射过程中,TypeHandler负责Java类型到数据库类型的转换,DataExchange则完成参数值的复制。 7. **SqlMapSession的创建与释放**:SqlMapSession负责数据库连接的创建...

    ibatis配置

    Ibatis提供了一些预定义的TypeHandler,也可以自定义。 9. **事务管理**: Ibatis支持手动和自动两种事务管理模式。手动模式下,开发者需要自己控制事务的开启、提交和回滚;自动模式下,可以通过Spring等框架进行...

    从iBatis迁移到MyBatis

    8. **类型处理器**:MyBatis的TypeHandler接口提供了更丰富的类型转换,避免了在SQL语句中处理复杂数据类型时的困扰。 9. **缓存机制**:MyBatis提供了一级缓存和二级缓存,可以提高数据查询的效率。 10. **集成...

    iBatis.rar 开发文档

    此外,可能会讲解如何使用Executor执行器进行批量操作,以及如何利用TypeHandler处理自定义数据类型。 通过阅读这三份文档,你可以系统地学习到iBatis框架的各个方面,从基本的配置和使用,到高级的优化和扩展。...

    Ibatis jar

    此外,Ibatis还提供了TypeHandler机制,用于自定义Java类型与数据库类型的转换,解决一些特殊类型的数据处理问题。 与Hibernate相比,Ibatis的优势在于对SQL的直接控制,使得开发者可以充分利用SQL的功能,优化...

    ibatis基本架包

    4. **反射和类型处理**:Ibatis在处理对象与SQL映射时,会用到反射和类型处理机制,如TypeHandler接口,用于自定义类型转换。 5. **缓存支持**:Ibatis的本地缓存机制部分实现位于此包中,它可以提高数据读取速度,...

    ibatis的3个jar包.rar

    2. **ibatis-common-2.jar**:这个包提供了Ibatis框架的一系列通用工具和类,包括类型处理器(TypeHandler)用于处理Java类型与数据库类型的转换,以及ResultHandler结果集处理器,用于处理查询结果。此外,还包括了...

    ibatis2.3源码

    7. **TypeHandler**:类型处理器用于处理Java类型的转换,确保Java对象和数据库之间的数据类型匹配。 8. **插件机制**:iBATIS提供了一种插件机制,允许用户自定义拦截器来扩展其功能。 通过深入研究iBATIS 2.3的...

    ibatis 3 核心包

    8. **TypeHandler**:类型处理器是处理Java类型与JDBC类型之间转换的接口,例如将String转换为VARCHAR,Integer转换为INTEGER等。 9. **Mapper接口和Mapper XML文件**:在Ibatis 3中,推荐使用Mapper接口配合XML...

Global site tag (gtag.js) - Google Analytics