自定义 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 ...
随机推荐
- SDUT OJ 2892 A (字典树问题-输出出现次数最多的字符串的出现次数,60ms卡时间,指针+最后运行完释放内存)
A Time Limit: 60ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 给出n(1<= n && n <= 2*10^6)个字 ...
- CentOS7 安装jdk8
1.下载jdk8 jdk-8u162-linux-x64.tar.gz 2.解压 tar -vxf jdk-8u162-linux-x64.tar.gz 3.进入 jdk1.8.0_162 文件夹 终 ...
- Java 绘制环形的文字 (Circle Text Demo)
1. [代码]CircleTextDemo.java import java.awt.*;import java.awt.event.*;import java.awt.geom.*; /** ...
- 1Q84 BOOK 1-3 笔记
1Q84 BOOK 1-3 村上春树 18个笔记 ◆ 第2章 青豆 不要被外表迷惑 >> 在这三十年的人生中,究竟听过多少次同样的台词?为了这个姓氏,曾经多少次遭人调侃?如果不 ...
- Echarts饼状图
<head> <meta charset="utf-8"> <title>ECharts</title> <script sr ...
- maven(一)创建一个maven的web项目
一.创建项目 1.Eclipse中用Maven创建项目 上图中Next 2.继续Next 3.选maven-archetype-webapp后,next 4.填写相应的信息,Packaged是默认创建 ...
- FTP服务相关实现
FTP服务的相关实现 vsftpd介绍 1>vsftpd全名为very secure FTP daemon,为非常安全的FTP服务,是针对操作系统的权限来设计的,这个权限是发起者发起该服务进程的 ...
- Redis的相关命令
Redis的相关命令 redis程序的命令 /usr/bin/redis-benchmark /usr/bin/redis-check-aof /usr/bin/redis-check-rdb /us ...
- e_pro list 1
uncle n. 叔叔; 伯父; 舅父; 姑父,姨父; farm n. 农家; 农田; 农场,农庄; 畜牧场; corner n. 拐角; 角落,角; 困境; [商] 囤积; vi. 驾车转 ...
- TFS 用户设置read权限后仍然无法查看代码的问题
TFS 2013 在visual studio , team explorer , source control explorer 中点击 文件夹 右键菜单 Security 打开一个winform( ...