Mybatis实现自定义的typehandler三步曲

第一步实现接口TypeHandler<T>

@MappedJdbcTypes(JdbcType.TIMESTAMP)//此处如果不使用该注解,在myabtis-config.xml中注册该typehandler的时候需要写明jdbctype="TIMESTAMP"
@MappedTypes(DateTime.class)//此处如果不使用该注解,在myabtis-config.xml中注册该typehandler的时候需要写明javatype="com.sinosoft.sysframework.common.datatype.DateTime"
public class DateTimeHandler implements TypeHandler<DateTime> {

第二步注册typehandler

注册方式有两种

一种是单个注册

<typeHandlers>
<typeHandler handler="com.***.DateaTimeTypeHandler" javaType="[Ljava.lang.String;" jdbcType="VARCHAR"/>
</typeHandlers>

一种是批量注册

<mappers>
<mapper resource="com/tiantian/mybatis/mapper/UserMapper.xml"/>
<package name="com.tiantian.mybatis.mapperinterface"/>
</mappers>

如果使用第二种注册方式,jdbctype和javatype的声明只能通过注解的方式定义

第三步:使用:

1、查询结果集字段定义

<resultMap id="UserResult" type="User">
<id column="id" property="id"/>
<result column="interests" property="interests" javaType="[Ljava.lang.String;" jdbcType="VARCHAR"/>
</resultMap>

或者

<resultMap id="UserResult" type="User">
<id column="id" property="id"/>
<result column="interests" property="interests" typeHandler="com.tiantian.mybatis.handler.StringArrayTypeHandler" />
</resultMap>

即如果直接指明了typehandler类可以不用写javatype和jdbctype,即使写了mybatis也不用

2、传参数查询或者修改

<if test="txLogStatus != null">
txLogStatus = #{txLogStatus, typeHandler=com.rrcp.util.typehandlers.EventStatusTypeHandler},
</if>

同理此处的typehandler也可以换成jdbcType和javaType

总结:

注册的时候和使用的时候尽量保持一致或者都写完整,如果不统一,会找不到相应的typehandler从而报错,我们的目的是要正确使用typehandler的处理机制,并不想深究mybatis在注册和查找使用的算法,所以只要成功即可。有时间闲的蛋疼的哥们可以研究下,少注册一个属性,会产生什么后果,不过如果你研究透了,说不定myabtis的下个版本就改了。

以上所述是小编给大家介绍的Mybatis实现自定义的typehandler三步曲,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Mybatis实战之TypeHandler高级进阶

    上篇文章分享了在项目实战中自定义Mybatis的TypeHandler来处理枚举类型.文章结尾也指出了美中不足之处,那就是每次都需要指定我们自定义的枚举TypeHandler. 随着项目枚举类型的增多,每次都要写一遍这个会令人很反感.那么,本次我们就来解决这一痛点. 思路分析 上篇文章讲到, mybatis有默认的处理枚举类型的TypeHandler,因此,我们要将我们自定义的枚举TypeHandler注册进入Mybatis. 注册完我们自定义的TypeHandler后,还得告诉Mybatis只

  • Android使用百度语音识别的示例代码

    本文使用百度语音识别,完成语音识别的功能,使用百度语音识别,先要申请APP ID,这个直接到百度网站上有说明文档,本文不再赘述.申请之后,下载SDK包,按照百度官网要求,合并libs和res两个目录到项目中,然后在build.gradle(module:app)中的Android{...}下添加 sourceSets{ main{ jniLibs.srcDirs=['libs'] } } 这样, 百度语音识别的so文件才能正常使用. Manifest文件中添加权限 <uses-permissio

  • Mybatis中自定义TypeHandler处理枚举详解

    在Mybatis中,处理枚举类的TypeHandler有两个: EnumTypeHandler: 用于保存枚举名 EnumOrdinalTypeHandler: 用于保存枚举的序号. 在实际项目中,以上往往不能满足我们的需求. 需求分析 枚举需要包含两个属性,label(用于显示), value(实际的枚举值).数据库保存枚举值(value). 这很明显Mybatis提供的两个枚举TypeHandler不能满足我们的需求.此时,我们可以自定义一个通用的枚举TypeHandler来满足我们的需求.

  • Mybatis实现自定义类型转换器TypeHandler的方法

    先给大家简单介绍下mybatis MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 此文其实是java操作Oracle类型XMLType总结二:使用Mybatis附带的一篇小结. Mybatis实现自定义的转换器,

  • Mybatis实现自定义的typehandler三步曲

    第一步实现接口TypeHandler<T> @MappedJdbcTypes(JdbcType.TIMESTAMP)//此处如果不使用该注解,在myabtis-config.xml中注册该typehandler的时候需要写明jdbctype="TIMESTAMP" @MappedTypes(DateTime.class)//此处如果不使用该注解,在myabtis-config.xml中注册该typehandler的时候需要写明javatype="com.sinos

  • Go1.18新特性之泛型使用三步曲(小结)

    目录 01 Go中的泛型是什么 1.1 传统的函数编写方式 1.2 泛型函数编写方式 02 从泛型被加入之前说起 2.1 针对每一种类型编写一套重复的代码 2.2 使用空接口并通过类型断言来判定具体的类型 2.3 传递空接口并使用反射解析具体类型 2.4 通过自定义接口类型实现 03 深入理解泛型--泛型使用“三步曲” 3.1 第一步:类型参数化 3.2 第二步:给类型添加约束 3.3 第三步:类型参数实例化 04 泛型类型约束和普通接口的区别 总结 01 Go中的泛型是什么 众所周知,Go是一

  • ubuntu 16.04 64位兼容32位程序三步曲

    第一步:确认自己系统的架构 dpkg --print-architecture 输出: amd64 结果为 amd64 表示系统是64位的 第二步:确认打开了多架构支持功能 dpkg --print-foreign-architectures 输出: i386 如果这里没有输出i386,则需要打开多架构支持 sudo dpkg --add-architecture i386 sudo apt-get update 第三步:安装对应的32位的库 sudo apt-get dist-upgrade

  • go开源Hugo站点构建三步曲之集结渲染

    目录 Assemble PageState 动手实践 - Show Me the Code of Create a PageState Render 动手实践 - Show Me the Code of Publish Assemble Assemble所做的事情很纯粹,那就是创建站点页面实例 - pageState. 因为支持多站点,contentMaps有多个. 所以Assemble不仅要创建pageState,还需要管理好所有的pages,这就用到了PageMaps. type pageM

  • 打造计数器DIY三步曲(中)

    本篇将介绍在自己的镜像站上也能放上自己的计数器.     我以假设您有多个镜像站为例,首先在数据表中插入几个新的数据num.visited,这在你的镜像站上将用的着,只要将上篇中的count1.php改一下即可.     先建立一个文件夹count,里面放上您要用的文件count2.php,count3.php--,举个例子,如count2的源码,将count1.php改成: <? $linkptr=mysql_pconnect("localhost","yournam

  • 打造计数器DIY三步曲(下)

    中篇我向您介绍了怎样在自己的镜像站上放置OSO上的计数器,本篇我将向您介绍如何打造自己的免费计数器系统的构思,程序还得您自己写哟.     好多网站都提供了免费计数器服务,很久以前我就有个梦想,建立自己的免费计数器系统,而现在OSO提供了数据库,这一切将成为现实.     多数网站都是只向会员提供免费计数器的,我们也可以这样做,好让自己的网站也有上一些臣民,在他们注册的时候,可以自动生成一个ID,我们的计数器系统就全靠这个ID了!     当用户申请计数器时,首先当然是检查用户名和密码了,登陆成

  • 打造计数器DIY三步曲(上)

    人大多都很向往使用数据库来做自己的计数器,留言本,论坛之类的东西了,本篇将介绍本人自制的计数器程序.     首先建立0-9这10个GIF数字图片,放在img文件夹下,再建立一个PHP文件 --count1.php,程序如下: <? $linkptr=mysql_pconnect("localhost","yourname","password"); mysql_select_db("yourname",$linkptr

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

    MyBatis虽然有很好的SQL执行性能,但毕竟不是完整的ORM框架,不同的数据库之间SQL执行还是有差异. 笔者最近在升级 Oracle 驱动至 ojdbc 7 ,就发现了处理DATE类型存在问题.还好MyBatis提供了使用自定义TypeHandler转换类型的功能. 本文介绍如下使用 TypeHandler 实现日期类型的转换. 问题背景 项目中有如下的字段,是采用的DATE类型: birthday = #{birthday, jdbcType=DATE}, 在更新 Oracle 驱动之前

随机推荐