您现在的位置是:首页 >

JS延迟加载 hibernate的延迟加载通用方法

火烧 2022-03-28 15:00:00 1075
hi er ate的延迟加载通用方法   类名 Hi er ateUtil   ackage a t ee j eemodel util   im ort java la g reflect I vo

hibernate的延迟加载通用方法  

  类名 HibernateUtil

  package antbee j eemodel util;

  import java lang reflect InvocationTargetException;

  import java lang reflect Method;

  import java util Collection;

  import java util Iterator;

  import springframework orm hibernate support HibernateDaoSupport;

  public class HibernateUtil extends HibernateDaoSupport {

  /**

  * 初始化POJO类

  * @author @家军

  * @param object POJO对象

  * @param methodName 方法名称

  * @return

  * @version

  */

  public void initialize(Object object String methodName) throws SecurityException NoSuchMethodException IllegalArgumentException IllegalAccessException InvocationTargetException {

  String[] methodArray = methodName split( \ )

  Method method = null;

  Object initializeObject = object;

  if(methodArray length == ){

  this getHibernateTemplate() lock(initializeObject hibernate LockMode NONE)

  method = object getClass() getMethod(methodArray[ ] new Class[] {})

  initializeObject = method invoke(initializeObject new Object[] {})

  this getHibernateTemplate() initialize(initializeObject)

  }else{

  for(int i= ;i<methodArray length;i++){

  method = initializeObject getClass() getMethod(methodArray[i] new Class[] {})

  initializeObject = method invoke(initializeObject new Object[] {})

  }

  this getHibernateTemplate() lock(initializeObject hibernate LockMode NONE)

  this getHibernateTemplate() initialize(initializeObject)

  }

  }

  /**

  * 初始化POJO类

  * @author @家军

  * @param object POJO对象

  * @param methodName 方法名称数组

  * @return

  * @version

  */

  public void initialize(Object object String methodName[])

  throws SecurityException NoSuchMethodException

  IllegalArgumentException IllegalAccessException InvocationTargetException {

  for (int i = ; i < methodName length; i++) {

  String[] methodArray = methodName[i] split( \ )

  Method method = null;

  Object initializeObject = object;

  if(methodArray length == ){

  this getHibernateTemplate() lock(initializeObject hibernate LockMode NONE)

  method = object getClass() getMethod(methodArray[ ] new Class[] {})

  initializeObject = method invoke(initializeObject new Object[] {})

  this getHibernateTemplate() initialize(initializeObject)

  }else{

  for(int j= ;j<methodArray length;j++){

  method = initializeObject getClass() getMethod(methodArray[j] new Class[] {})

  initializeObject = method invoke(initializeObject new Object[] {})

  }

  this getHibernateTemplate() lock(initializeObject hibernate LockMode NONE)

  this getHibernateTemplate() initialize(initializeObject)

  }

  }

  }

  /**

  * 初始化POJO类

  * @author @家军

  * @param object POJO对象

  * @return

  * @version

  */

  public void initialize(Object object) throws SecurityException NoSuchMethodException IllegalArgumentException IllegalAccessException InvocationTargetException {

  this getHibernateTemplate() lock(object hibernate LockMode NONE)

  this getHibernateTemplate() initialize(object)

  }

  /**

  * 初始化POJO类

  * @author @家军

  * @param collection POJO对象集合

  * @param methodName 方法名称数组

  * @return

  * @version

  */

  public void initialize(Collection collection String methodName[])

  throws SecurityException NoSuchMethodException

  IllegalArgumentException IllegalAccessException InvocationTargetException {

  for(Iterator i=erator() i hasNext()Wink{

  Object object = i next()

  this initialize(object methodName)

  }

  }

  /**

  * 初始化POJO类

  * @author @家军

  * @param collection POJO对象集合

  * @param methodName 方法名称

  * @return

  * @version

  */

  public void initialize(Collection collection String methodName)

  throws SecurityException NoSuchMethodException

  IllegalArgumentException IllegalAccessException InvocationTargetException {

  for(Iterator i=erator() i hasNext()Wink{

  Object object = i next()

  this initialize(object methodName)

  }

  }

  }

  这个方法的好外是 可以不在hbm xml的文件当中 指定为lazy=true这个模式 可以直接使用 使用方法如下

  如果你使用SPRING 则需要把hibernateUtil注入其中

  <bean id= hibernateUtilTarget class= antbee j eemodel util HibernateUtil >

  <property name= sessionFactory >

  <ref local= mssqlSessionFactory />

  </property>

  </bean>

  <bean id= hibernateUtil parent= BaseTransactionProxy class= springframework transaction interceptor TransactionProxyFactoryBean >

  <property name= target >

  <ref local= hibernateUtilTarget />

  </property>

  </bean>

  <! 配置基础事务 >

  <bean id= BaseTransactionProxy class= springframework transaction interceptor TransactionProxyFactoryBean abstract= true >

JS延迟加载 hibernate的延迟加载通用方法

  <property name= transactionManager >

  <ref bean= mssqltransactionManager />

  </property>

  <property name= proxyTargetClass >

  <value>true</value>

  </property>

  <property name= transactionAttributes >

  <props>

  <prop key= * >PROPAGATION_REQUIRED</prop>

  </props>

  </property>

  </bean>

  使用示例

  如果你使用STRUTS 则需要这样

  List what_ur_view = XXXManager find( ) //取得你要展示的对象

  //如果这个对象当中有延迟加载的对象(SET)时 则需要如下加载就行

  this hibernateUtil initialize(what_ur_view getTbShipmentSale )

  //其中getTbShipmentSale是其对象(SET也可以操作)

  在页面显示的时候 你就可以使用JSTL如下表述

  <c:out value= ${what_ur_view tbShipmentSale goodsReceivePersonPhone} />//呵呵 是不是很爽呀

  同样的方法 我们也可以对一个SET在页面进行显示 方法如下

  <c:forEach items= ${what_ur_view tbShipmentProductMappingSet} var= ProductMapping varStatus= status >

  <c:out value= ${ProductMapping productNum} />

  <c:out value= ${ProductMapping tbOutOfWarehouse outOfWarehouseNum} />

  </c:forEach>

  //呵呵 支持多级嵌套

  在ACTION当中则需要加入hibernateUtil initialize(what_ur_view getTbShipmentProductMappingSet()

  new String[] { getTbProduct getTbOutOfWarehouse

   getTbProductConfigure }) 呵 如果你要是在HIBERNATE当中使用 这个就太简单了吧

  怎么样?呵呵呵

lishixinzhi/Article/program/Java/ky/201311/28589  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码