mybatis類型轉換

寫一個轉換類繼承TypeHandler<T>:java

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;
        }
    }
}

配置:sql

    <typeHandlers>  
    <typeHandler javaType="Boolean" jdbcType="CHAR"  
        handler="com.hotent.officeoa.model.MyBooleanTypeHandler"/>  
    </typeHandlers> 

如今,Boolean類型插入數據庫爲‘Y’or'N'數據庫

相關文章
相關標籤/搜索