乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      ibatis如何支持clob 和blob

       goldbomb 2007-01-14
          這幾天仔細(xì)看了一下ibatis的文檔,發(fā)現(xiàn)2.2后,ibatis的改變還是挺大的。對于自定義類型支持的也不錯(cuò),這樣對于blob和clob數(shù)據(jù)的處理也就簡單多了。
          不過在spring 中已經(jīng)提供了很好的實(shí)現(xiàn),所以這又省去了很多的功夫,接下來看看ibatis是如何支持clob和blob的。

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

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

      public class Food {
          private String content;

          private String id;

          private byte[] image;

          private String name;    
              ...
      }

      xml如下:說明一下,在resultMap中可以通過typeHandler來指定具體的handler.在inline變量中,可以通過handler來定義相應(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>

      簡單的測試:
      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());

        本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多