一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Mybatis實現自定義類型轉換器TypeHandler的方法

Mybatis實現自定義類型轉換器TypeHandler的方法

2020-05-31 13:04java教程網 JAVA教程

Mybatis實現自定義的轉換器非常的簡單,只需要三步就可以實現自定義類型轉換器TypeHandler,非常不錯,具有參考借鑒價值,感興趣的朋友一起看下吧

先給大家簡單介紹下mybatis

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

Mybatis實現自定義類型轉換器TypeHandler的方法

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

Mybatis實現自定義的轉換器,十分的簡單,其主要步驟分為三步,這里以操作XMLType類型為例。

第一步

新建一個轉換類,實現TypeHandler接口,接口的泛型指定參數類型,不指定則為Object:

?
1
public class XmltypeTypeHandler implements TypeHandler<String>

該接口主要有以下4個方法:

?
1
2
3
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

方法的作用看名字應該就能明白,setParameter是傳入參數時的操作,在參數傳入到數據庫前需要做加工處理的代碼,可以寫在該方法內,其它三個均為獲取查詢結果方法,在得到jdbc的查詢結果后可以轉換為任意你想要的類型。

第二步

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

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

第三步

在你的mapper映射文件中使用類型轉換器:

?
1
2
3
4
5
6
7
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參數,指定了javaType、jdbcType和typeHandler,表明我們要使用哪個類型處理器,當然你也可以只指定其中的某一項,但是該項存在必須唯一,如果一模一樣存在多個又指定不清晰的話,Mybatis會因為不能進行區分而出現錯誤。

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/**
* 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時,創建XMLType出現錯誤
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 {
//數據庫sql查詢時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實現自定義類型轉換器TypeHandler的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 顶级欧美做受xxx000大乳 | 红色一片在线影视 | 超级乱淫 不详 | 美女自插 | 国产精品天天看天天爽 | 午夜一区二区免费视频 | 久久99国产综合精品AV蜜桃 | 2022最新国产在线不卡a | 国产高清视频在线 | 精品国产乱码久久久久久免费流畅 | 日本不卡在线一区二区三区视频 | 国产精品久久久久久久久久久久久久 | 色屁屁www | 5g影院成人 | 精品视频免费在线 | 午夜在线观看免费完整直播网页 | 四川女人偷人真实视频 | 毛片免费观看 | 武侠艳妇屈辱的张开双腿 | 美女模特被c免费视频 | 亚洲成人网页 | 奇米影视小说 | 大胸纲手被羞羞漫画网站 | chinesexxxx高中生gay | 日韩毛片大全免费高清 | 花唇肿胀无法合拢双性 | 久久热在线视频精品1 | 午夜一区二区免费视频 | 日韩欧美中文字幕一区二区三区 | 国产精品国产高清国产专区 | 日本高清中文字幕视频在线 | 999精品视频这里只有精品 | 午夜一区二区免费视频 | 无遮挡免费h肉动漫在线观看 | 亚洲精品乱码久久久久久蜜桃图片 | 国产91在线免费 | 国产福利一区二区精品视频 | 国内精品伊人久久大香线焦 | 免费一级毛片完整版在线看 | 成人在线观看网站 | 人体欣赏孕妇季玥图片 |