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

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

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

    閑人野居
    好好學(xué)習(xí),天天向上
    posts - 57,  comments - 137,  trackbacks - 0
    ??? 這幾天仔細(xì)看了一下ibatis的文檔,發(fā)現(xiàn)2.2后,ibatis的改變還是挺大的。對(duì)于自定義類型支持的也不錯(cuò),這樣對(duì)于blob和clob數(shù)據(jù)的處理也就簡(jiǎn)單多了。
    ??? 不過(guò)在spring 中已經(jīng)提供了很好的實(shí)現(xiàn),所以這又省去了很多的功夫,接下來(lái)看看ibatis是如何支持clob和blob的。

    ??? ibatis提供了TypeHandler接口,用于處理數(shù)據(jù)類型,基本的實(shí)現(xiàn)類為BaseTypeHandler
    ??? 在spring 中,提供了AbstractLobTypeHandler作為基礎(chǔ)類,并且提供了相應(yīng)的模版方法,所有的工作由LobHandler處理。
    ??? BlobByteArrayTypeHandler 主要用于處理blob類型數(shù)據(jù),使用byte[]來(lái)映射相應(yīng)的blob
    ??? ClobStringTypeHandler 用于處理clob類型數(shù)據(jù),使用字符串來(lái)映射Clob
    ??? 有一點(diǎn)需要注意的是,AbstractLobTypeHandler中實(shí)現(xiàn)了事務(wù)支持,需要用來(lái)釋放相應(yīng)的資源,所以一定需要在事務(wù)環(huán)境中進(jìn)行。

    下面是一個(gè)簡(jiǎn)單的例子:

    public class Food {
    ??? private String content;

    ??? private String id;

    ??? private byte[] image;

    ??? private String name;?? ?
    ??????? ...
    }

    xml如下:說(shuō)明一下,在resultMap中可以通過(guò)typeHandler來(lái)指定具體的handler.在inline變量中,可以通過(guò)handler來(lái)定義相應(yīng)的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>

    簡(jiǎn)單的測(cè)試:
    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());
    posted on 2007-01-13 21:53 布衣郎 閱讀(9402) 評(píng)論(1)  編輯  收藏 所屬分類: orm

    FeedBack:
    # re: ibatis如何支持clob 和blob
    2007-11-12 16:03 | zhou
    樓主我安你的方法做了提示報(bào)錯(cuò)呀
    Translating SQLException with SQL state '42000', error code '1064', message 我用的是mysql5.0  回復(fù)  更多評(píng)論
      

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    <2007年1月>
    31123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    常用鏈接

    留言簿(12)

    隨筆分類(59)

    隨筆檔案(57)

    blog

    java

    uml

    搜索

    •  

    積分與排名

    • 積分 - 357312
    • 排名 - 155

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 青青草97国产精品免费观看| 亚洲精品高清国产一线久久| 亚洲美女中文字幕| 国产一区二区三区免费观在线| 亚洲国产精品综合久久网络 | 日产亚洲一区二区三区| 国产成人亚洲综合无码精品| 亚洲成a人片在线看| 99久久久国产精品免费无卡顿| 国产公开免费人成视频| 亚洲精品国产高清在线观看| 久9久9精品免费观看| 免费在线视频一区| 亚洲酒色1314狠狠做| av免费不卡国产观看| 亚洲Av永久无码精品一区二区 | 亚洲成av人片一区二区三区| 一级毛片免费全部播放| 成人女人A级毛片免费软件| 亚洲AV综合色区无码二区偷拍| 国产成人精品免费视频大全| 成人免费男女视频网站慢动作| 亚洲国产精品网站在线播放| 亚洲精品无码AV中文字幕电影网站| 成人网站免费大全日韩国产| 亚洲视频一区在线观看| 精品国产麻豆免费网站| 韩国免费a级作爱片无码| 亚洲国产精品自在在线观看| 国产在线国偷精品产拍免费| 久久精品国产亚洲av高清漫画 | 东北美女野外bbwbbw免费| 久久久久久亚洲AV无码专区| 搡女人真爽免费视频大全| 人人鲁免费播放视频人人香蕉| 国产男女猛烈无遮挡免费视频网站| 欧亚一级毛片免费看| 亚洲第一页在线视频| 69精品免费视频| 五月天网站亚洲小说| 成人免费淫片在线费观看|