iBATIS中怎么操作Blob與Clob,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
專注于為中小企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站設計服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)鐘山免費做網(wǎng)站提供優(yōu)質的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了成百上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉變。
不過在spring 中已經(jīng)提供了很好的實現(xiàn),所以這又省去了很多的功夫,接下來看看iBATIS是如何支持Clob和blob的。
iBATIS提供了TypeHandler接口,用于處理數(shù)據(jù)類型,基本的實現(xiàn)類為BaseTypeHandler
在spring 中,提供了AbstractLobTypeHandler作為基礎類,并且提供了相應的模版方法,所有的工作由LobHandler處理。
BlobByteArrayTypeHandler 主要用于處理blob類型數(shù)據(jù),使用byte[]來映射相應的Blob
ClobStringTypeHandler 用于處理Clob類型數(shù)據(jù),使用字符串來映射Clob
有一點需要注意的是,AbstractLobTypeHandler中實現(xiàn)了事務支持,需要用來釋放相應的資源,所以一定需要在事務環(huán)境中進行。
下面是一個簡單的例子:
public class Food { private String content; private String id; private byte[] image; private String name; ... }
xml如下:說明一下,在resultMap中可以通過typeHandler來指定具體的handler.在inline變量中,可以通過handler來定義相應的typeHandler
﹤sqlMap namespace="Food"﹥ ﹤typeAlias alias="Food" type="org.esoft.hdb.bo.Food"/﹥ ﹤resultMap id="foodResult" class="Food"﹥ ﹤result property="id" column="C_ID"/﹥ ﹤result property="name" column="C_NAME"/﹥ ﹤result property="content" column="C_content" typeHandler="org.springframework.orm.ibatis.support.ClobStringTypeHandler"/﹥ ﹤result property="image" column="C_image" typeHandler="org.springframework.orm.ibatis.support.BlobByteArrayTypeHandler"/﹥ ﹤/resultMap﹥ ﹤sql id="foodFragment"﹥select C_ID,C_NAME,C_CONTENT,C_IMAGE from T_FOOD﹤/sql﹥ ﹤select id="getAll" resultMap="foodResult"﹥ ﹤include refid="foodFragment"/﹥ ﹤/select﹥ ﹤select id="selectById" parameterClass="string" resultMap="foodResult"﹥ ﹤include refid="foodFragment"/﹥ where C_ID=#id#﹤/select﹥ ﹤insert id="insert" parameterClass="Food"﹥ insert into T_FOOD ( C_ID, C_NAME,C_CONTENT, C_IMAGE) values ( #id#, #name#,#content,handler=org.springframework.orm.ibatis.support.ClobStringTypeHandler#, #image,handler=org.springframework.orm.ibatis.support.BlobByteArrayTypeHandler#) ﹤/insert﹥ ﹤update id="update" parameterClass="Food"﹥ update T_FOOD set C_NAME = #name#, C_CONTENT = #content,handler=org.springframework.orm.ibatis.support.ClobStringTypeHandler#, C_IMAGE = #image,handler=org.springframework.orm.ibatis.support.BlobByteArrayTypeHandler# where C_ID = #id# ﹤/update﹥ ﹤delete id="deleteById" parameterClass="string"﹥ delete from T_FOOD where C_ID = #id# ﹤/delete﹥ ﹤/sqlMap﹥ public interface FoodService { void save(Food food); Food get(String id); /** * @param food */ void update(Food food); } public class FoodServiceImpl implements FoodService { private FoodDAO foodDAO; private DaoCreator creator; public void setCreator(DaoCreator creator) { this.creator = creator; } protected FoodDAO getFoodDAO() { if (foodDAO == null) { foodDAO = (FoodDAO) creator.createDao(FoodDAO.class, Food.class); } return foodDAO; } public Food get(String id) { return getFoodDAO().get(id); } public void save(Food food) { getFoodDAO().save(food); } public void update(Food food) { getFoodDAO().update(food); } } spring xml 配置: 。。。 ﹤bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler"/﹥ ﹤bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"﹥ ﹤property name="dataSource" ref="dataSource"/﹥ ﹤/bean﹥ ﹤bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"﹥ ﹤property name="dataSource" ref="dataSource"/﹥ ﹤property name="configLocation"﹥ ﹤value﹥SqlMapConfig.xml﹤/value﹥ ﹤/property﹥ ﹤property name="lobHandler" ref="lobHandler"/﹥ ﹤/bean﹥ ﹤bean id="daoCreate" class="org.esoft.hdb.ibatis.IbatisDaoCreator"﹥ ﹤property name="sqlMapClient" ref="sqlMapClient"/﹥ ﹤/bean﹥ ﹤bean id="foodService" class="org.esoft.hdb.service.FoodServiceImpl"﹥ ﹤property name="creator" ref="daoCreate"/﹥ ﹤/bean﹥ ﹤aop:config﹥ ﹤aop:pointcut id="foodServiceMethods" expression="execution(* org.esoft.hdb.service.FoodService.*(..))"/﹥ ﹤aop:advisor advice-ref="txAdvice" pointcut-ref="foodServiceMethods"/﹥ ﹤/aop:config﹥ ﹤tx:advice id="txAdvice" transaction-manager="transactionManager"﹥ ﹤tx:attributes﹥ ﹤tx:method name="*" propagation="REQUIRED"/﹥ ﹤/tx:attributes﹥ ﹤/tx:advice﹥
簡單的測試:
save : Food food = new Food(); food.setPk("1"); food.setName("food1"); BufferedInputStream in = new BufferedInputStream(getClass() .getResourceAsStream("/1.gif")); byte[] b = FileCopyUtils.copyToByteArray(in); food.setImage(b); in = new BufferedInputStream(getClass().getResourceAsStream( "/hibernate.cfg.xml")); b = FileCopyUtils.copyToByteArray(in); food.setContent(new String(b)); foodService.save(food); update: Food food = foodService.get("1"); BufferedInputStream in = new BufferedInputStream(getClass() .getResourceAsStream("/jdbc.properties")); byte[] b = FileCopyUtils.copyToByteArray(in); food.setContent(new String(b)); foodService.update(food); food = foodService.get("1"); assertNotNull(food.getImage());
關于iBATIS中怎么操作Blob與Clob問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關知識。
本文題目:iBATIS中怎么操作Blob與Clob
分享鏈接:http://aaarwkj.com/article42/jjjhec.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供建站公司、企業(yè)網(wǎng)站制作、網(wǎng)站營銷、品牌網(wǎng)站制作、軟件開發(fā)、電子商務
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)