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

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

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

    閑人野居
    好好學習,天天向上
    posts - 57,  comments - 137,  trackbacks - 0
    ??? 這幾天仔細看了一下ibatis的文檔,發現2.2后,ibatis的改變還是挺大的。對于自定義類型支持的也不錯,這樣對于blob和clob數據的處理也就簡單多了。
    ??? 不過在spring 中已經提供了很好的實現,所以這又省去了很多的功夫,接下來看看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());
    posted on 2007-01-13 21:53 布衣郎 閱讀(9401) 評論(1)  編輯  收藏 所屬分類: orm

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

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


    網站導航:
     

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

    常用鏈接

    留言簿(12)

    隨筆分類(59)

    隨筆檔案(57)

    blog

    java

    uml

    搜索

    •  

    積分與排名

    • 積分 - 357265
    • 排名 - 155

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 成人毛片免费观看| 成人毛片18女人毛片免费视频未| 在线看片免费不卡人成视频| 精品国产精品久久一区免费式| 免费在线观看污网站| 狠狠色伊人亚洲综合成人| 亚洲五月激情综合图片区| 亚洲乱码一二三四五六区| 亚洲av永久无码精品秋霞电影秋 | 你懂的免费在线观看网站| 国产免费爽爽视频在线观看| 在线观看的免费网站| 日韩亚洲不卡在线视频中文字幕在线观看| 99亚洲乱人伦aⅴ精品| 久久久久国产精品免费免费不卡| 精品国产免费观看久久久| 精品国产_亚洲人成在线| 亚洲欧洲日本在线| 日韩精品一区二区亚洲AV观看| 国产一区二区三区亚洲综合| 久久这里只精品99re免费| 亚洲毛片免费观看| 亚洲精品视频免费| 青青青国产在线观看免费 | 久久久久亚洲AV无码专区首| 色噜噜噜噜亚洲第一| 亚洲性久久久影院| 亚洲AV无码AV吞精久久| 亚洲精品综合久久| 人妻无码久久一区二区三区免费| 亚洲精品视频免费观看| 国产精品免费一区二区三区四区| 免费国产黄网站在线观看动图| 久操免费在线观看| 激情综合亚洲色婷婷五月APP| 最近最好最新2019中文字幕免费| 国产免费不卡v片在线观看| 亚洲JIZZJIZZ妇女| 久久不见久久见免费影院| 亚洲白色白色在线播放| 国产免费AV片无码永久免费|