可以自定义一些TypeHandler来对一些字段进行特殊处理,例如将一个varchar字段转成一个JAVABean中的String数组。将JavaBean中的long转成Timestamp等。
需要注意的:
1. JavaBean中的成员类型只能是类,如果是基本类型的要改成对应的包装类。
2. 配置文件中,如果是insert、update类型的语句,需要在字段中定义类型或者typehandler。查询的结果如果是定义了ResultMap,可以在对应的列定义中定义typehandler。
3. TypeHandler对应的类型可以在xml中定义,也可以在代码中通过注解@MappedTypes和@MappedJdbcTypes来定义
一个Long和Timestamp互转的例子:
@MappedTypes(Long.class)
@MappedJdbcTypes(JdbcType.TIMESTAMP)
public class TimestampTypeHandler extends BaseTypeHandler<Long>{
@Override
public Long getNullableResult(ResultSet rs, String columnName)
throws SQLException {
Timestamp value = rs.getTimestamp(columnName);
if(value != null)
return value.getTime();
return 0l;
}
@Override
public Long getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
Timestamp value = rs.getTimestamp(columnIndex);
if(value != null)
return value.getTime();
return 0l;
}
@Override
public Long getNullableResult(CallableStatement stmt, int parameterIndex)
throws SQLException {
Timestamp value = stmt.getTimestamp(parameterIndex);
if(value != null)
return value.getTime();
return 0l;
}
@Override
public void setNonNullParameter(PreparedStatement stmt, int parameterIndex,
Long value, JdbcType jdbcType) throws SQLException {
stmt.setTimestamp(parameterIndex, new Timestamp(value));
}
}
配置文件例子:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC
"-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--这块等于dao接口的实现 namespace必须和接口的类路径一样-->
<mapper namespace="example.dao.IVerifyCodeDAO">
<resultMap type="VerifyCode" id="verifycodeMap">
<result column="phone" property="phonenum" />
<result property ="code" column="code" />
<result property="timestamp" column="timestamp" typeHandler="example.dao.typehandler.TimestampTypeHandler" />
</resultMap>
<insert id="insertVerifyCode1" parameterType="VerifyCode">
insert into T_VerifyCode
(phone,code,timestamp)
values(#{phonenum},#{code},#{timestamp,typeHandler=example.dao.typehandler.TimestampTypeHandler})
</insert>
<insert id="insertVerifyCode" parameterType="VerifyCode">
insert into T_VerifyCode
(phone,code,timestamp)
values(#{phonenum},#{code},#{timestamp,jdbcType=TIMESTAMP,javaType=java.lang.Long})
</insert>
<delete id="removeVerifyCode" parameterType="HashMap">
delete from T_VerifyCode where phone=#{phone}
</delete>
<select id="loadValidCodes" resultMap="verifycodeMap">
select phone,code,timestamp from T_VerifyCode
</select>
</mapper>
分享到:
相关推荐
- **参数映射**: MyBatis支持多种参数映射方式,如简单的值、Map、JavaBean,甚至自定义TypeHandler,可以对特定类型的数据进行特殊处理。 - **事务管理**: MyBatis提供了简单的事务控制,可以通过SqlSession的...
在mybatis学习笔记1.docx中,我们可能涵盖了以下几个关键知识点: 1. **MyBatis简介**:首先会介绍MyBatis的起源、特点以及它在Java开发中的地位。MyBatis以其轻量级、灵活性和强大的映射功能深受开发者喜爱。 2. ...
3. 参数映射与结果映射:@Param、@ResultMap等注解的运用,以及自定义TypeHandler。 4. 一对多、多对一、多对多关系映射:集合和关联的处理。 5. 缓存机制:一级缓存和二级缓存的配置与管理。 6. 事务控制:手动和...
6. **自动类型转换**:Mybatis有内置的类型处理器(TypeHandler),能够自动进行Java类型和JDBC类型之间的转换,例如Date转String,String转Integer等。 7. **缓存机制**:Mybatis提供了两级缓存,一级缓存在...
9. **Mybatis的高级特性**:包括延迟加载(Lazy Loading)、CGLIB代理、自定义TypeHandler等,这些特性增强了Mybatis的灵活性和实用性。 10. **Mybatis实战**:通过实际项目中的案例,学习如何集成Mybatis到Spring ...
MyBatis内置了很多常见类型的TypeHandler,同时也支持自定义TypeHandler。 10. **MapperRegistry** MapperRegistry是Mapper的注册中心,它负责管理和加载Mapper接口及其对应的XML配置。通过动态代理,MyBatis能将...
如果要改变这种默认行为,可以在Mybatis的配置文件中进行类型处理器(type handler)的设置。 5. 注意事项 在实际开发中,还需要注意代码生成器可能覆盖自定义注解的情况。为了保证格式化的正确性,建议在生成代码...
Java 学习笔记测试用例 如果没有特别说明,测试代码默认放在 test 目录下面 模块及功能介绍 Module 功能 spring-aop Spring AOP 面向切面编程 spring-ioc Spring IOC 控制反转(类[对象]交由Spring容器管理) ...
3. mybatis-config.xml:MyBatis的全局配置文件,包括数据库连接信息、TypeHandler等配置。 4. mapper接口及对应的XML配置文件:定义SQL语句和结果映射。 5. 实体类(Entity):对应数据库表的Java对象。 6. DAO接口...