Mybatis与之类型处理器

我们在使用mybatis获取数据库数据或者设置sql参数时,mybatis会将指定的java类型转成合适的数据库类型,一般情况下,使用mybatis预置的类型处理器都可以解决,刚开始写代码的时候总不知道对应数据库类型该使用哪种java类型与之对应,这里简单总结一下常见的数据库类型与java类型的对应,权当做个记录,没有技术含量。

java > mysql

int,integer > INTEGER

long,Long > LONG

float > FLOAT

double > DOUBLE

BigDecima > DECIMAL

String > CHAR,VARCHAR

byte[] > BLOB

Date > TIMESTAMP

Date > DATE

Date > DATE

以上基本覆盖了我们平时使用的大部分类型,我们定义实体类的时候根据数据库类型定义相应的java类型即可。

原理


接下来我们来看一下源码层面的处理,看他是如何完成转换的。

mybatis的java类型与数据库类型之间的转换通过各种TypeHandle来处理,我们以最常见的String类型来看一下mybatis的处理。

mybatis通过StringTypeHandler来映射java中的字符串与数据库中的字符类型,通过继承BaseTypehandler并实现父类4个方法来实现。方法也比较简单直接。。没啥可说的,第一次看源码的时候也没想到会这么简单。

自定义处理器

最后说一下如何自定义类型处理器

我们模仿StringTypeHandler继承BaseTypeHandler,其中@MappedJdbcType代表与之关联的jdbc类型,BaseType中的泛型代表其处理的java类型。定义完之后,有2种方式来使用它,分别是在mapper.xml文件中

1:“where NAME = #{name, jdbcType=VARCHAR, javaType=string}”

2:“where NAME = #{name, typeHandler=com.tl.ExampletypeHandler}”。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,056评论 2 89
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,708评论 0 4
  • 自赏于孤芳时, 润泽于雨露下, 沐浴于光亮中, 寄生于墙角旁, 独自在生命旅途中, 行进!
    苇琳工作室阅读 195评论 0 0
  • 立夏已过,又到了展露好身材的时节,大家纷纷换上了轻薄的衣衫,每到这个时候,身边朋友都会积极探寻减肥妙招,这不,最近...
    茜喵阅读 1,882评论 14 17
  • 有个帅哥名字叫“Shay Banon”,对就是这位。这是他2013年在dotScale大会上分享Elasticse...
    Hitman_Agent_47阅读 7,070评论 1 5