自定义TypeHandler分为三个步骤:

1、编写自定义TypeHandler,并继承自抽象类BaseTypeHandler<T>,实现抽象方法

2、在mybatis-config.xml配置文件的Configuration中注册自定义的TypeHandler

3、在Mapper.xml中使用自定义的TypeHandler

示例:

MyBooleanTypeHandler.java

public class MyBooleanTypeHandler extends BaseTypeHandler<Boolean> {
public void setNonNullParameter(PreparedStatement preparedStatement, int i, Boolean aBoolean, JdbcType jdbcType) throws SQLException {
preparedStatement.setString(i, String.valueOf(aBoolean));
} public Boolean getNullableResult(ResultSet resultSet, String s) throws SQLException {
String r = resultSet.getString(s);
if (r != null && !r.equals("")){
return Boolean.parseBoolean(r);
}
return null;
} public Boolean getNullableResult(ResultSet resultSet, int i) throws SQLException {
String r = resultSet.getString(i);
if (r != null && !r.equals("")){
return Boolean.parseBoolean(r);
}
return null;
} public Boolean getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
String r = callableStatement.getString(i);
if (r != null && !r.equals("")){
return Boolean.parseBoolean(r);
}
return null;
}
}

Mybatis-config.xml

<?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="jdbc.properties"/> <typeAliases>
<package name="com.learn.pojo"/>
</typeAliases> <typeHandlers>
<typeHandler handler="com.learn.type.MyBooleanTypeHandler"/>
</typeHandlers> <environments default="dev">
<environment id="dev">
<transactionManager type="JDBC">
</transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments> <mappers>
<mapper resource="Mapper/UserMapper.xml"/>
</mappers> </configuration>

UserMapper.xml

<insert id="addUser" parameterType="user">
insert into user (userName, password, isLogin)
values (#{userName}, #{password} #{isLogin, typeHandler=com.learn.type.MyBooleanTypeHandler});
</insert>

注册自定义TypeHandler有两种方法:

1、在mybatis-config.xml中配置

<typeHandlers>
<typeHandler handler="com.learn.type.MyBooleanTypeHandler" javaType="boolean" jdbcType="VARCHAR"/>
</typeHandlers>

2、使用注解配置

@MappedJdbcTypes(JdbcType.VARCHAR)
@MappedTypes(java.lang.Boolean.class)
public class MyBooleanTypeHandler extends BaseTypeHandler<Boolean> {...}

使用自定义注解一般有两种方式:

1、

<insert id="addUser" parameterType="user">
insert into user (userName, password, isLogin)
values (#{userName}, #{password}, #{isLogin, typeHandler=com.learn.type.MyBooleanTypeHandler});
</insert>

2、

<insert id="addUser" parameterType="user">
insert into user (userName, password, isLogin)
values (#{userName}, #{password}, #{isLogin, javaType=java.lang.Boolean, jdbcType=VARCHAR});
</insert>

自定义 TypeHandler的更多相关文章

  1. MyBatis使用自定义TypeHandler转换类型的实现方法

    From: http://www.manongjc.com/article/15577.html 这篇文章主要介绍了MyBatis使用自定义TypeHandler转换类型的实现方法,本文介绍使用Typ ...

  2. MyBatis使用自定义TypeHandler转换类型

    MyBatis虽然有很好的SQL执行性能,但毕竟不是完整的ORM框架,不同的数据库之间SQL执行还是有差异. 笔者最近在升级 Oracle 驱动至 ojdbc 7 ,就发现了处理DATE类型存在问题. ...

  3. Mybatis实战之自定义TypeHandler处理枚举

    在Mybatis中,处理枚举类的TypeHandler有两个: EnumTypeHandler: 用于保存枚举名 EnumOrdinalTypeHandler: 用于保存枚举的序号. 在实际项目中,以 ...

  4. mybatis实现自定义typeHandler

    java8以前的日期处理有多恶心,相信不少人都深有体会.与mabatis集成查询数据库中的日期字段映射为java日期类型或者字符型的时候,会多出一个".0".当然可以自行处理.但是 ...

  5. 使用mybatis中的自定义TypeHandler处理PostgreSQL中的Json类型字段

    业务扩展字段在PostgreSQL数据库中经常会使用json格式的数据来存储,然而mybatis默认是没有实现json类型字段对应的TypeHandler,所以一般我们需要自定义mybatis的Typ ...

  6. Mybatis自定义TypeHandler解决特殊类型转换问题

    我们知道,Java和MySQL中的数据类型是不同的,Java中除了基本数据类型,还有对象. 有时候使用MySQL存储数据,或者从MySQL中读取数据时,会有一些特殊需求

  7. MyBatis自定义数据映射TypeHandler

    从网上看到的帖子,感觉内容非常好,拷过来的(不愿意转载,不然被作者删除了,这么好的帖子就看不到了). 原文:http://my.oschina.net/amoshuang/blog/134199 在M ...

  8. mybatis-枚举类型的typeHandler&自定义枚举类型typeHandler

    MyBatis内部提供了两个转化枚举类型的typeHandler给我们使用. org.apache.ibatis.type.EnumTypeHandler 是使用枚举字符串名称作为参数传递的 org. ...

  9. 深入浅出Mybatis系列(五)---TypeHandler简介及配置(mybatis源码篇)

    上篇文章<深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)>为大家介绍了mybatis中别名的使用,以及其源码.本篇将为大家介绍TypeH ...

随机推荐

  1. POJ1077 Eight —— IDA*算法

    主页面:http://www.cnblogs.com/DOLFAMINGO/p/7538588.html 代码一:像BFS那样,把棋盘数组放在结构体中. #include <iostream&g ...

  2. Java 网络处理(net io URL 等)

    1. URL 类 URL 类的两个重要方法: openStream():打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream. URL url = new URL(" ...

  3. python+selenium高亮显示正在操作的页面元素

    原文地址:https://blog.csdn.net/wxstar8/article/details/80801405 from selenium import webdriver import un ...

  4. vue 使用font-awesome 只需两步

    npm 安装font-awesome 以及需要的所有依赖 cnpm install less less-loader css-loader style-loader file-loader font- ...

  5. In-App Purchase Programming Guide----(二) ---- Designing Your App’s Products

    Designing Your App’s Products A product is something you want to sell in your app’s store. You creat ...

  6. 022--python 模块介绍和time模块

    一.模块的含义 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代 ...

  7. python mixin到底是什么 django

    1.什么是Mixin 在面向对象编程中,Mixin是一种类,这种类包含了其他类要使用的方法,但不必充当其他类的父类.其他类是如何获取Mixin中的方法因语言的不同而不同.所以有时候Mixin被描述为' ...

  8. android 四大组件详解

    这个文章主要是讲Android开发的四大组件,本文主要分为 一.Activity详解二.Service详解三.Broadcast Receiver详解四.Content Provider详解外加一个重 ...

  9. [转载]OI省选算法汇总

    简单列了一点 1.1 基本数据结构 数组 链表,双向链表 队列,单调队列,双端队列 栈,单调栈 1.2 中级数据结构 堆 并查集与带权并查集 hash 表 自然溢出 双hash 1.3 高级数据结构 ...

  10. “玲珑杯”线上赛 Round #17 河南专场 A: Sin your life(和化积公式)

    传送门 题意 略 分析 首先将sin(x)+sin(y)+sin(z)h转化成\(2*sin(\frac{x+y}2)*cos(\frac{x-y}2)+sin(z)\),而cos(z)=cos(-z ...