Impostare un “Type Handler” per MyBatis per tipi di dato personalizzati
In questa ultima puntata di MyBatis, vedremo come impostare un Type Handler per tipi personalizzati. Supponiamo di avere una tabella con un campo Date e di doverlo mappare in un GregorianCalendar: come fare?
MyBatis consente l’impostazione di un Type Handler nel quale mappare qualunque tipo di dato tra SQL e Java. Vediamo come.
Nel configuration.xml, bisogna impostare l’Handler, così:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties resource="com/toastedtech/mybatis/conf/db.properties" /> <typeAliases> <typeAlias type="com.toastedtech.mybatis.dto.ContattoDTO" alias="contatto" /> </typeAliases> <typeHandlers> <typeHandler javaType="java.util.GregorianCalendar" handler="com.toastedtech.mybatis.util.GregorianCalendarTypeHandler" /> </typeHandlers> <mappers> <mapper resource="com/toastedtech/mybatis/conf/ContattoMapper.xml" /> </mappers> </configuration>
Viene così definita la classe GregorianCalendarTypeHandler, che sarà così strutturata:
package com.toastedtech.mybatis.util;
import java.sql.CallableStatement;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
public class GregorianCalendarTypeHandler implements TypeHandler {
@Override
public Object getResult(final ResultSet rs, final String columnName) throws SQLException {
return this.createCalendar(rs.getObject(columnName));
}
@Override
public Object getResult(final CallableStatement cs, final int columnIndex) throws SQLException {
return this.createCalendar(cs.getObject(columnIndex));
}
@Override
public void setParameter(final PreparedStatement ps, final int i, final Object parameter, final JdbcType jdbcType) throws SQLException {
final Calendar calendar = (Calendar) parameter;
ps.setDate(i, new Date(calendar.getTimeInMillis()), calendar);
}
public GregorianCalendar createCalendar(final Object sqlDate) throws SQLException {
if (!(sqlDate instanceof java.util.Date)) {
return null;
}
GregorianCalendar gc = new GregorianCalendar();
gc.setTime((java.util.Date) sqlDate);
return gc;
}
}
A questo punto tutto è ok
Ecco il progetto aggiornato: mybatis-helloworld-eclipse-v0.4

Pingback: Tweets that mention Impostare un “Type Handler” per MyBatis per tipi di dato personalizzati -- Topsy.com