Mybatis完成自界說類型轉換器TypeHandler的辦法。本站提示廣大學習愛好者:(Mybatis完成自界說類型轉換器TypeHandler的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是Mybatis完成自界說類型轉換器TypeHandler的辦法正文
先給年夜家簡略引見下mybatis
MyBatis是一個支撐通俗SQL查詢,存儲進程和高等映照的優良耐久層框架。MyBatis清除了簡直一切的JDBC代碼和參數的手工設置和對成果集的檢索封裝。MyBatis可使用簡略的XML或注解用於設置裝備擺設和原始映照,將接口和Java的POJO(Plain Old Java Objects,通俗的Java對象)映照成數據庫中的記載。
此文實際上是java操作Oracle類型XMLType總結二:應用Mybatis附帶的一篇小結。
Mybatis完成自界說的轉換器,非常的簡略,其重要步調分為三步,這裡以操作XMLType類型為例。
第一步
新建一個轉換類,完成TypeHandler接口,接口的泛型指定參數類型,不指定章為Object:
public class XmltypeTypeHandler implements TypeHandler<String>
該接口重要有以下4個辦法:
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指定詳細的類便可):
<typeHandlers> <typeHandler javaType="string" jdbcType="UNDEFINED" handler="com.tyyd.dw.context.XmltypeTypeHandler"/> </typeHandlers>
第三步
在你的mapper映照文件中應用類型轉換器:
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()函數):
/** * 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的辦法,願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!