由于项目中特殊需求,需要将查询到的数据库data类型转换为dateTime封装类,就需要自定义mybatis的类型转换器。
<resultMap type="com.gongxun.entity.XXXX" id="xMap">
<result property="read" column="qx_read" javaType="DateTime" jdbcType="DATE"typeHandler="com.gongxun.plugin.DateTimeTypeHandler"/>
</resultMap>
转换器实现如下:
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedTypes;
import org.joda.time.DateTime;
import java.sql.*;
/**
* 将Date类型查询结果转换为DateTime
*/
@MappedTypes(DateTime.class)
public class DateTimeTypeHandler extends BaseTypeHandler<DateTime> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, DateTime parameter, JdbcType jdbcType)
throws SQLException {
ps.setDate(i, Date.valueOf(parameter.toString("yyyy-MM-dd HH:mm:ss")));
}
@Override
public DateTime getNullableResult(ResultSet rs, String columnName) throws SQLException {
Date date = rs.getDate(columnName);
return getLocalDate(date);
}
@Override
public DateTime getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
Date date = rs.getDate(columnIndex);
return getLocalDate(date);
}
@Override
public DateTime getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
Date date = cs.getDate(columnIndex);
return getLocalDate(date);
}
private static DateTime getLocalDate(Date date) {
return date == null ? null : new DateTime(date);
}
}