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

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

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

先給大家簡單介紹下mybatis

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

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

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

第一步

新建一個(gè)轉(zhuǎn)換類,實(shí)現(xiàn)TypeHandler接口,接口的泛型指定參數(shù)類型,不指定則為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ù)庫前需要做加工處理的代碼,可以寫在該方法內(nèi),其它三個(gè)均為獲取查詢結(jié)果方法,在得到j(luò)dbc的查詢結(jié)果后可以轉(zhuǎn)換為任意你想要的類型。

第二步

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

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

第三步

在你的mapper映射文件中使用類型轉(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è)類型處理器,當(dāng)然你也可以只指定其中的某一項(xiàng),但是該項(xiàng)存在必須唯一,如果一模一樣存在多個(gè)又指定不清晰的話,Mybatis會因?yàn)椴荒苓M(jìn)行區(qū)分而出現(xiàn)錯(cuò)誤。

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

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

/**
* oracle SYS.XMLTYPE 類型自定義處理器
* 
* 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ù)庫sql查詢時(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)自定義類型轉(zhuǎn)換器TypeHandler的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java文件分級目錄打包下載zip的實(shí)例代碼

    Java文件分級目錄打包下載zip的實(shí)例代碼

    這篇文章主要介紹了Java文件分級目錄打包下載zip的實(shí)例代碼,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • MyBatis Mapper中 @Select注解調(diào)用靜態(tài)常量的問題分析

    MyBatis Mapper中 @Select注解調(diào)用靜態(tài)常量的問題分析

    在Java編碼中,我們通常會把這些數(shù)字或者字符串定義在常量類或者接口中,可以直接在mapper中也可以使用這些常量就比較好,這篇文章主要介紹了MyBatis Mapper中 @Select注解調(diào)用靜態(tài)常量,需要的朋友可以參考下
    2023-06-06
  • SpringAnimation 實(shí)現(xiàn)菜單從頂部彈出從底部消失動畫效果

    SpringAnimation 實(shí)現(xiàn)菜單從頂部彈出從底部消失動畫效果

    最近做項(xiàng)目遇到這樣一個(gè)需求,要求實(shí)現(xiàn)一種菜單,菜單從頂部彈入,然后從底部消失,頂部彈入時(shí),有一個(gè)上下抖動的過程,底部消失時(shí),先向上滑動,然后再向下滑動消失。下面給大家?guī)砹藢?shí)現(xiàn)代碼,感興趣的朋友一起看看吧
    2018-05-05
  • Spring @Async 注解異步調(diào)用失效的五種解決方案

    Spring @Async 注解異步調(diào)用失效的五種解決方案

    加上了@Async 注解,期待它能異步執(zhí)行,結(jié)果發(fā)現(xiàn)它還是同步執(zhí)行的?更困惑的是,同樣的注解在其他地方卻能正常工作,這個(gè)問題困擾了很多 Java 開發(fā)者,尤其是當(dāng)你在同一個(gè)類中調(diào)用帶有@Async 注解的方法時(shí),今天,我們就來深入解析這個(gè)問題的原因,并提供多種實(shí)用的解決方案
    2025-05-05
  • springboot-jta-atomikos多數(shù)據(jù)源事務(wù)管理實(shí)現(xiàn)

    springboot-jta-atomikos多數(shù)據(jù)源事務(wù)管理實(shí)現(xiàn)

    本文主要介紹了springboot-jta-atomikos多數(shù)據(jù)源事務(wù)管理實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:考拉茲猜想 Collatz Conjecture

    Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:考拉茲猜想 Collatz Conjecture

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:考拉茲猜想 Collatz Conjecture,本文直接給出實(shí)現(xiàn)代碼,代碼中包含詳細(xì)注釋,需要的朋友可以參考下
    2015-06-06
  • 新手初學(xué)Java List 接口

    新手初學(xué)Java List 接口

    這篇文章主要介紹了Java集合操作之List接口及其實(shí)現(xiàn)方法,詳細(xì)分析了Java集合操作中List接口原理、功能、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2021-07-07
  • Java編程求二叉樹的鏡像兩種方法介紹

    Java編程求二叉樹的鏡像兩種方法介紹

    這篇文章主要介紹了Java編程求二叉樹的鏡像兩種方法介紹,分享了兩種方法,遞歸與非遞歸,每種方法又分別介紹了兩種解決思路,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • 在RabbitMQ中實(shí)現(xiàn)Work queues工作隊(duì)列模式

    在RabbitMQ中實(shí)現(xiàn)Work queues工作隊(duì)列模式

    這篇文章主要介紹了如何在RabbitMQ中實(shí)現(xiàn)Work queues模式,代碼詳細(xì),解釋清晰,可以幫助大家更好理解java,對這方面感興趣的朋友可以參考下
    2021-04-04
  • Java集合ConcurrentHashMap詳解

    Java集合ConcurrentHashMap詳解

    ConcurrentHashMap?是?J.U.C?包里面提供的一個(gè)線程安全并且高效的?HashMap,所以ConcurrentHashMap?在并發(fā)編程的場景中使用的頻率比較高
    2023-01-01

最新評論