写一个转换类继承TypeHandler<T>:
package com.hotent.officeoa.model; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.TypeHandler; import org.apache.log4j.Logger; /** * @ClassName MyBooleanTypeHandler * @PackageName com.hotent.officeoa.model * @Description 将Java中的Boolean和jdbc的char之间转换,Y-true,N-false * @author law * @Date 2016-4-5 上午8:43:32 */ public class MyBooleanTypeHandler implements TypeHandler<Boolean> { private static final Logger logger = Logger.getLogger(MyBooleanTypeHandler.class); /** * 用于在Mybatis获取数据结果集时如何把数据库类型转换为对应的Java类型 * @param resultSet 当前的结果集 * @param columnName 当前的字段名称 * @return 转换后的Java对象 * @throws SQLException */ @Override public Boolean getResult(ResultSet resultSet, String columnName) throws SQLException { return tranferType(resultSet.getString(columnName)); } /** * 用于在Mybatis通过字段位置获取字段数据时把数据库类型转换为对应的Java类型 * @param resultSet 当前的结果集 * @param arg1 当前字段的位置 * @return 转换后的Java对象 * @throws SQLException */ @Override public Boolean getResult(ResultSet resultSet, int arg1) throws SQLException { return tranferType(resultSet.getString(arg1)); } /** * 用于Mybatis在调用存储过程后把数据库类型的数据转换为对应的Java类型 * @param callableStatement 当前的CallableStatement执行后的CallableStatement * @param columnIndex 当前输出参数的位置 * @return * @throws SQLException */ @Override public Boolean getResult(CallableStatement callableStatement, int columnIndex) throws SQLException { return tranferType(callableStatement.getString(columnIndex)); } /** * 用于定义在Mybatis设置参数时该如何把Java类型的参数转换为对应的数据库类型 * @param preparedStatement 当前的PreparedStatement对象 * @param arg1 当前参数的位置 * @param arg2 当前参数的Java对象 * @param jdbcType 当前参数的数据库类型 * @throws SQLException */ @Override public void setParameter(PreparedStatement preparedStatement, int arg1, Boolean arg2, JdbcType jdbcType) throws SQLException { if(arg2.equals(Boolean.TRUE)){ preparedStatement.setString(arg1,"Y"); }else{ preparedStatement.setString(arg1,"N"); } } private Boolean tranferType(String str){ if("Y".equalsIgnoreCase(str)){ return Boolean.TRUE; }else{ return Boolean.FALSE; } } }
配置:
<typeHandlers> <typeHandler javaType="Boolean" jdbcType="CHAR" handler="com.hotent.officeoa.model.MyBooleanTypeHandler"/> </typeHandlers>
现在,Boolean类型插入数据库为‘Y’or'N'