互联网轻量级框架SSM-查缺补漏第四天

Posted shiboinfo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了互联网轻量级框架SSM-查缺补漏第四天相关的知识,希望对你有一定的参考价值。

  简言:昨天第四章没看完,今天接着记吧。

 

  4.5 typeHandler 类型转换器

  顾名思义呀,就是将数据库中数据类型与Java数据类型做相互转换的处理器。在typeHandler中,分为jdbcType和javaType,其中jdbcType用于定义数据库类型,而javaType用于定义Java类型,那么typeHandler的作用是承担二者之间的转换。

  它也分称系统定义的,也有自定义的。系统的没事可记的,看看就懂了,自定义typeHandler必须实现接口typerHandler或者继承BaseTypeHandler

  我觉得用法很重要。有两种用法,一种是制定了自定义typeHandler一致的jdbcType和javaType,另一种是直接使用typeHandler指定具体的实现类。

首先都要在配置中配置

<typeHandlers>
        <typeHandler jdbcType="VARCHAR" javaType="string" handler="com.learn.ssm.chapter4.typehandler.MyTYpeHandler"/>
</typeHandlers>
<!--第一种:用配置中一样的jdbcType和javaType-->
<select id="fintRoles" parameterType="String" resultType="role">
        select id,role_name as roleName,note from t_role
        where role_name like concat(‘%‘,#{roleName, jdbcType=VARCHAR,javaType=string},‘%‘)
</select>

<!--第二种:直接用具体的实现类-->
<select id="fintRoles2" parameterType="String" resultType="role">
        select id,role_name as roleName,note from t_role
        where role_name like concat(‘%‘,#{note, typeHandler=com.learn.ssm.chapter4.typehandler.MyTypeHandler},‘%‘)
</select>

  在绝大多数情况下,typeHandler因为枚举而使用,MyBatis已经定义了两个类作为枚举类型的支持

  • EnumOrdinalTypeHandler
  • EnumTypeHandler

  EnumOrdinalTypeHandler是按MyBatis根据枚举数组下标索引的方式进行匹配的,要求数据库返回一个整数作为其下标。

我就简单记一下例子把,如果有枚举SexEnum,中有MALE(1,"男"),FEMALE(2,"女")两条,在POJO中sex的类型定义为SexEnum类型。再在resultMap中添加

<result property="sex" column="sex" typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler">

数据库中的sex字段的值若是1或2,执行查询返回值就是男或女。

  EnumTypeHandler还会发使用名称转换成对应的枚举,比如它会根据数据库返回的字符串“MALE”,进行Enum。valueOf(SexEnum.class,"MALE");转换。

 

以上是关于互联网轻量级框架SSM-查缺补漏第四天的主要内容,如果未能解决你的问题,请参考以下文章

互联网轻量级框架SSM-查缺补漏第七天(MyBatis的解析和运行原理)

互联网轻量级框架SSM-查缺补漏第八天(MyBatis插件plugin使用及原理)

Java EE互联网轻量级框架整合开发— SSM框架(中文版带书签)原书代码

「查缺补漏」巩固你的Nginx知识体系

Android查缺补漏(线程篇)-- AsyncTask的使用及原理详细分析

查缺补漏系统学习 EF Core 6