spring+hibernate操控LOB对象

来源:互联网 发布:淘宝的白蜡木和红椿木 编辑:程序博客网 时间:2024/06/05 05:10

spring为hibernate提供了对LOB对像的支持,以oracle数据库为例,配置方法如下:

一.spring配置文件

 <!-- 使用jndi连接数据库 -->
 <!--<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName">
  <value>java:comp/env/develop</value>
  </property>
 </bean>-->
 
<!-- 本地Tomcat配置 -->
 <bean id="dataSource"
  class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName">
   <value>oracle.jdbc.driver.OracleDriver</value>
  </property>
  <property name="url">
   <value>jdbc:oracle:thin:@192.168.0.123:1521:dbserver</value>
  </property>
  <property name="username">
   <value>develop</value>
  </property>
  <property name="password">
   <value>123456</value>
  </property>
 </bean>


 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource">
   <ref bean="dataSource" />
  </property>

  <!--spring 对 LOB的支持就是要配置这个属性,这里是对oracle的LOB的支持-->
  <property name="lobHandler">
   <ref local="oracleLobHandler" />
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">
     org.hibernate.dialect.Oracle9Dialect
    </prop>
    <prop key="hibernate.query.factory_class">
     org.hibernate.hql.ast.ASTQueryTranslatorFactory
     <!-- org.hibernate.hql.classic.ClassicQueryTranslatorFactory -->
    </prop>
    <prop key="hibernate.cache.provider_class">
     org.hibernate.cache.EhCacheProvider
    </prop>
    <prop key="hibernate.show_sql">true</prop>
    <prop key="hibernate.jdbc.fetch_size">50</prop>
    <prop key="hibernate.jdbc.batch_size">30</prop>
   </props>
  </property>
  <property name="mappingLocations">
   <list>
    <value>classpath:/com/abc/**/entity/*.hbm.xml</value>
   </list>
  </property>  
 </bean>

 

<!-- 对oracle的LOB支持-->

 <bean id="oracleLobHandler"
  class="org.springframework.jdbc.support.lob.OracleLobHandler"
  lazy-init="true">
  <property name="nativeJdbcExtractor">
   <ref local="nativeJdbcExtractor" />
  </property>
 </bean>

 

<!-- 设置本地 Jdbc 对象抽取器-->

 <!--  webLogic下的配置 -->
 <!-- bean id="nativeJdbcExtractor"
  class="org.springframework.jdbc.support.nativejdbc.WebLogicNativeJdbcExtractor"
  lazy-init="true" /-->
 
 <!-- tomcat下的配置 -->
 <bean id="nativeJdbcExtractor"
  class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"
  lazy-init="true" />

 <bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory">
   <ref bean="sessionFactory" />
  </property>
 </bean>

 

<!-- 事务管理-->

<!-- 事务拦截器-->

 <bean id="transactionInterceptor"
  class="org.springframework.transaction.interceptor.TransactionInterceptor">
  <property name="transactionManager" ref="transactionManager" />
  <property name="transactionAttributes">
   <props>
    <prop key="*">PROPAGATION_REQUIRED,-Exception</prop>
   </props>
  </property>
 </bean>

<!-- 事务代理-->

 <bean id="transactionProxyCreator"
  class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
  
  <property name="proxyTargetClass" >
      <value>true</value>
    </property>
  
  <property name="beanNames">
   <list>
    <value>*Service</value>
   </list>
  </property>
  <property name="interceptorNames">
   <list>
    <value>transactionInterceptor</value>
   </list>
  </property>
 </bean>

 

说明:上文还是很具有实用价值的,不过对LOB的支持只有这一段:

<!-- 对oracle的LOB支持-->

 <bean id="oracleLobHandler"
  class="org.springframework.jdbc.support.lob.OracleLobHandler"
  lazy-init="true">
  <property name="nativeJdbcExtractor">
   <ref local="nativeJdbcExtractor" />
  </property>
 </bean>

 

<!-- 设置本地 Jdbc 对象抽取器-->

 <!--  webLogic下的配置 -->
 <!-- bean id="nativeJdbcExtractor"
  class="org.springframework.jdbc.support.nativejdbc.WebLogicNativeJdbcExtractor"
  lazy-init="true" /-->
 
 <!-- tomcat下的配置 -->
 <bean id="nativeJdbcExtractor"
  class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"
  lazy-init="true" />

 <bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory">
   <ref bean="sessionFactory" />
  </property>
 </bean>

 

二.配置hibernate影射文件

对clob和blob配置时使用如下方式:

<!-- clob -->

 <property name="context" column="context" type="org.springframework.orm.hibernate3.support.ClobStringType"/>

<!--blob -->

 <property name="data" column="data" type="org.springframework.orm.hibernate3.support.BlobByteArrayType" /> 

 

这里需要注意一下,spring对clob的支持最大为2G

 

三.pojo配置

clob 对应类型为String,blob 对应类型为byte[],如下:

String context;

byte[] data;

set and get method;

 

保存或取出数据时将其转换为响应的类型即可。

 

 

 

原创粉丝点击