设为首页 收藏本站
查看: 1113|回复: 0

[经验分享] mybatis typeHandler自定义类型转换器

[复制链接]

尚未签到

发表于 2016-11-26 04:30:23 | 显示全部楼层 |阅读模式
有这样一个需求:
有一个布尔型的字段需要保存到数据库中,但是数据库不支持布尔类型,因此采用一位字符(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中的类型自动做转换了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-305509-1-1.html 上篇帖子: mybatis学习笔记-高级嵌套 下篇帖子: myBatis系列之四:关联数据的查询
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表