TypeHandler的实例...

阅读更多
TypeHandler是MyBatis config文件中可选的配置选项,其可以对实体属性类型和数据库列类型的转换过程进行干涉,在过程中添加某些可能需要的操作。
1、自定义的typeHandler类需要实现typeHandler接口并且实现接口方法;
2、配置文件添加
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.配置文件中添加类型控制器配置
    
    
        
 
 


3.映射文件中添加类型说明
    
    
    
    insert into t_user (username, sex)     
    values     
    (#{userName, javaType=String, jdbcType=VARCHAR},    
    #{sex, javaType=String, jdbcType=VARCHAR});    
    
        
    
        
        
    



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

转自 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);    
    }    
}
   


第二步:注册类型转换器
    
    
    
        
    
        
        
        
        
            
                
                
                    
                    
                    
                    
                
            
        
  


第三步: 指定类型转换  
    
    
    
    
        
            
            
        
    
        
        
    insert into t_test(tname,iscancel) values(#{tname},#{isCancel jdbcType=CHAR javaType=Boolean})    
        
 
 


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

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

你可能感兴趣的:(MyBatis)