TypeHandler的实例...

更多学习资料请访问 https://www.itkc8.com

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

1.类型控制类 

 

Java代码  收藏代码

  1. package com.chl.mybatis.typehandler;      
  2.       
  3. import java.sql.CallableStatement;      
  4. import java.sql.PreparedStatement;      
  5. import java.sql.ResultSet;      
  6. import java.sql.SQLException;      
  7.       
  8. import org.apache.ibatis.type.JdbcType;      
  9. import org.apache.ibatis.type.TypeHandler;      
  10.       
  11.       
  12. /**   
  13.  * @author chl   
  14.  * 类型转换器   
  15.  * 实现TypeHandler接口   
  16.  * 需要强调的是:为了让类型控制器起作用,必须在mapper.xml中对参数和结果的类型进行显示表明。   
  17.  */      
  18. public class StringVarcharTypeHandler implements TypeHandler{      
  19.       
  20.     @Override      
  21.     public Object getResult(ResultSet rs, String columnName) throws SQLException {      
  22.         // TODO Auto-generated method stub      
  23.         System.out.println("getResult(rs,columnName)");      
  24.         return rs.getString(columnName);      
  25.     }      
  26.       
  27.     @Override      
  28.     public Object getResult(CallableStatement arg0, int arg1)      
  29.             throws SQLException {      
  30.         // TODO Auto-generated method stub      
  31.         return null;      
  32.     }      
  33.       
  34.     @Override      
  35.     public void setParameter(PreparedStatement ps, int paraIndex, Object object,      
  36.             JdbcType jt) throws SQLException {      
  37.         // TODO Auto-generated method stub      
  38.         System.out.println("setParameter()");      
  39.         ps.setString(paraIndex, (String)object);      
  40.     }      
  41. }  

    

2.配置文件中添加类型控制器配置 

 

Xml代码  收藏代码

  1. <!-- 类型处理器 -->      
  2. <typeHandlers>      
  3.     <typeHandler javaType="String" jdbcType="VARCHAR"       
  4.         handler="com.chl.mybatis.typehandler.StringVarcharTypeHandler"/>      
  5. </typeHandlers>   

  


3.映射文件中添加类型说明

 

Xml代码  收藏代码

  1. <select id="selectUsers" resultMap="userMap">      
  2.     select username, sex from t_user;      
  3. </select>      
  4.       
  5. <insert id="insertUser" parameterType="User">      
  6.     insert into t_user (username, sex)       
  7.     values       
  8.     (#{userName, javaType=StringjdbcType=VARCHAR},      
  9.     #{sex, javaType=StringjdbcType=VARCHAR});      
  10. </insert>      
  11.     <!-- 实现结果中列于对象属性的对应关系,利用javaType和jdbcType表示类型关系,这样有助于TypeHandler的匹配使用 -->      
  12. <resultMap id="userMap" type="User">      
  13.     <result property="userName" column="username" javaType="String" jdbcType="VARCHAR"></result>      
  14.     <result property="sex" column="sex" javaType="String" jdbcType="VARCHAR"></result>      
  15. </resultMap>      




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

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



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

有一个布尔型的字段需要保存到数据库中,但是数据库不支持布尔类型,因此采用一位字符(char(1))来存储这个布尔值,javabean中仍然采用boolean类型。 

我们采用mybatis作为持久层框架,但是就有一个问题,数据库中使char型,而程序中是boolean型,如何实现数据类型自动转换? 

解决办法: 

mybatis提供了对自定义的类型转换器(typeHandler)的支持,因此我们可以自己编写类型转换器来实现这一自动转换的功能。 

实现步骤: 

第一步:编写自定义类型转换器 

 

Java代码  收藏代码

  1.     
  2. /**   
  3.  *    
  4.  */      
  5. package test.atfm.persistence.mybatis.handler;      
  6.       
  7. import java.sql.CallableStatement;      
  8. import java.sql.PreparedStatement;      
  9. import java.sql.ResultSet;      
  10. import java.sql.SQLException;      
  11.       
  12. import org.apache.ibatis.type.JdbcType;      
  13. import org.apache.ibatis.type.TypeHandler;      
  14.       
  15. /**   
  16.  * @author    
  17.  * java中的boolean和jdbc中的char之间转换;true-Y;false-N   
  18.  */      
  19. public class BooleanTypeHandler implements TypeHandler {      
  20.       
  21.     /* (non-Javadoc)   
  22.      * @see org.apache.ibatis.type.TypeHandler#getResult(java.sql.ResultSet, java.lang.String)   
  23.      */      
  24.     @Override      
  25.     public Object getResult(ResultSet arg0, String arg1) throws SQLException {      
  26.         String str = arg0.getString(arg1);      
  27.         Boolean rt = Boolean.FALSE;      
  28.         if (str.equalsIgnoreCase("Y")){      
  29.             rt = Boolean.TRUE;      
  30.         }      
  31.         return rt;       
  32.     }      
  33.       
  34.     /* (non-Javadoc)   
  35.      * @see org.apache.ibatis.type.TypeHandler#getResult(java.sql.CallableStatement, int)   
  36.      */      
  37.     @Override      
  38.     public Object getResult(CallableStatement arg0, int arg1)      
  39.             throws SQLException {      
  40.         Boolean b = arg0.getBoolean(arg1);      
  41.         return b == true ? "Y" : "N";      
  42.     }      
  43.       
  44.     /* (non-Javadoc)   
  45.      * @see org.apache.ibatis.type.TypeHandler#setParameter(java.sql.PreparedStatement, int, java.lang.Object, org.apache.ibatis.type.JdbcType)   
  46.      */      
  47.     @Override      
  48.     public void setParameter(PreparedStatement arg0, int arg1, Object arg2,      
  49.             JdbcType arg3) throws SQLException {      
  50.         Boolean b = (Boolean) arg2;      
  51.         String value = (Boolean) b == true ? "Y" : "N";      
  52.         arg0.setString(arg1, value);      
  53.     }      
  54. }  

    


第二步:注册类型转换器 

 

Xml代码  收藏代码

  1. <?xml version="1.0" encoding="UTF-8" ?>      
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"      
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">      
  4. <configuration>      
  5.     <properties resource="db.properties"></properties>      
  6.       
  7.     <typeHandlers>      
  8.     <strong><span style="color: #ff0000;"><typeHandler javaType="Boolean" jdbcType="CHAR"      
  9.         handler="test.atfm.persistence.mybatis.handler.BooleanTypeHandler" /></span></strong>      
  10.     </typeHandlers>      
  11.     <environments default="development">      
  12.         <environment id="development">      
  13.             <transactionManager type="JDBC" />      
  14.             <dataSource type="POOLED">      
  15.                 <property name="driver" value="${driver}" />      
  16.                 <property name="url" value="${url}" />      
  17.                 <property name="username" value="${username}" />      
  18.                 <property name="password" value="${password}" />      
  19.             </dataSource>      
  20.         </environment>      
  21.     </environments>      
  22. </configuration>  

   


第三步: 指定类型转换   

更多学习资料请访问 https://www.itkc8.com

Xml代码  收藏代码

  1. <?xml version="1.0" encoding="UTF-8"?>      
  2. <!DOCTYPE mapper        
  3. PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"        
  4. "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">      
  5.       
  6. <mapper namespace="test.atfm.persistence.mybatis.TestMapper">      
  7.     <resultMap type="TestBean" id="TestBeanMap">      
  8.         <id property="tname" column="tname" />      
  9.         <strong><span style="color: #ff0000;"><result property="isCancel" column="iscancel" javaType="Boolean" jdbcType="CHAR"/></span></strong>      
  10.     </resultMap>      
  11.       
  12.     <select id="selectTest" resultMap="TestBeanMap">      
  13.     select * from t_test      
  14.     </select>      
  15.     <insert id="insertTest" parameterType="TestBean">      
  16.     insert into t_test(tname,iscancel) values(#{tname},<strong><span style="color: #ff0000;">#{isCancel jdbcType=CHAR javaType=Boolean}</span></strong>)      
  17.     </insert>      
  18. </mapper>   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值