从网上看到的帖子,感觉内容非常好,拷过来的(不愿意转载,不然被作者删除了,这么好的帖子就看不到了)。

原文:http://my.oschina.net/amoshuang/blog/134199

在Mybatis的官方文档中说明了,框架内置的TypeHandler类型。请参见http://mybatis.github.io/mybatis-3/zh/configuration.html#typeHandlers

同时Mybatis支持自定义typeHandler。

例如:自定义了一个将Date存为毫秒时间的VARCHAR类型的TypeHandler

package demo;

public class CustomTimeStampHandler extends BaseTypeHandler<Date> {

    @Override
public void setNonNullParameter(PreparedStatement ps, int i,
Date parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i, String.valueOf(parameter.getTime())); } @Override
public Date getNullableResult(ResultSet rs, String columnName)
throws SQLException {
String sqlTimestamp = rs.getString(columnName);
if (sqlTimestamp != null) {
return new Date(Long.parseLong(sqlTimestamp));
}
return null;
} @Override
public Date getNullableResult(ResultSet rs, int columnIndex)
throws SQLException {
String sqlTimestamp = rs.getString(columnIndex);
if (sqlTimestamp != null) {
return new Date(Long.parseLong(sqlTimestamp));
}
return null;
} @Override
public Date getNullableResult(CallableStatement cs, int columnIndex)
throws SQLException {
String sqlTimestamp = cs.getString(columnIndex);
if (sqlTimestamp != null) {
return new Date(Long.parseLong(sqlTimestamp));
}
return null;
} }

在Mybatis配置中注册该TypeHandler

<typeHandlers>
<typeHandler handler="com.jd.jos.application.note.dao.CustomTimeStampHandler"
javaType="java.util.Date" jdbcType="VARCHAR"/>
</typeHandlers>

然后就在映射配置文件中使用该TypeHander了。

在resultMap的定义中对对应列定义typeHandler:

<resultMap type="Note" id="note-base">
<span></span><result property="id" column="id" />
<result property="updateTime" column="update_time" jdbcType="VARCHAR" javaType="Date"
typeHandler="demo.CustomTimeStampHandler"/>
</resultMap>

  这里只能是在select的时候才会使用自定义的TypeHandler处理对应的映射关系,如果要在insert或者update时使用则需要在sql定义中添加相应的内容。如下:

<update id="updateRow" parameterType="Note">
update note
set update_time=#{updateTime, javaType=Date, jdbcType=VARCHAR}
where id=#{id}
</update>

这样在update时,会将Date转换成毫秒时间。

在insert时,按照同样的处理方式即可。

在官方文档中看到其在update和insert的处理方式为

<update id="updateRow" parameterType="NoteBook">
update note
set update_time=#{updateTime,typeHandler=demo.CustomTimeStampHandler}
where id=#{id}
</update>

但是我在测试时没有成功。

参照了以上以及网上找到的资料,自己写了一个将Mysql Blob转成String的typHeadler,可以在我的博客园的文件中下载。

MyBatis自定义数据映射TypeHandler的更多相关文章

  1. 缓存策略 半自动化就是mybaitis只支持数据库查出的数据映射到pojo类上,而实体到数据库的映射需要自己编写sql语句实现,相较于hibernate这种完全自动化的框架我更喜欢mybatis

    springboot入门(三)-- springboot集成mybatis及mybatis generator工具使用 - FoolFox - CSDN博客 https://blog.csdn.net ...

  2. MyBatis实战之映射器

    映射器是MyBatis最强大的工具,也是我们使用MyBatis时用得最多的工具,因此熟练掌握它十分必要.MyBatis是针对映射器构造的SQL构建的轻量级框架,并且通过配置生成对应的JavaBean返 ...

  3. 第9章 MyBatis的关系映射

    在实际开发中,对数据库的操作通常涉及多张表,涉及了对象和对象之间的关联关系.针对多表之间的操作,MyBatis提供了关联映射,通过关联映射就可以很好的处理对象与对象之间的关联关系 9.1 关联关系概述 ...

  4. Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件

    封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...

  5. mybatis 自定义插件的使用

    今天看了别人的mybatis的教学视频,自己手写了一个简单的自定义的插件,有些细节记录一下. 先看下mybatis的插件的一些说明: MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用. ...

  6. Datazen地图Chart自定义数据

    此篇介绍如何将数据关联到Datazen地图图表.我们会将数据库中的数据映射到地图上. 首先查看下默认地图图表绑定的数据.以下是系统自带的美国地图数据,主要有两列,一列为地名,一列为度量数据.地图会根据 ...

  7. MyBatis学习--高级映射

    简介 前面说过了简单的数据库查询和管理查询,在开发需求中有一些一对一.一对多和多对多的需求开发,如在开发购物车的时候,订单和用户是一对一,用户和订单是一对多,用户和商品是多对多.这些在Hibernat ...

  8. mybatis ---- 实现数据的增删改查

    前面介绍了接口方式的编程,需要注意的是:在book.xml文件中,<mapper namespace="com.mybatis.dao.IBookDao"> ,命名空间 ...

  9. Mybatis自定义分布式二级缓存实现与遇到的一些问题解决方案!

    先说两句: 我们都知道Mybatis缓存分两类: 一级缓存(同一个Session会话内) & 二级缓存(基于HashMap实现的以 namespace为范围的缓存) 今天呢, 我们不谈一级缓存 ...

随机推荐

  1. 配置JDK时环境变量path和JAVA_HOME的作用

    1.PATH环境变量.作用是指定命令搜索路径,在i命令行下面执行命令如javac编译java程序时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序.需要把jdk安装目录下的bin目录增 ...

  2. VC基于消息的异步套接字

    用WSAStartup,需要在StdAfx.h头文件中需要声明 #include    #pragma   comment(lib,"WS2_32.lib") 用AfxSocket ...

  3. 阿里云的NoSQL存储服务OTS的应用分析

    这篇文章主要介绍了阿里云的NoSQL存储服务OTS的应用分析,OTS作为阿里巴巴开发的NoSQL存储技术服务现已面向用户商业化,需要的朋友可以参考下. 1. 概要  OTS是构建在阿里云飞天分布式系统 ...

  4. 报错:ASP.NET Web API中找不到与请求匹配的HTTP资源

    当发出GET请求: GET http://localhost:54176/api/Products 报如下错: {  "message": "找不到与请求 URI“htt ...

  5. EF性能之关联加载

    鱼和熊掌不能兼得 ——中国谚语 一.介绍 Entity Framework作为一个优秀的ORM框架,它使得操作数据库就像操作内存中的数据一样,但是这种抽象是有性能代价的,故鱼和熊掌不能兼得.但是,通过 ...

  6. Convert IPv6 Address to IP numbers (C#)

    URL: http://lite.ip2location.com/ Use the code below to convert the IP address of your web visitors ...

  7. ELK——在 CentOS/Linux 把 Kibana 3.0 部署在 Nginx 1.9.12

    上一篇文章<安装 logstash 2.2.0.elasticsearch 2.2.0 和 Kibana 3.0>,介绍了如何安装 Logstash.Elasticsearch 以及用 P ...

  8. nginx模块开发篇 (阿里著作)

    背景介绍 nginx历史 使用简介 nginx特点介绍 nginx平台初探(100%) 初探nginx架构(100%) nginx基础概念(100%) connection request 基本数据结 ...

  9. BZOJ 3732: Network 最小生成树 倍增

    3732: Network 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3732 Description 给你N个点的无向图 (1 &l ...

  10. struts1+spring+myeclipse +cxf 开发webservice以及普通java应用调用webservice的实例

    Cxf + Spring+ myeclipse+ cxf 进行  Webservice服务端开发 使用Cxf开发webservice的服务端项目结构 Spring配置文件applicationCont ...