MyBatis自定义类型转换器
2017-02-05 21:49
239 查看
需求场景:当数据库中保存'Y'/'N',而对应bean字段的值的类型为boolean,这是就需要我们自定义类型转换器,在Mybatis执行SQL得到结果时,通过自定义类型转换器将CHAR或者VARCHAR2类型转换为boolean类型,Java代码如下:
[html] view
plain copy
[java] view
plain copy
package com.mangocity.btms.dynamicfield.util;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
import org.apache.log4j.Logger;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* @author afei
* java中的boolean和jdbc中的char之间转换;true-Y;false-N
*/
public class mangoBooleanTypeHandler implements TypeHandler<Boolean> {
private static final Logger logger = Logger.getLogger(mangoBooleanTypeHandler.class) ;
/**
* 用于定义在Mybatis设置参数时该如何把Java类型的参数转换为对应的数据库类型
* @param preparedStatement 当前的PreparedStatement对象
* @param i 当前参数的位置
* @param b 当前参数的Java对象
* @param jdbcType 当前参数的数据库类型
* @throws SQLException
*/
public void setParameter(PreparedStatement preparedStatement, int i, Boolean b, JdbcType jdbcType) throws SQLException {
if(b.equals(Boolean.TRUE)){
preparedStatement.setString(i,"Y");
}else{
preparedStatement.setString(i,"N");
}
}
/**
* 用于在Mybatis获取数据结果集时如何把数据库类型转换为对应的Java类型
* @param resultSet 当前的结果集
* @param columnName 当前的字段名称
* @return 转换后的Java对象
* @throws SQLException
*/
public Boolean getResult(ResultSet resultSet, String columnName) throws SQLException {
return tranferType(resultSet.getString(columnName)) ;
}
/**
* 用于在Mybatis通过字段位置获取字段数据时把数据库类型转换为对应的Java类型
* @param resultSet 当前的结果集
* @param i 当前字段的位置
* @return 转换后的Java对象
* @throws SQLException
*/
public Boolean getResult(ResultSet resultSet, int i) throws SQLException {
return tranferType( resultSet.getString(i) );
}
/**
* 用于Mybatis在调用存储过程后把数据库类型的数据转换为对应的Java类型
* @param callableStatement 当前的CallableStatement执行后的CallableStatement
* @param columnIndex 当前输出参数的位置
* @return
* @throws SQLException
*/
public Boolean getResult(CallableStatement callableStatement, int columnIndex) throws SQLException {
return tranferType(callableStatement.getString(columnIndex));
}
private Boolean tranferType(String s){
if("Y".equalsIgnoreCase(s))
{
return Boolean.TRUE ;
}else{
return Boolean.FALSE;
}
}
}
然后,在Mapper文件中,给需要转换的字段指定该类型转换器mangoBooleanTypeHandler(mangoBooleanTypeHandler为typeAlias,在Mybatis配置文件中定义):
[html] view
plain copy
<resultMap id="customDynamicFieldValueType" type="dynamicFieldValueType">
<result column="DYNAMIC_FIELD_ID" property="dynamicFieldId" />
<result column="DYNAMIC_FIELD_VALUE" property="dynamicFieldValue" />
<result column="DYNAMIC_FIELD_LABEL" property="dynamicFieldLabel" />
<result column="REQUIRED" property="required" typeHandler="mangoBooleanTypeHandler" />
</resultMap>
然后我们在Mybatis的配置文件中这样注册它:
Xml代码
<typeHandlers>
<typeHandler handler="com.tiantian.mybatis.handler.mangoBooleanTypeHandler"/>
</typeHandlers>
参考:
https://my.oschina.net/kolbe/blog/508131 http://elim.iteye.com/blog/1847854
[html] view
plain copy
[java] view
plain copy
package com.mangocity.btms.dynamicfield.util;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
import org.apache.log4j.Logger;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* @author afei
* java中的boolean和jdbc中的char之间转换;true-Y;false-N
*/
public class mangoBooleanTypeHandler implements TypeHandler<Boolean> {
private static final Logger logger = Logger.getLogger(mangoBooleanTypeHandler.class) ;
/**
* 用于定义在Mybatis设置参数时该如何把Java类型的参数转换为对应的数据库类型
* @param preparedStatement 当前的PreparedStatement对象
* @param i 当前参数的位置
* @param b 当前参数的Java对象
* @param jdbcType 当前参数的数据库类型
* @throws SQLException
*/
public void setParameter(PreparedStatement preparedStatement, int i, Boolean b, JdbcType jdbcType) throws SQLException {
if(b.equals(Boolean.TRUE)){
preparedStatement.setString(i,"Y");
}else{
preparedStatement.setString(i,"N");
}
}
/**
* 用于在Mybatis获取数据结果集时如何把数据库类型转换为对应的Java类型
* @param resultSet 当前的结果集
* @param columnName 当前的字段名称
* @return 转换后的Java对象
* @throws SQLException
*/
public Boolean getResult(ResultSet resultSet, String columnName) throws SQLException {
return tranferType(resultSet.getString(columnName)) ;
}
/**
* 用于在Mybatis通过字段位置获取字段数据时把数据库类型转换为对应的Java类型
* @param resultSet 当前的结果集
* @param i 当前字段的位置
* @return 转换后的Java对象
* @throws SQLException
*/
public Boolean getResult(ResultSet resultSet, int i) throws SQLException {
return tranferType( resultSet.getString(i) );
}
/**
* 用于Mybatis在调用存储过程后把数据库类型的数据转换为对应的Java类型
* @param callableStatement 当前的CallableStatement执行后的CallableStatement
* @param columnIndex 当前输出参数的位置
* @return
* @throws SQLException
*/
public Boolean getResult(CallableStatement callableStatement, int columnIndex) throws SQLException {
return tranferType(callableStatement.getString(columnIndex));
}
private Boolean tranferType(String s){
if("Y".equalsIgnoreCase(s))
{
return Boolean.TRUE ;
}else{
return Boolean.FALSE;
}
}
}
然后,在Mapper文件中,给需要转换的字段指定该类型转换器mangoBooleanTypeHandler(mangoBooleanTypeHandler为typeAlias,在Mybatis配置文件中定义):
[html] view
plain copy
<resultMap id="customDynamicFieldValueType" type="dynamicFieldValueType">
<result column="DYNAMIC_FIELD_ID" property="dynamicFieldId" />
<result column="DYNAMIC_FIELD_VALUE" property="dynamicFieldValue" />
<result column="DYNAMIC_FIELD_LABEL" property="dynamicFieldLabel" />
<result column="REQUIRED" property="required" typeHandler="mangoBooleanTypeHandler" />
</resultMap>
然后我们在Mybatis的配置文件中这样注册它:
Xml代码
<typeHandlers>
<typeHandler handler="com.tiantian.mybatis.handler.mangoBooleanTypeHandler"/>
</typeHandlers>
参考:
https://my.oschina.net/kolbe/blog/508131 http://elim.iteye.com/blog/1847854
相关文章推荐
- MyBatis:自定义类型转换器(typeHandlers)
- mybatis typeHandler自定义类型转换器
- mybatis自定义类型转换器
- MyBatis自定义类型转换器实现加解密
- Mybatis实现自定义类型转换器TypeHandler的方法
- Mybatis实现自定义的类型转换器TypeHandler
- MyBatis自定义类型转换器实现加解密
- MyBatis自定义类型转换器
- Mybatis实现自定义的类型转换器TypeHandler
- MyBatis:自定义类型转换器(typeHandlers)
- MyBatis的类型自定义映射
- 基于Struts 2的自定义类型转换器
- Spring整合MyBatis后引入自定义类型转化器TypeHandler
- [原创]java WEB学习笔记67:Struts2 学习之路-- 类型转换概述, 类型转换错误修改,如何自定义类型转换器
- struts2自定义类型转换器:DefaultTypeConverter
- 从源代码剖析Struts2中用户自定义配置转换器的两种方式——基于字段的配置转换器和基于类型的配置转换器(解决了实际系统中,因没有区分这两种工作方式的生命周期而引起的异常错误问题)
- 32-35. Struts2_类型转换错误消息的显示和定制&自定义类型转换器&类型转换器与复杂属性&集合协同使用
- Struts2自定义类型转换器
- Struts2之自定义类型转换器
- Struts2之自定义局部类型转换器、全局类型转换器