自定义 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 ...
随机推荐
- javaScript实现增删改查
自己写的一个html+javaScript实现增删改查小实例.下面是js代码1. [代码][JavaScript]代码 //1.创建受捐单位数组var arrOrgData = [ { & ...
- codeforces 441B. Valera and Fruits 解题报告
题目链接:http://codeforces.com/problemset/problem/441/B 题目意思:有 n 棵fruit trees,每课水果树有两个参数描述:水果成熟的时间和这棵树上水 ...
- SILVERLIGHT实现对HTML DOM的访问
实现对HTML DOM的访问.Silverlight 2在命名空间System.Windows.Browser下内置了很多对于HTML DOM访问和操作的支持,我们最常用的一个对象是HtmlEleme ...
- Barn Repair
链接 分析:我们不断统计相邻两个元素之间的差值,按照差值从大到小排序,在进行贪心即可 /* PROB:barn1 ID:wanghan LANG:C++ */ #include "iostr ...
- [CQOI 2015] 任务查询系统
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3932 [算法] 首先 , 我们可以将(Si , Ei , Pi)转化为在Si处加入P ...
- AJAX路径问题
如果发AJAX请求,看发送请求消息的路径,如果看到报404的错,而这个 时候看下发送头部的路径,如果看到%20,这个时候有可能就是写路劲的时候,不小心按了一个空格
- vue 基本知识整理
1 每个Vue.js应用都是通过构造函数Vue创建一个Vue的根实例 2 可以扩展Vue构造器,从而使用预定义选项创建可复用的组件构造器 所有的Vue.js组件其实都是被扩展的Vue实例 每一个VUE ...
- CS231n 2016 通关 第二章-KNN
课程内容全纪录: 1.讲解图像分类的难点 1.光照强度 2.主体变形 3.主体与背景咬合 4.主体与背景相接近 5.同类别间存在区别 2.KNN 1.最近邻算法 2.Knn 3.hyperpara ...
- 链表中获取倒数第K个结点
/* * 链表中查找倒数第K个结点.cpp * * Created on: 2018年5月1日 * Author: soyo */ #include<iostream> using nam ...
- 指针 * &
int main() { ; //定义int变量updates int * p_updates; //定义指针p_updates p_updates=&updates;//将updates的地 ...