日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ibatis如何支持clob 和blob

發布時間:2025/7/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ibatis如何支持clob 和blob 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ibatis提供了TypeHandler接口,用于處理數據類型,基本的實現類為BaseTypeHandler
??? 在spring 中,提供了AbstractLobTypeHandler作為基礎類,并且提供了相應的模版方法,所有的工作由LobHandler處理。
??? BlobByteArrayTypeHandler 主要用于處理blob類型數據,使用byte[]來映射相應的blob
??? ClobStringTypeHandler 用于處理clob類型數據,使用字符串來映射Clob
??? 有一點需要注意的是,AbstractLobTypeHandler中實現了事務支持,需要用來釋放相應的資源,所以一定需要在事務環境中進行。

下面是一個簡單的例子:

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如何支持clob 和blob的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。