TypeHandler的实例...

TypeHandler是MyBatis config文件中可选的配置选项,其可以对实体属性类型和数据库列类型的转换过程进行干涉,在过程中添加某些可能需要的操作。
1、自定义的typeHandler类需要实现typeHandler接口并且实现接口方法;
2、配置文件添加<typeHandler>;
3、在映射文件中的参数和结果添加类型说明,javaType和jdbcType。
简单实例如下:

1.类型控制类
package com.chl.mybatis.typehandler;    
    
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 chl  
 * 类型转换器  
 * 实现TypeHandler接口  
 * 需要强调的是:为了让类型控制器起作用,必须在mapper.xml中对参数和结果的类型进行显示表明。  
 */    
public class StringVarcharTypeHandler implements TypeHandler{    
    
    @Override    
    public Object getResult(ResultSet rs, String columnName) throws SQLException {    
        // TODO Auto-generated method stub    
        System.out.println("getResult(rs,columnName)");    
        return rs.getString(columnName);    
    }    
    
    @Override    
    public Object getResult(CallableStatement arg0, int arg1)    
            throws SQLException {    
        // TODO Auto-generated method stub    
        return null;    
    }    
    
    @Override    
    public void setParameter(PreparedStatement ps, int paraIndex, Object object,    
            JdbcType jt) throws SQLException {    
        // TODO Auto-generated method stub    
        System.out.println("setParameter()");    
        ps.setString(paraIndex, (String)object);    
    }    
}
   

2.配置文件中添加类型控制器配置
<!-- 类型处理器 -->    
<typeHandlers>    
    <typeHandler javaType="String" jdbcType="VARCHAR"     
        handler="com.chl.mybatis.typehandler.StringVarcharTypeHandler"/>    
</typeHandlers> 
 


3.映射文件中添加类型说明
<select id="selectUsers" resultMap="userMap">    
    select username, sex from t_user;    
</select>    
    
<insert id="insertUser" parameterType="User">    
    insert into t_user (username, sex)     
    values     
    (#{userName, javaType=String, jdbcType=VARCHAR},    
    #{sex, javaType=String, jdbcType=VARCHAR});    
</insert>    
    <!-- 实现结果中列于对象属性的对应关系,利用javaType和jdbcType表示类型关系,这样有助于TypeHandler的匹配使用 -->    
<resultMap id="userMap" type="User">    
    <result property="userName" column="username" javaType="String" jdbcType="VARCHAR"></result>    
    <result property="sex" column="sex" javaType="String" jdbcType="VARCHAR"></result>    
</resultMap>    



好了,到此就配置完毕了。。。

转自 http://hussion.iteye.com/blog/1530702



mybatis typeHandler自定义类型转换器
有这样一个需求:

有一个布尔型的字段需要保存到数据库中,但是数据库不支持布尔类型,因此采用一位字符(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 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>    
    <strong><span style="color: #ff0000;"><typeHandler javaType="Boolean" jdbcType="CHAR"    
        handler="test.atfm.persistence.mybatis.handler.BooleanTypeHandler" /></span></strong>    
    </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 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" />    
        <strong><span style="color: #ff0000;"><result property="isCancel" column="iscancel" javaType="Boolean" jdbcType="CHAR"/></span></strong>    
    </resultMap>    
    
    <select id="selectTest" resultMap="TestBeanMap">    
    select * from t_test    
    </select>    
    <insert id="insertTest" parameterType="TestBean">    
    insert into t_test(tname,iscancel) values(#{tname},<strong><span style="color: #ff0000;">#{isCancel jdbcType=CHAR javaType=Boolean}</span></strong>)    
    </insert>    
</mapper> 
 


好了,到此mybatis就能将数据库中的类型与java中的类型自动做转换了。

转自: http://hussion.iteye.com/blog/1530696

你可能感兴趣的:(mybatis)