自定义 TypeHandler
自定义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的更多相关文章
- MyBatis使用自定义TypeHandler转换类型的实现方法
From: http://www.manongjc.com/article/15577.html 这篇文章主要介绍了MyBatis使用自定义TypeHandler转换类型的实现方法,本文介绍使用Typ ...
- MyBatis使用自定义TypeHandler转换类型
MyBatis虽然有很好的SQL执行性能,但毕竟不是完整的ORM框架,不同的数据库之间SQL执行还是有差异. 笔者最近在升级 Oracle 驱动至 ojdbc 7 ,就发现了处理DATE类型存在问题. ...
- Mybatis实战之自定义TypeHandler处理枚举
在Mybatis中,处理枚举类的TypeHandler有两个: EnumTypeHandler: 用于保存枚举名 EnumOrdinalTypeHandler: 用于保存枚举的序号. 在实际项目中,以 ...
- mybatis实现自定义typeHandler
java8以前的日期处理有多恶心,相信不少人都深有体会.与mabatis集成查询数据库中的日期字段映射为java日期类型或者字符型的时候,会多出一个".0".当然可以自行处理.但是 ...
- 使用mybatis中的自定义TypeHandler处理PostgreSQL中的Json类型字段
业务扩展字段在PostgreSQL数据库中经常会使用json格式的数据来存储,然而mybatis默认是没有实现json类型字段对应的TypeHandler,所以一般我们需要自定义mybatis的Typ ...
- Mybatis自定义TypeHandler解决特殊类型转换问题
我们知道,Java和MySQL中的数据类型是不同的,Java中除了基本数据类型,还有对象. 有时候使用MySQL存储数据,或者从MySQL中读取数据时,会有一些特殊需求
- MyBatis自定义数据映射TypeHandler
从网上看到的帖子,感觉内容非常好,拷过来的(不愿意转载,不然被作者删除了,这么好的帖子就看不到了). 原文:http://my.oschina.net/amoshuang/blog/134199 在M ...
- mybatis-枚举类型的typeHandler&自定义枚举类型typeHandler
MyBatis内部提供了两个转化枚举类型的typeHandler给我们使用. org.apache.ibatis.type.EnumTypeHandler 是使用枚举字符串名称作为参数传递的 org. ...
- 深入浅出Mybatis系列(五)---TypeHandler简介及配置(mybatis源码篇)
上篇文章<深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)>为大家介绍了mybatis中别名的使用,以及其源码.本篇将为大家介绍TypeH ...
随机推荐
- POJ3268 Silver Cow Party —— 最短路
题目链接:http://poj.org/problem?id=3268 Silver Cow Party Time Limit: 2000MS Memory Limit: 65536K Total ...
- POJ3104 Drying —— 二分
题目链接:http://poj.org/problem?id=3104 Drying Time Limit: 2000MS Memory Limit: 65536K Total Submissio ...
- fuse的write过程到底是怎么样的,128KB的buffer怎么用?
1. 在fuse/lib/fuse_kern_chan.c中有一个buffer设置 #define MIN_BUFSIZE 0x21000 //十进制132×1024 //为何不是128? 下面有一 ...
- java web项目的目录结构
- sscanf在字符串中的一些使用
弟弟的作业 你的弟弟刚做完了"100以内数的加减法"这部分的作业,请你帮他检查一下.每道题目(包括弟弟的答案)的格式为a+b=c或者a-b=c,其中a和b是作业中给出的,均为不超过 ...
- FTOUR2 - Free tour II
传送门 题目翻译的很清楚……似乎点分治的题题目描述都非常简洁. 还是那个操作,一条路径要么全部在一棵子树中,要么经过当前的重心,所以考虑点分治. 首先dfs求出重心的每一棵子树中,有i个黑点的最长路径 ...
- AutoIt: send 命令 VS ControlClick的使用
2008年的时候第一次接触AutoIt,当时觉得局限性太多了,就不想学,觉得把Watir,Ruby搞好就行了. 最近一段时间比较闲,发现自己对GUI的自动化操完全是短板,就把AutoIt重新拾起来了. ...
- JS 之正则表达式
字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界. -或- 对 ...
- bzoj4556
后缀自动机+二分+倍增+线段树合并 后缀自动机真好用 后面一个串是固定的,那么我们要对前面的串进行一些操作.我们想既然是求lcp,那么我们得先翻转原串,这样前缀变成了后缀,然后二分一下,从d在自动机上 ...
- B. Color the Fence
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...