1. 程式人生 > >互聯網輕量級框架SSM-查缺補漏第四天

互聯網輕量級框架SSM-查缺補漏第四天

系統 類型 承擔 param apt 名稱 4.5 base ram

  簡言:昨天第四章沒看完,今天接著記吧。

  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-查缺補漏第四天