<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 布衣郎 閱讀(9415) 評論(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

    搜索

    •  

    積分與排名

    • 積分 - 358005
    • 排名 - 156

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲国产成人久久综合一| 在线v片免费观看视频| 国产97视频人人做人人爱免费| 久久精品国产亚洲AV未满十八| 亚洲色精品VR一区区三区| 亚洲综合色7777情网站777| 亚洲午夜精品一区二区公牛电影院| 91亚洲国产在人线播放午夜| 777亚洲精品乱码久久久久久 | 免费人成网站在线观看不卡| 国产在线观看无码免费视频| a级毛片在线免费| 国产精品免费观看调教网| 桃子视频在线观看高清免费视频| 久久久久久国产精品免费免费男同 | 亚洲免费视频在线观看| 中文字幕亚洲色图| 亚洲国产av美女网站| 亚洲中文字幕无码中文| 丰满亚洲大尺度无码无码专线| 黄色三级三级免费看| 国产精品免费久久久久影院| a级精品九九九大片免费看| 无码精品国产一区二区三区免费 | 国内精品免费久久影院| 久久久久久久久久国产精品免费 | 久久精品无码精品免费专区| 最近免费2019中文字幕大全| 美女视频黄免费亚洲| 日韩在线免费看网站| 亚洲一级特黄大片在线观看| 亚洲AV无码国产丝袜在线观看| 亚洲系列中文字幕| 亚洲国产欧美日韩精品一区二区三区| 野花视频在线官网免费1| 在线免费观看h片| 日本zzzzwww大片免费| 大香人蕉免费视频75| 亚洲爽爽一区二区三区| 亚洲成在人天堂在线| 亚洲日韩精品国产一区二区三区|