欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ibatis的joda相关的TypeHandler

程序员文章站 2022-05-10 12:37:41
...
ibatis默认的没有提供joda DateTime的typeHandler,自己写一个。

import java.sql.SQLException;

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

import com.ibatis.sqlmap.client.extensions.ParameterSetter;
import com.ibatis.sqlmap.client.extensions.ResultGetter;
import com.ibatis.sqlmap.client.extensions.TypeHandlerCallback;

/**
 * jdbcType: "DATETIME" <-> javaType: "org.joda.time.DateTime"
 * 
 * @author 应卓
 * 
 */
public class DateTimeTypeHandlerCallback implements TypeHandlerCallback {

	private static DateTimeFormatter FORMAT = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");

	public Object getResult(ResultGetter getter) throws SQLException {
		DateTime date = new DateTime(getter.getTimestamp());
		return date;
	}

	public void setParameter(ParameterSetter setter, Object obj) throws SQLException {
		if (obj instanceof DateTime) {
			DateTime date = (DateTime) obj;
			setter.setString(date.toString(FORMAT));
//			setter.setTimestamp(new Timestamp(date.getMillis()));
		} else {
			throw new IllegalArgumentException("Illegal Date object");
		}
	}

	public Object valueOf(String string) {
		DateTime date = FORMAT.parseDateTime(string);
		return date;
	}
}

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>

	<settings
		cacheModelsEnabled="true"
		enhancementEnabled="true"
		lazyLoadingEnabled="false"
		errorTracingEnabled="true"
		maxRequests="32"
		maxSessions="10"
		maxTransactions="5"
		useStatementNamespaces="true" />
	
	<typeHandler javaType="org.joda.time.DateTime" callback="x.y.z.DateTimeTypeHandlerCallback"/>
</sqlMapConfig>