文档章节

mybaties源码解析(org.apache.ibatis.type)类型处理器

lackiechan
 lackiechan
发布于 2016/12/12 16:19
字数 340
阅读 13
收藏 0

此模块主要是实现MyBaties数据类型和jdbc中的数据类型的转换

一、TypeHandler接口作为参数转换的基础接口:

1、设定参数函数:

void setParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException;

2、通过ResultSet 解析类型  

T getResult(ResultSet rs, String columnName) throws SQLException;

T getResult(ResultSet rs, int columnIndex) throws SQLException;

3、通过CallableStatement解析类型

T getResult(CallableStatement cs, int columnIndex) throws SQLException;

 

二、BaseTypeHandler 是转换的基类,实现了TypeHandler<T>,增加setNonNullParameter()的模板函数和getNullableResult(ResultSet rs,String columnName)等模板函数,给子类具体实现。

三、异常类TypeException,继承org.apache.ibatis.exceptions.PersistenceException。

四、JdbcType 是个枚举类,针对jdbc的Types做转换,稍微包装一层,内部初始化了一个存储名为codeLookup 的key存储 TYPE_CODE,value存储JdbcType的内部静态变量map.

 

五、jdbc各种数据类型转换的具体子类。如SqlDateTypeHandler 

SqlDateTypeHandler  继承上面提到的基类BaseTypeHandler,实现父类的模板函数

setNonNullParameter,getNullableResult(ResultSet rs, String columnName),

getNullableResult(ResultSet rs, int columnIndex),

getNullableResult(CallableStatement cs, int columnIndex);

以上就是mybatis的type模块对jdbc标准的一个封装和优化。

还有一些封装,提供别名注解:Alias

对注解的知识理解可以参考链接http://www.cnphp6.com/archives/61315

建议详细了解jdbc的知识。框架就是对基础知识的更高程度的封装

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
lackiechan
粉丝 1
博文 8
码字总数 2456
作品 0
广州
mybaties源码解析(org.apache.ibatis.session Configuration 模块

Configuration 是用户对mybaties配置维护的类,通过io模块从xml配置文件读取配置文件。 集成的api有创建执行器,结果处理器、语句处理器、参数处理器和基础属性配置,还有多个静态成员变量维护...

lackiechan
2016/12/13
19
0
Mybaties报错Error querying database

Mybaties我们经常用到动态SQL,如下我们利用动态去做判断,这样写当然没问题,但是当我们不是去判断orgCode(本文中orgCode一直为String类型)是否为空而是判断orgCode是否是一个值的时候该怎...

王子城
07/18
0
0
有没有人在Jfinal中集成MyBaties,用MyBaties代替ActiveRecord

有没有人在Jfinal中集成MyBaties,用MyBaties代替ActiveRecord? 在使用JFinal中时,如果业务是和计算相关的时候,弱对象类型的Model就有些不合适了,一个好的思路是使用类似MyBaties的方式,...

萝卜哥
2013/12/06
2.7K
10
mybaties源码解析(org.apache.ibatis.session)session模块

一、SqlSession :常用接口SqlSession。实现java.io.Closeable。 主要集成了 1、查询类函数 selectXXX 2、插入类函数insertXXX 3、删除类函数delete 4、事务提交commit 5、回滚rollback 6、批...

lackiechan
2016/12/12
11
0
Java注解(Annotation)详解

Java注解(Annotation)详解 1.Annotation的概念 An annotation is a form of metadata, that can be added to Java source code. Classes, methods, variables, parameters and packages may......

幻海流心
05/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

内存模型是怎么解决缓存一致性的?

在再有人问你Java内存模型是什么,就把这篇文章发给他。这篇文章中,我们介绍过关于Java内容模型的来龙去脉。 我们在文章中提到过,由于CPU和主存的处理速度上存在一定差别,为了匹配这种差距...

Java填坑之路
12分钟前
1
0
vue-cli 3.0 初体验

最近复习了下vue,突然发现vue-cli已经更新到3.0版本了,并且变化蛮大,看来要不停的学习,真是一入前端深似海。 安装步骤: 1、全局安装 npm install -g @vue/cli Vue CLI 的包名称由 vue-...

tianyawhl
13分钟前
0
0
Angular进阶之路

【初级】会写页面,能出东西。 给定环境和 rest API,不用第三方库,能在十分钟内完成一个 master/detail 结构的带路由的应用(可以不管美观)。 知识点:Angular CLI、组件、路由、HTTP 服务...

陆小七的主页
16分钟前
0
0
Redis缓存数据库安全加固指导(一)

背景 在众多开源缓存技术中,Redis无疑是目前功能最为强大,应用最多的缓存技术之一,参考2018年国外数据库技术权威网站DB-Engines关于key-value数据库流行度排名,Redis暂列第一位,但是原生...

中间件小哥
16分钟前
0
0
百万级数据mysql分区

1. 什么是表分区? 表分区,是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分。从逻辑上看,只有一张表,但是底层却是由多个物理分区组成。 2. 表分区与分表的区别 分表...

罗文浩
19分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部