有这样一个需求:
有一个布尔型的字段需要保存到数据库中,但是数据库不支持布尔类型,因此采用一位字符(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中的类型自动做转换了。
分享到:
相关推荐
在某些场景下,MyBatis内置的类型转换器可能无法满足我们的需求,这时就需要我们自定义TypeHandler。下面将详细介绍如何在MyBatis中实现自定义类型转换器。 首先,我们需要了解MyBatis的基本概念。MyBatis是一个...
在MyBatis中,自定义类型转换器是用于处理特定数据类型与数据库字段之间的转换,以便在持久化操作中满足特定需求,如本例中的加解密。在需求场景中,如果你希望数据库中存储的数据(如敏感信息)在存储前进行加密,...
使用这个转换器时,我们需要在MyBatis的Mapper XML文件中为字段指定这个自定义的TypeHandler,或者在实体类的枚举属性上使用`@TypeHandler`注解。 枚举类型的使用场景多种多样,例如: 1. 订单状态:如待支付、已...
Mybatis自定义类型转换器的使用技巧是指在Mybatis框架中,使用自定义类型转换器来实现类型之间的转换,以满足特殊的业务需求。在这篇文章中,我们将详细介绍Mybatis自定义类型转换器的使用技巧,通过示例代码来演示...
1. 自定义TypeHandler:当MyBatis内置的TypeHandler无法满足需求时,可以编写自定义TypeHandler,覆盖默认的类型转换逻辑,如处理自定义枚举类型、复杂对象等。 2. 自定义Executor:Executor是MyBatis的执行器,...
为解决此问题,我们可以创建一个自定义的TypeHandler,实现`org.apache.ibatis.type.TypeHandler`接口。这个类型处理器负责将枚举值转化为字符串(存储)和从字符串恢复为枚举(读取)。在MyBatis的配置中注册这个...
为了解决这个问题,我们需要将自定义的枚举TypeHandler注册到Mybatis的TypeHandlerRegistry中,确保Mybatis在遇到特定枚举类型时能自动使用我们定义的转换器。 实现这个目标,我们需要以下步骤: 1. **注册自定义...
本讲义将深入探讨MyBatis的配置文件、类型转换器、对象工厂以及拦截器等核心概念。 1. **类型转换器(TypeHandlers)** MyBatis 使用 TypeHandler 来处理数据库类型与 Java 类型之间的转换。默认情况下,MyBatis ...
8. 自动类型匹配:Mybatis能自动识别JDBC驱动返回的类型并将其转换为Java类型,同时允许开发者通过`typeHandler`自定义类型处理器。 9. 异常处理:Mybatis有一套完整的异常体系,如`...
8. **TypeHandler**:TypeHandler是MyBatis中处理Java类型与JDBC类型转换的接口,它负责在参数设置和结果获取时进行类型转换。 9. **动态SQL**:MyBatis的动态SQL功能强大,允许在XML映射文件中根据条件拼接SQL,极...
- TypeHandler 用于 Java 类型和 JDBC 类型之间的转换,确保数据正确地在 Java 应用和数据库之间进行传递。 7. **动态 SQL** - MyBatis 的强大之处在于其支持动态 SQL,通过 if、choose、when、otherwise、...
或者研究TypeHandler,针对特定类型开发自定义的类型处理器;还可以研究Mapper的动态加载机制,提高应用的灵活性。总之,掌握源码对于深入理解MyBatis的工作机制、提升开发效率和解决实际问题具有重要意义。
MyBatis的TypeHandler接口定义了Java类型与JDBC类型之间的转换,系统内置了一些常见的类型处理器,同时支持自定义类型处理器以处理特殊类型。 通过对`mybatis-3.0.4源码`的深入研究,开发者不仅可以理解MyBatis的...
8. **TypeHandler**: 处理Java类型到JDBC类型和反之的转换,是MyBatis类型映射的核心。 9. **Mapper接口和Mapper XML文件**: MyBatis允许开发者定义自定义的Mapper接口和对应的XML文件,XML文件中定义了SQL语句和...
MyBatis提供了一系列预定义的TypeHandler,同时也支持自定义TypeHandler以处理特定类型的映射。 9. **动态SQL**:MyBatis的一大特色是支持动态SQL,可以在XML映射文件或注解中编写条件判断,实现SQL的动态生成。 ...
TypeHandler则负责Java类型与数据库类型的转换,Mybatis提供了多种内置的TypeHandler,也可以自定义实现。 9. **缓存机制** Mybatis提供了本地缓存和二级缓存两种机制。本地缓存是线程级别的,可以避免重复查询;...
6. **TypeHandler**:MyBatis 提供了对 Java 类型和数据库类型之间的自动转换,TypeHandler 在其中起到了关键作用。源码分析 TypeHandler,可以帮助理解 MyBatis 如何处理不同类型的数据转换。 7. **插件支持**:...
- 当需要处理自定义类型时,可以通过实现`TypeHandler`接口,自定义类型转换逻辑。 总的来说,MyBatis 3.2.7版提供了全面的数据库操作支持,简化了传统的JDBC编程,让开发者更专注于业务逻辑,而不用过多关注底层...
9. **TypeHandler**: 类型处理器,处理Java类型与数据库类型的映射,确保数据的正确转换。 10. **XML配置文件和注解映射**: MyBatis支持XML方式和注解方式来定义SQL语句和映射关系,通过`@Select`, `@Insert`, `@...
4. **TypeHandler**:Mybatis 内置了多种TypeHandler,用于处理Java类型和数据库类型之间的转换。开发者可以根据需要自定义TypeHandler以处理特殊类型的映射。 5. **Mapper接口**:通过Mapper接口,开发者可以在...