mybatis类型转换

写一个转换类继承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'

原文地址:https://www.cnblogs.com/law-luffy/p/5533832.html