`
cnflat
  • 浏览: 13790 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Mybatis学习笔记5--typehandler

阅读更多
可以自定义一些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学习笔记

    - **参数映射**: MyBatis支持多种参数映射方式,如简单的值、Map、JavaBean,甚至自定义TypeHandler,可以对特定类型的数据进行特殊处理。 - **事务管理**: MyBatis提供了简单的事务控制,可以通过SqlSession的...

    MyBatis学习笔记.zip

    在mybatis学习笔记1.docx中,我们可能涵盖了以下几个关键知识点: 1. **MyBatis简介**:首先会介绍MyBatis的起源、特点以及它在Java开发中的地位。MyBatis以其轻量级、灵活性和强大的映射功能深受开发者喜爱。 2. ...

    Springmvc+Mybatis由浅入深笔记

    3. 参数映射与结果映射:@Param、@ResultMap等注解的运用,以及自定义TypeHandler。 4. 一对多、多对一、多对多关系映射:集合和关联的处理。 5. 缓存机制:一级缓存和二级缓存的配置与管理。 6. 事务控制:手动和...

    狂胜说Mybatis.zip

    6. **自动类型转换**:Mybatis有内置的类型处理器(TypeHandler),能够自动进行Java类型和JDBC类型之间的转换,例如Date转String,String转Integer等。 7. **缓存机制**:Mybatis提供了两级缓存,一级缓存在...

    狂神说Mybatis.zip

    9. **Mybatis的高级特性**:包括延迟加载(Lazy Loading)、CGLIB代理、自定义TypeHandler等,这些特性增强了Mybatis的灵活性和实用性。 10. **Mybatis实战**:通过实际项目中的案例,学习如何集成Mybatis到Spring ...

    MyBatisInsider:MyBatis原始码阅读笔记

    MyBatis内置了很多常见类型的TypeHandler,同时也支持自定义TypeHandler。 10. **MapperRegistry** MapperRegistry是Mapper的注册中心,它负责管理和加载Mapper接口及其对应的XML配置。通过动态代理,MyBatis能将...

    springmvc学习笔记-返回json的日期格式问题的解决方法

    如果要改变这种默认行为,可以在Mybatis的配置文件中进行类型处理器(type handler)的设置。 5. 注意事项 在实际开发中,还需要注意代码生成器可能覆盖自定义注解的情况。为了保证格式化的正确性,建议在生成代码...

    JavaLearnProject:Java 学习笔记测试用例

    Java 学习笔记测试用例 如果没有特别说明,测试代码默认放在 test 目录下面 模块及功能介绍 Module 功能 spring-aop Spring AOP 面向切面编程 spring-ioc Spring IOC 控制反转(类[对象]交由Spring容器管理) ...

    SSM 完整Demo高效

    3. mybatis-config.xml:MyBatis的全局配置文件,包括数据库连接信息、TypeHandler等配置。 4. mapper接口及对应的XML配置文件:定义SQL语句和结果映射。 5. 实体类(Entity):对应数据库表的Java对象。 6. DAO接口...

Global site tag (gtag.js) - Google Analytics