欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis實(shí)現(xiàn)自定義類(lèi)型轉(zhuǎn)換器TypeHandler的方法

 更新時(shí)間:2016年07月22日 10:38:19   投稿:mrr  
Mybatis實(shí)現(xiàn)自定義的轉(zhuǎn)換器非常的簡(jiǎn)單,只需要三步就可以實(shí)現(xiàn)自定義類(lèi)型轉(zhuǎn)換器TypeHandler,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看下吧

先給大家簡(jiǎn)單介紹下mybatis

MyBatis是一個(gè)支持普通SQL查詢(xún),存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架。MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及對(duì)結(jié)果集的檢索封裝。MyBatis可以使用簡(jiǎn)單的XML或注解用于配置和原始映射,將接口和Java的POJO(Plain Old Java Objects,普通的Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄。

此文其實(shí)是java操作Oracle類(lèi)型XMLType總結(jié)二:使用Mybatis附帶的一篇小結(jié)。

Mybatis實(shí)現(xiàn)自定義的轉(zhuǎn)換器,十分的簡(jiǎn)單,其主要步驟分為三步,這里以操作XMLType類(lèi)型為例。

第一步

新建一個(gè)轉(zhuǎn)換類(lèi),實(shí)現(xiàn)TypeHandler接口,接口的泛型指定參數(shù)類(lèi)型,不指定則為Object:

public class XmltypeTypeHandler implements TypeHandler<String>

該接口主要有以下4個(gè)方法:

public void setParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) public String getResult(ResultSet rs, String columnName) throws SQLException
public String getResult(ResultSet rs, int columnIndex) throws SQLException
public String getResult(CallableStatement cs, int columnIndex) throws SQLException

方法的作用看名字應(yīng)該就能明白,setParameter是傳入?yún)?shù)時(shí)的操作,在參數(shù)傳入到數(shù)據(jù)庫(kù)前需要做加工處理的代碼,可以寫(xiě)在該方法內(nèi),其它三個(gè)均為獲取查詢(xún)結(jié)果方法,在得到j(luò)dbc的查詢(xún)結(jié)果后可以轉(zhuǎn)換為任意你想要的類(lèi)型。

第二步

在mapper-config中,注冊(cè)你實(shí)現(xiàn)的轉(zhuǎn)換器類(lèi),其中jdbcType可以指定的類(lèi)型在Mybatis的枚舉類(lèi)org.apache.ibatis.type.JdbcType中有明確的定義,不能為該枚舉以外的值,不然會(huì)出錯(cuò)。這里因?yàn)槊杜e中沒(méi)有我們需要的XMLType類(lèi)型,所以指定為UNDEFINED。(也可以不指定具體的類(lèi)型,在使用時(shí)用typeHandler指定具體的類(lèi)即可):

<typeHandlers>
<typeHandler javaType="string" jdbcType="UNDEFINED" handler="com.tyyd.dw.context.XmltypeTypeHandler"/>
</typeHandlers>

第三步

在你的mapper映射文件中使用類(lèi)型轉(zhuǎn)換器:

insert into T_Content(
<include refid="fullColumns"/>
) values (
#{controlId,jdbcType=BIGINT},
#{xmlFile,javaType=string,jdbcType=UNDEFINED,typeHandler=com.tyyd.dw.context.XmltypeTypeHandler},
#{drmFile,jdbcType=BLOB}
)

注意傳入的xmlFile參數(shù),指定了javaType、jdbcType和typeHandler,表明我們要使用哪個(gè)類(lèi)型處理器,當(dāng)然你也可以只指定其中的某一項(xiàng),但是該項(xiàng)存在必須唯一,如果一模一樣存在多個(gè)又指定不清晰的話(huà),Mybatis會(huì)因?yàn)椴荒苓M(jìn)行區(qū)分而出現(xiàn)錯(cuò)誤。

至此,一個(gè)mybatis的自定義類(lèi)型轉(zhuǎn)換器就實(shí)現(xiàn)完成了,需要注意的是,上面指定的類(lèi)型處理器僅在插入數(shù)據(jù)時(shí)起作用,想要在查詢(xún)時(shí)也使用自定義的類(lèi)型處理器,需要在resultMap內(nèi)屬性的標(biāo)簽中進(jìn)行指定,其指定的標(biāo)簽javaType、jdbcType和typeHandler名稱(chēng)和使用方式都是一樣的,這里就不再贅述。

附上完整的類(lèi)型轉(zhuǎn)換器代碼,因?yàn)閄MLType類(lèi)型要查詢(xún)時(shí),可以使用數(shù)據(jù)庫(kù)的xmltype.getclobval()直接返回當(dāng)成string來(lái)操作,所以返回的方法都沒(méi)有進(jìn)行特殊處理。(也可以使用xmltype.getstringval()函數(shù)返回string,但在實(shí)際使用過(guò)程中發(fā)現(xiàn)當(dāng)字段為null時(shí),getstringval()會(huì)出現(xiàn)ORA-06502:numeric or value error:character string buffer too small的錯(cuò)誤,getclobval()則不會(huì)出現(xiàn)錯(cuò)誤,所以推薦使用getclobval()函數(shù)):

/**
* oracle SYS.XMLTYPE 類(lèi)型自定義處理器
* 
* User: liyd
* Date: 13-12-27
* Time: 下午4:53
*/
public class XmltypeTypeHandler implements TypeHandler<String> {
@Override
public void setParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType)
throws SQLException {
//防止為null時(shí),創(chuàng)建XMLType出現(xiàn)錯(cuò)誤
if (StringUtils.isNotBlank(parameter)) {
DelegatingConnection connection = (DelegatingConnection) ps.getConnection()
.getMetaData().getConnection();
XMLType xmltype = XMLType.createXML(connection.getDelegate(), parameter);
ps.setObject(i, xmltype);
} else {
ps.setString(i, null);
}
}
@Override
public String getResult(ResultSet rs, String columnName) throws SQLException {
//數(shù)據(jù)庫(kù)sql查詢(xún)時(shí)xmltype字段使用xmltype.getclobval()返回
return rs.getString(columnName);
}
@Override
public String getResult(ResultSet rs, int columnIndex) throws SQLException {
return rs.getString(columnIndex);
}
@Override
public String getResult(CallableStatement cs, int columnIndex) throws SQLException {
return cs.getString(columnIndex);
}
}

以上所述是小編給大家介紹的Mybatis實(shí)現(xiàn)自定義類(lèi)型轉(zhuǎn)換器TypeHandler的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • SpringBoot整合Mybatis注解開(kāi)發(fā)的實(shí)現(xiàn)代碼

    SpringBoot整合Mybatis注解開(kāi)發(fā)的實(shí)現(xiàn)代碼

    這篇文章主要介紹了SpringBoot整合Mybatis注解開(kāi)發(fā)的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Java面試題之MD5加密的安全性詳解

    Java面試題之MD5加密的安全性詳解

    MD5 是 Message Digest Algorithm 的縮寫(xiě),譯為信息摘要算法,它是 Java 語(yǔ)言中使用很廣泛的一種加密算法。本文將通過(guò)示例討論下MD5的安全性,感興趣的可以了解一下
    2022-10-10
  • 聊聊MultipartFile與File的一些事兒

    聊聊MultipartFile與File的一些事兒

    這篇文章主要介紹了MultipartFile與File的一些事兒,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Springboot中@RequestParam和@PathVariable的用法與區(qū)別詳解

    Springboot中@RequestParam和@PathVariable的用法與區(qū)別詳解

    這篇文章主要介紹了Springboot中@RequestParam和@PathVariable的用法與區(qū)別詳解,RESTful API設(shè)計(jì)的最佳實(shí)踐是使用路徑參數(shù)來(lái)標(biāo)識(shí)一個(gè)或多個(gè)特定資源,而使用查詢(xún)參數(shù)來(lái)對(duì)這些資源進(jìn)行排序/過(guò)濾,需要的朋友可以參考下
    2024-01-01
  • 在Spring Boot中使用Spark Streaming進(jìn)行實(shí)時(shí)數(shù)據(jù)處理和流式計(jì)算的步驟

    在Spring Boot中使用Spark Streaming進(jìn)行實(shí)時(shí)數(shù)據(jù)處理和流式計(jì)算的步驟

    這篇文章主要介紹了在Spring Boot中使用Spark Streaming進(jìn)行實(shí)時(shí)數(shù)據(jù)處理和流式計(jì)算,通過(guò)本文的介紹,我們了解了在Spring Boot中使用Spark Streaming進(jìn)行實(shí)時(shí)數(shù)據(jù)處理和流式計(jì)算的詳細(xì)步驟,需要的朋友可以參考下
    2024-03-03
  • 詳解pom.xml中maven profile的激活方式

    詳解pom.xml中maven profile的激活方式

    本文主要介紹了詳解pom.xml中maven profile的激活方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • java遠(yuǎn)程連接Linux執(zhí)行命令的3種方式完整代碼

    java遠(yuǎn)程連接Linux執(zhí)行命令的3種方式完整代碼

    在一些Java應(yīng)用程序中需要執(zhí)行一些Linux系統(tǒng)命令,例如服務(wù)器資源查看、文件操作等,這篇文章主要給大家介紹了關(guān)于java遠(yuǎn)程連接Linux執(zhí)行命令的3種方式,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • 詳解AOP與Filter攔截請(qǐng)求打印日志實(shí)用例子

    詳解AOP與Filter攔截請(qǐng)求打印日志實(shí)用例子

    這篇文章主要介紹了詳解AOP與Filter攔截請(qǐng)求打印日志實(shí)用例子,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • Mybatis-Plus3.x的創(chuàng)建步驟及使用教程

    Mybatis-Plus3.x的創(chuàng)建步驟及使用教程

    MyBatis-Plus是一個(gè)?MyBatis?的增強(qiáng)工具,在?MyBatis?的基礎(chǔ)上只做增強(qiáng)不做改變,為?簡(jiǎn)化開(kāi)發(fā)、提高效率而生,這篇文章主要介紹了Mybatis-Plus3.x的使用,需要的朋友可以參考下
    2023-10-10
  • Java實(shí)現(xiàn)全排列的三種算法詳解

    Java實(shí)現(xiàn)全排列的三種算法詳解

    從n個(gè)不同元素中任取m(m≤n)個(gè)元素,按照一定的順序排列起來(lái),叫做從n個(gè)不同元素中取出m個(gè)元素的一個(gè)排列。當(dāng)m=n時(shí)所有的排列情況叫全排列。本文總結(jié)了Java實(shí)現(xiàn)全排列的三種算法,需要的可以參考下
    2022-06-06

最新評(píng)論