免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
萬(wàn)惡的Mybatis的EnumTypeHandler

萬(wàn)惡的Mybatis的EnumTypeHandler

  • 博客分類(lèi): java

JavaSQLiBATISApache

           項(xiàng)目里面使用了Mybatis,然后里面一些POJO有使用到Enum的情況,在數(shù)據(jù)庫(kù)里面的字段類(lèi)型是SMALLINT,然后再M(fèi)ybatis里面不能正確的轉(zhuǎn)換。然后我在網(wǎng)上找了下,提到了EnumTypeHandler,那我們就來(lái)看這個(gè)TypeHandler的實(shí)現(xiàn)吧: 

Java代碼  

  1. package org.apache.ibatis.type;  
  2.   
  3. import java.sql.CallableStatement;  
  4. import java.sql.PreparedStatement;  
  5. import java.sql.ResultSet;  
  6. import java.sql.SQLException;  
  7.   
  8. public class EnumTypeHandler extends BaseTypeHandler implements TypeHandler {  
  9.   
  10.   private Class type;  
  11.   
  12.   public EnumTypeHandler(Class type) {  
  13.     this.type = type;  
  14.   }  
  15.   
  16.   public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {  
  17.     ps.setString(i, parameter.toString());  
  18.   }  
  19.   
  20.   public Object getNullableResult(ResultSet rs, String columnName) throws SQLException {  
  21.     String s = rs.getString(columnName);  
  22.     return s == null ? null : Enum.valueOf(type, s);  
  23.   }  
  24.   
  25.   public Object getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {  
  26.     String s = cs.getString(columnIndex);  
  27.     return s == null ? null : Enum.valueOf(type, s);  
  28.   }  
  29.   
  30. }  


           

     我們主要來(lái)看上面的setNonNullParameter方法,看到它是轉(zhuǎn)換為字符串設(shè)置了,那我們用它的這個(gè)TypeHandler當(dāng)然不行了,就想到自定義吧。 

      Mybatis在實(shí)現(xiàn)TypeHandler的時(shí)候,是直接調(diào)用的EnumTypeHandler的構(gòu)造函數(shù),但是注冊(cè)其他的TypeHandler都是調(diào)用無(wú)參數(shù)的構(gòu)造函數(shù)。 

           

Java代碼  

  1. public TypeHandler getTypeHandler(Class<?> type, JdbcType jdbcType) {  
  2.   Map<JdbcType, TypeHandler> jdbcHandlerMap = TYPE_HANDLER_MAP.get(type);  
  3.   TypeHandler handler = null;  
  4.   if (jdbcHandlerMap != null) {  
  5.     handler = jdbcHandlerMap.get(jdbcType);  
  6.     if (handler == null) {  
  7.       handler = jdbcHandlerMap.get(null);  
  8.     }  
  9.   }  
  10.   if (handler == null && type != null && Enum.class.isAssignableFrom(type)) {  
  11.     handler = new EnumTypeHandler(type);  
  12.   }  
  13.   return handler;  
  14. }  



      

       最后沒(méi)有辦法,我只能每個(gè)Enum,寫(xiě)一個(gè)TypeHandler,因?yàn)樵趖ypeHanderl里面沒(méi)有辦法拿到JavaType. 當(dāng)然了大家如果有什么好的辦法也歡迎交流討論。 

      

Java代碼  

  1. public class ProcessStateTypeHandler extends BaseTypeHandler implements TypeHandler {  
  2.       
  3.   public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {  
  4.       ps.setInt(i, ((ProcessState)parameter).ordinal());  
  5.   }  
  6.   
  7.   public Object getNullableResult(ResultSet rs, String columnName) throws SQLException {  
  8.     Integer s = rs.getInt(columnName);  
  9.     return s == null ? null : ProcessState.fromValue(s);  
  10.   }  
  11.   
  12.   public Object getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {  
  13.     Integer s = cs.getInt(columnIndex);  
  14.     return s == null ? null : ProcessState.fromValue(s);  
  15.   }  
  16.   
  17. }  

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
ibatis支持枚舉類(lèi)型
Mybatis類(lèi)型轉(zhuǎn)換介紹
面試官問(wèn):Mybatis中的TypeHandler你用過(guò)嗎?
扔掉工具類(lèi)!MyBatis 一個(gè)簡(jiǎn)單配置搞定加密、解密,不能太方便了~!
mybatis使用Map返回時(shí)數(shù)據(jù)庫(kù)為空的字段不返回問(wèn)題
大廠面試題:請(qǐng)講下MyBatis 的執(zhí)行流程!網(wǎng)友:講的太好了!
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服