ibatis的joda相关的TypeHandler
程序员文章站
2022-07-15 14:52:56
...
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>