国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
ibatis如何支持clob 和blob
    這幾天仔細看了一下ibatis的文檔,發(fā)現(xiàn)2.2后,ibatis的改變還是挺大的。對于自定義類型支持的也不錯,這樣對于blob和clob數(shù)據(jù)的處理也就簡單多了。
    不過在spring 中已經提供了很好的實現(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());
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
云亦嫣然: 關于Oracle+ibatis存儲clob及xmltype類型大數(shù)據(jù)
數(shù)據(jù)庫遷移 總結
webwork+spring+ibatis存取BLOB字段
Ibatis2.3學習筆記
MyBatis/Ibatis中#和$的區(qū)別
ibatis的selectkey
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服