<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    IT精英俱樂部

    方便自己查閱,僅此而已!

    統計

    留言簿(4)

    閱讀排行榜

    評論排行榜

    iBATIS操作Blob與Clob淺析

    http://developer.51cto.com/art/200907/136668.htm


    spring 中已經提供了很好的實現,所以這又省去了很多的功夫,接下來看看iBATIS是如何支持Clob和blob的。

    iBATIS提供了TypeHandler接口,用于處理數據類型,基本的實現類為BaseTypeHandler

    在spring 中,提供了AbstractLobTypeHandler作為基礎類,并且提供了相應的模版方法,所有的工作由LobHandler處理。

    BlobByteArrayTypeHandler 主要用于處理blob類型數據,使用byte[]來映射相應的Blob

    ClobStringTypeHandler 用于處理Clob類型數據,使用字符串來映射Clob

    有一點需要注意的是,AbstractLobTypeHandler中實現了事務支持,需要用來釋放相應的資源,所以一定需要在事務環境中進行。

    下面是一個簡單的例子:

    1. public class Food {   
    2. private String content;   
    3.  
    4. private String id;   
    5.  
    6. private byte[] image;   
    7.  
    8. private String name;     
    9.     ...   
    10. }  

    xml如下:說明一下,在resultMap中可以通過typeHandler來指定具體的handler.在inline變量中,可以通過handler來定義相應的typeHandler

    1. ﹤sqlMap namespace="Food"﹥   
    2.      
    3.    ﹤typeAlias alias="Food" type="org.esoft.hdb.bo.Food"/﹥   
    4.    ﹤resultMap id="foodResult" class="Food"﹥   
    5.   ﹤result property="id" column="C_ID"/﹥   
    6.   ﹤result property="name" column="C_NAME"/﹥   
    7.   ﹤result property="content" column="C_content"   
    8.  typeHandler="org.springframework.orm.ibatis.support.ClobStringTypeHandler"/﹥   
    9.   ﹤result property="image" column="C_image"   
    10.  typeHandler="org.springframework.orm.ibatis.support.BlobByteArrayTypeHandler"/﹥   
    11.    ﹤/resultMap﹥   
    12.    ﹤sql id="foodFragment"﹥select C_ID,C_NAME,C_CONTENT,C_IMAGE from T_FOOD﹤/sql﹥   
    13.   ﹤select id="getAll" resultMap="foodResult"﹥   
    14.   ﹤include refid="foodFragment"/﹥   
    15.    ﹤/select﹥   
    16.    ﹤select id="selectById" parameterClass="string" resultMap="foodResult"﹥   
    17.   ﹤include refid="foodFragment"/﹥ where C_ID=#id#﹤/select﹥   
    18.      
    19.    ﹤insert id="insert" parameterClass="Food"﹥ insert into T_FOOD ( C_ID,   
    20.   C_NAME,C_CONTENT, C_IMAGE) values ( #id#,   
    21.   #name#,#content,handler=org.springframework.orm.ibatis.support.ClobStringTypeHandler#,   
    22.   #image,handler=org.springframework.orm.ibatis.support.BlobByteArrayTypeHandler#)   
    23.   ﹤/insert﹥   
    24.      
    25.    ﹤update id="update" parameterClass="Food"﹥ update T_FOOD set C_NAME = #name#,   
    26.   C_CONTENT =   
    27.   #content,handler=org.springframework.orm.ibatis.support.ClobStringTypeHandler#,   
    28.   C_IMAGE =   
    29.   #image,handler=org.springframework.orm.ibatis.support.BlobByteArrayTypeHandler#   
    30.   where C_ID = #id# ﹤/update﹥   
    31.      
    32.    ﹤delete id="deleteById" parameterClass="string"﹥ delete from T_FOOD where C_ID = #id#   
    33.   ﹤/delete﹥   
    34.      
    35. ﹤/sqlMap﹥   
    36.  
    37.  
    38. public interface FoodService {   
    39.  
    40.      
    41. void save(Food food);   
    42. Food get(String id);   
    43. /**   
    44. * @param food   
    45. */   
    46. void update(Food food);   
    47. }   
    48.  
    49. public class FoodServiceImpl implements FoodService {   
    50. private FoodDAO foodDAO;   
    51.  
    52. private DaoCreator creator;   
    53.  
    54. public void setCreator(DaoCreator creator) {   
    55.     this.creator = creator;   
    56. }   
    57.  
    58. protected FoodDAO getFoodDAO() {   
    59.     if (foodDAO == null) {   
    60.    foodDAO = (FoodDAO) creator.createDao(FoodDAO.class, Food.class);   
    61.     }   
    62.     return foodDAO;   
    63. }   
    64.  
    65. public Food get(String id) {   
    66.     return getFoodDAO().get(id);   
    67. }   
    68. public void save(Food food) {   
    69.     getFoodDAO().save(food);   
    70. }   
    71. public void update(Food food) {   
    72.     getFoodDAO().update(food);   
    73. }   
    74.  
    75. }   
    76.  
    77. spring xml 配置:  
    78.    
    79. 。。。   
    80.  ﹤bean id="lobHandler"   
    81.   class="org.springframework.jdbc.support.lob.DefaultLobHandler"/﹥   
    82.      
    83.    ﹤bean id="transactionManager"   
    84.   class="org.springframework.jdbc.datasource.DataSourceTransactionManager"﹥   
    85.   ﹤property name="dataSource" ref="dataSource"/﹥   
    86.    ﹤/bean﹥   
    87.      
    88.    ﹤bean id="sqlMapClient"   
    89.   class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"﹥   
    90.   ﹤property name="dataSource" ref="dataSource"/﹥   
    91.   ﹤property name="configLocation"﹥   
    92.  ﹤value﹥SqlMapConfig.xml﹤/value﹥   
    93.   ﹤/property﹥   
    94.   ﹤property name="lobHandler" ref="lobHandler"/﹥   
    95.    ﹤/bean﹥   
    96.      
    97.    ﹤bean id="daoCreate" class="org.esoft.hdb.ibatis.IbatisDaoCreator"﹥   
    98.   ﹤property name="sqlMapClient" ref="sqlMapClient"/﹥   
    99.    ﹤/bean﹥   
    100.      
    101.    ﹤bean id="foodService" class="org.esoft.hdb.service.FoodServiceImpl"﹥   
    102.   ﹤property name="creator" ref="daoCreate"/﹥   
    103.    ﹤/bean﹥   
    104.      
    105.      
    106.    ﹤aop:config﹥   
    107.   ﹤aop:pointcut id="foodServiceMethods"   
    108.  expression="execution(* org.esoft.hdb.service.FoodService.*(..))"/﹥   
    109.   ﹤aop:advisor advice-ref="txAdvice" pointcut-ref="foodServiceMethods"/﹥   
    110.    ﹤/aop:config﹥   
    111.    ﹤tx:advice id="txAdvice" transaction-manager="transactionManager"﹥   
    112.   ﹤tx:attributes﹥   
    113.  ﹤tx:method name="*" propagation="REQUIRED"/﹥   
    114.   ﹤/tx:attributes﹥   
    115.    ﹤/tx:advice﹥  

    簡單的測試:

    1. save :   
    2.     Food food = new Food();   
    3.     food.setPk("1");   
    4.     food.setName("food1");   
    5.     BufferedInputStream in = new BufferedInputStream(getClass()   
    6.   .getResourceAsStream("/1.gif"));   
    7.     byte[] b = FileCopyUtils.copyToByteArray(in);   
    8.     food.setImage(b);   
    9.   in = new BufferedInputStream(getClass().getResourceAsStream(   
    10.   "/hibernate.cfg.xml"));   
    11.     b = FileCopyUtils.copyToByteArray(in);   
    12.     food.setContent(new String(b));   
    13.     foodService.save(food);   
    14. update:   
    15. Food food = foodService.get("1");   
    16.     BufferedInputStream in = new BufferedInputStream(getClass()   
    17.   .getResourceAsStream("/jdbc.properties"));   
    18.     byte[] b = FileCopyUtils.copyToByteArray(in);   
    19.     food.setContent(new String(b));   
    20.     foodService.update(food);   
    21.     food = foodService.get("1");   
    22.     assertNotNull(food.getImage());  

    posted on 2011-07-30 16:35 suplayer 閱讀(320) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 男女猛烈激情xx00免费视频| 亚洲AV一二三区成人影片| 国产精品亚洲一区二区三区| 成全高清视频免费观看| 在线a亚洲老鸭窝天堂av高清| 四虎永久在线精品免费观看视频| 亚洲狠狠狠一区二区三区| 国产福利视精品永久免费| 亚洲一区二区三区播放在线| 成人免费午夜无码视频| 亚洲精品久久无码| 国产一区二区三区在线免费 | 久久精品国产亚洲AV蜜臀色欲| 57pao一国产成视频永久免费| 亚洲国产av高清无码| 好吊妞在线成人免费| 成人a毛片视频免费看| 亚洲精品国产精品乱码视色| 无码国产精品一区二区免费3p| 亚洲国产精品无码久久久| 无码一区二区三区免费视频| 国产精品亚洲专一区二区三区| 久久久久国产成人精品亚洲午夜| 国产免费阿v精品视频网址| 亚洲自偷自拍另类图片二区| 四虎成人免费观看在线网址| 黄色a三级三级三级免费看| 精品久久久久久亚洲| 99久久久精品免费观看国产| 亚洲欧美日韩中文字幕在线一区| 亚洲美日韩Av中文字幕无码久久久妻妇| 国产精品福利片免费看| 亚洲精品美女在线观看播放| 国产网站免费观看| 91在线免费观看| 亚洲熟妇无码AV不卡在线播放| 国产精品亚洲mnbav网站| 最近2019中文字幕免费大全5| 校园亚洲春色另类小说合集| 亚洲av日韩av无码| 日本不卡免费新一二三区|