转自:http://ccchhhlll1988-163-com.iteye.com/blog/1420149

TypeHandler是MyBatis config文件中可选的配置选项,其可以对实体属性类型和数据库列类型的转换过程进行干涉,在过程中添加某些可能需要的操作。 
1、自定义的typeHandler类需要实现typeHandler接口并且实现接口方法; 
2、配置文件添加<typeHandler>; 
3、在映射文件中的参数和结果添加类型说明,javaType和jdbcType。 
简单实例如下: 
类型控制类------

package com.chl.mybatis.typehandler;

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 chl
* 类型转换器
* 实现TypeHandler接口
* 需要强调的是:为了让类型控制器起作用,必须在mapper.xml中对参数和结果的类型进行显示表明。
*/
public class StringVarcharTypeHandler implements TypeHandler{ @Override
public Object getResult(ResultSet rs, String columnName) throws SQLException {
// TODO Auto-generated method stub
System.out.println("getResult(rs,columnName)");
return rs.getString(columnName);
} @Override
public Object getResult(CallableStatement arg0, int arg1)
throws SQLException {
// TODO Auto-generated method stub
return null;
} @Override
public void setParameter(PreparedStatement ps, int paraIndex, Object object,
JdbcType jt) throws SQLException {
// TODO Auto-generated method stub
System.out.println("setParameter()");
ps.setString(paraIndex, (String)object);
} }

配置文件中:

<?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="config.properties"></properties>
<!-- 定义vo -->
<typeAliases>
<typeAlias alias="User" type="com.mybatis.test.vo.User" />
</typeAliases>
<!-- 类型处理器 -->
<typeHandlers>
<typeHandler javaType="String" jdbcType="VARCHAR"
handler="com.chl.mybatis.typehandler.StringVarcharTypeHandler" />
</typeHandlers>
<!-- end define -->
<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> <mappers>
<mapper resource="com/mybatis/test/maps/UserMapper.xml" />
</mappers>
</configuration>

这里注意该控制类的位置:
标签的顺序大致是:

"(properties,settings,typeAliases,typeHandlers,objectFactory,objectWrapperFactory,plugins,environments,mappers)".

如果报类似的错误的话,就是因为标签位置放错了的原因。

映射文件中添加类型说明:

    <insert id="insertUser2" parameterType="User">
insert into user
(username, password)
values
(#{username, javaType=String, jdbcType=VARCHAR},
#{password, javaType=String, jdbcType=VARCHAR});
</insert>
<!-- 实现结果中列于对象属性的对应关系,利用javaType和jdbcType表示类型关系,这样有助于TypeHandler的匹配使用 -->
<resultMap id="userMap" type="User">
<result property="username" column="username" javaType="String" jdbcType="VARCHAR"></result>
<result property="password" column="password" javaType="String" jdbcType="VARCHAR"></result>
</resultMap>

TypeHandler的简单实例的更多相关文章

  1. Hibernate(二)__简单实例入门

    首先我们进一步理解什么是对象关系映射模型? 它将对数据库中数据的处理转化为对对象的处理.如下图所示: 入门简单实例: hiberante 可以用在 j2se 项目,也可以用在 j2ee (web项目中 ...

  2. 最新 Eclipse IDE下的Spring框架配置及简单实例

    前段时间开始着手学习Spring框架,又是买书又是看视频找教程的,可是鲜有介绍如何配置Spring+Eclipse的方法,现在将我的成功经验分享给大家. 本文的一些源代码来源于码农教程:http:// ...

  3. 修改js confirm alert 提示框文字的简单实例

    修改js confirm alert 提示框文字的简单实例: <!DOCTYPE html> <html> <head lang="en"> & ...

  4. 利用navicat创建存储过程、触发器和使用游标的简单实例

    利用navicat创建存储过程.触发器和使用游标的简单实例 标签: navicat存储过程触发器mysql游标 2013-08-03 21:34 15516人阅读 评论(1) 收藏 举报  分类: 数 ...

  5. 【转】Android Https服务器端和客户端简单实例

    转载地址:http://blog.csdn.net/gf771115/article/details/7827233 AndroidHttps服务器端和客户端简单实例 工具介绍 Eclipse3.7 ...

  6. Centos7的安装、Docker1.12.3的安装,以及Docker Swarm集群的简单实例

    目录 [TOC] 1.环境准备 ​ 本文中的案例会有四台机器,他们的Host和IP地址如下 c1 -> 10.0.0.31 c2 -> 10.0.0.32 c3 -> 10.0.0. ...

  7. vue路由的简单实例

    vue2.0 和 vue1.0 路由的语法还是有点稍微的差别,下面介绍一下vue-router 2的简单实例: <!DOCTYPE html> <html lang="en ...

  8. Flume概述和简单实例

    Flume概述 Flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统.支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方( ...

  9. jsoup解析HTML及简单实例

    jsoup 中文参考文献    http://www.open-open.com/jsoup/ 本文将利用jsoup,简单实现网络抓取的功能,并给出一个小实例,该实例效果为:获取作者本人在博客园写的所 ...

随机推荐

  1. C++11中的右值引用

    原文出处:http://kuring.me/post/cpp11_right_reference May 18, 2015 移动构造函数 C++98中的左值和右值 C++11右值引用和移动语义 强制移 ...

  2. oracle 数据库远程导出

    exp 用户名/密码@IP:端口/数据库名 file=文件路径 full=y; exp scebm1/ebm@10.3.10.16:1521/scebm file=D:scebm20140527.dm ...

  3. Android 相关

    ADT 下载更新 http://www.oschina.net/question/1463998_220998 更改包名后,资源文件不更新 AndroidMainfast.xml文件,有package ...

  4. easyui dialog遮罩层

    当dialog在一个iframe里时,此dialog的遮罩层也会只覆盖这个iframe,要想覆盖整个页面,就把dialog写到最外层的父页面中去,此时dialog的遮罩层会自动覆盖整个页面,若需要从子 ...

  5. C++11静态assert

    [C++11静态assert] C++11新的关键字static_assert可以解决模板中的状态检察. 声明采取以下的形式: 这里有一些如何使用static_assert的例子: 当常数表达式值为f ...

  6. hdu 5400 Arithmetic Sequence

    http://acm.hdu.edu.cn/showproblem.php?pid=5400 Arithmetic Sequence Time Limit: 4000/2000 MS (Java/Ot ...

  7. 安装Sass

    最近要开始用 Sass 做一些东西.先来记录一下安装过程. 1.确认本机的 Ruby 版本 2.访问网址下载 Sass 最新版本 https://rubygems.org/gems/sass 3.下载 ...

  8. 原生JS修改标签样式为带阴影效果

    代码如下: JS部分 //点击时候,改变样式 function GetCategoryInfo(value) { var getInfo = value.toString().split(','); ...

  9. commondline 之二 执行类

    E:\cn\zno\commandline\Test.class package cn.zno.commandline; import java.lang.management.ManagementF ...

  10. INVALID_SOCKET的值

    INVALID_SOCKET的值 (2011-06-26 15:06:45) 标签: 杂谈 INVALID_SOCKET的值不是-1,原因参考basetsd.h和WinSock2.h: typedef ...