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与之类型处理器_第1张图片

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

自定义处理器

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

Mybatis与之类型处理器_第2张图片

我们模仿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}”。

你可能感兴趣的:(Mybatis与之类型处理器)