mybatis學習筆記--typehandler自定義類型轉換

原文地址:http://www.360doc.com/content/12/0428/00/1542811_207167041.shtml

有這樣一個需求

有一個布爾型的字段需要保存到數據庫中,但是數據庫不支持布爾類型,因此採用一位字符(char(1))來存儲這個布爾值,javabean中仍然採用boolean類型。

我們採用mybatis作爲持久層框架,但是就有一個問題,數據庫中使char型,而程序中是boolean型,如何實現數據類型自動轉換?

解決辦法

mybatis提供了對自定義的類型轉換器(typeHandler)的支持,因此我們可以自己編寫類型轉換器來實現這一自動轉換的功能。 

實現步驟

第一步:編寫自定義類型轉換器

/**
 * 
 */
package test.atfm.persistence.mybatis.handler;

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;

/**
 * @author 
 * java中的boolean和jdbc中的char之間轉換;true-Y;false-N
 */
public class BooleanTypeHandler implements TypeHandler {

	/* (non-Javadoc)
	 * @see org.apache.ibatis.type.TypeHandler#getResult(java.sql.ResultSet, java.lang.String)
	 */
	@Override
	public Object getResult(ResultSet arg0, String arg1) throws SQLException {
		String str = arg0.getString(arg1);
		Boolean rt = Boolean.FALSE;
		if (str.equalsIgnoreCase("Y")){
			rt = Boolean.TRUE;
		}
		return rt; 
	}

	/* (non-Javadoc)
	 * @see org.apache.ibatis.type.TypeHandler#getResult(java.sql.CallableStatement, int)
	 */
	@Override
	public Object getResult(CallableStatement arg0, int arg1)
			throws SQLException {
		Boolean b = arg0.getBoolean(arg1);
		return b == true ? "Y" : "N";
	}

	/* (non-Javadoc)
	 * @see org.apache.ibatis.type.TypeHandler#setParameter(java.sql.PreparedStatement, int, java.lang.Object, org.apache.ibatis.type.JdbcType)
	 */
	@Override
	public void setParameter(PreparedStatement arg0, int arg1, Object arg2,
			JdbcType arg3) throws SQLException {
		Boolean b = (Boolean) arg2;
		String value = (Boolean) b == true ? "Y" : "N";
		arg0.setString(arg1, value);
	}
}

第二步:註冊類型轉換器

Xml代碼

<?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="db.properties"></properties>

	<typeHandlers>
	<typeHandler javaType="Boolean" jdbcType="CHAR"
		handler="test.atfm.persistence.mybatis.handler.BooleanTypeHandler" />
	</typeHandlers>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${driver}" />
				<property name="url" value="${url}" />
				<property name="username" value="${username}" />
				<property name="password" value="${password}" />
			</dataSource>
		</environment>
	</environments>
</configuration>

第三步: 指定類型轉換

Xml代碼

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper  
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"  
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<mapper namespace="test.atfm.persistence.mybatis.TestMapper">
	<resultMap type="TestBean" id="TestBeanMap">
		<id property="tname" column="tname" />
		<result property="isCancel" column="iscancel" javaType="Boolean" jdbcType="CHAR"/>
	</resultMap>

	<select id="selectTest" resultMap="TestBeanMap">
	select * from t_test
	</select>
	<insert id="insertTest" parameterType="TestBean">
	insert into t_test(tname,iscancel) values(#{tname},#{isCancel jdbcType=CHAR javaType=Boolean})
	</insert>
</mapper>

這樣mybatis就能將數據庫中的類型與java中的類型自動做轉換了。其他類型轉方法同上
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章