计算机系统应用教程网站

网站首页 > 技术文章 正文

Mybatis3系列 - 7. mybatis-config的typeHandlers属性

btikc 2024-09-18 08:37:28 技术文章 20 ℃ 0 评论

接下来先全局的说一下MyBatis的mybatis-config的typeAliases属性说明。

configuration 的映射文件(根据定义顺序说明)

  • properties 属性
  • settings 设置
  • typeAliases 类型别名
  • typeHandlers 类型处理器
  • objectFactory 对象工厂
  • objectWrapperFactory MyBatis对基本类型, 基本对象map和集合的封装.
  • reflectorFactory 反射模块工厂
  • plugins 插件
  • environments 环境配置
  • databaseIdProvider 数据库厂商标识
  • mappers 映射器


typeHandlers属性

无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型。下表描述了一些默认的类型处理器。对于这个属性来说, 就是说JdbcType的

从 3.4.5 开始,MyBatis 默认支持 JSR-310(日期和时间 API) 。


typeHandlers属性的实现基本上都在: org.apache.ibatis.type这个包下, 具体可以查看这个自己了解更多更详细的源码详情。也希望我能尽量的能够详细的说明使用方式.

具体jar包名为如下图:

处理的流程为:

使用jdbc进行数据读取, 在读取的同时, 根据类型处理器进行加工处理成Java类型. 并显示其对应的数据.

说白了, 也就是用来完成JavaType和JdbcType之间进行转换.

不管是mybatis-config中任何一个配置都是可以通过代码进行检索查询并看到对应的数据的。

所以, 编写一段代码进行查看Mybatis内置的typeHandle.

代码如下:

执行之后, 我们可以看到当前版本是有40个默认实现, 大家可以执行查看一下,

打开上面的每个文件都看一下, 你会发现自己自定义一个类型转换器很容易。

public class <T>TypeHandler extends BaseTypeHandler<T> 

所以简单的办法直接继承一个 org.apache.ibatis.type.BaseTypeHandler

然后重写相应的方法。使用默认的Integer来进行展示。

看到这里你会看到个很熟悉的类:PreparedStatement 所以先学习基础的Jdbc才是学习框架的第一步,经常说的地基打捞才能建造高楼大厦。

但是需要注意的是,默认实现是官方的所以会自动加载对应的信息,如果我们自己进行实现,你需要告诉Mybatis,我实现了一个新的类型处理器,所以可以通过以下方法进行告知它

<!-- mybatis-config.xml -->
<typeHandlers>
    <typeHandler handler="com.xymiao.mybatis3.typehandles.VarcharTypeHandler"/>
</typeHandlers>

具体代码最后会给出github地址。

这里我们写一个测试代码进行查看, 在实现里面加了一些输出一些字符串。

执行测试代码

测试结果如下:

从输出来看, 我们已经使用我们自定义的类型转换器. 一般情况下我们使用默认的类型转换器足够我们使用.

根据我们mybatis-config.dtd来看. 除了使用typeHandler 还可以使用package.

配置方式如下:

<!-- mybatis-config.xml -->
<typeHandlers>
    <package name="com.xymiao.mybatis3.typehandles"/>
</typeHandlers>

这里不在详细讲解这种方式, 等到后面的mybatis-mapper的时候在来详细的讲解这个.


全部代码已经上传到Github

GitHub地址: https://github.com/xymiao/mybatis3

本篇代码地址: https://github.com/xymiao/mybatis3/tree/master/mybatis3_06_mybatis_config_typehandlers

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表