Hibernate效能提升?

Tags: 大學, 效能, 例項, word,

1.批量操作

防止批量操作時記憶體溢位的方法

使用Session的flush/clear方法

使用StatelessSession介面

程式例子:

package com.etc.po;

import java.util.List;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.StatelessSession;

import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;

import com.etc.po.util.HibernateSessionFactory;

public class TestBatch {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

Session session=HibernateSessionFactory.getSession();

Transaction tran=session.beginTransaction();

for(int i=7;i<200003;i++){

session.save(new Person(i,"Name"+i,23));

if ( i % 20 == 0 ) {

session.flush();

session.clear();

}

}

tran.commit();

//Configuration conf=new Configuration().configure();

//SessionFactory factory=conf.buildSessionFactory();

//StatelessSession session=factory.openStatelessSession();

//Transaction tran=session.beginTransaction();

//for(int i=3;i<200003;i++){

//session.insert(new Person(i,"Name"+i,23));

//}

//tran.commit();

//String hql1="from Person p";

//Session session=HibernateSessionFactory.getSession();

//

//Transaction tran=session.beginTransaction();

//List list=session.createQuery(hql1).list();

//for(Person p:list){

//System.out.println(p.getId()+" "+p.getName());

//}

//tran.commit();

}

}

2.延遲載入

當某例項有關聯例項時,Hibernate中預設使用延遲載入。即預設情況下,不查詢關聯例項可以配置lazy=“false” ,取消延遲載入實際應用中,往往都使用延遲載入,以保證效能

package com.etc.po;

import java.util.List;

import java.util.Set;

import org.hibernate.Session;

import com.etc.po.util.HibernateSessionFactory;

public class TestLazy {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

Session session=HibernateSessionFactory.getSession();

String hql1="from Person p";

List list=session.createQuery(hql1).list();

//for(Person p:list){

//System.out.println(p.getName());

//}

//Person p=(Person)session.get(Person.class, 1);

//Set

set=p.getAddresses();

//for(Address a:set){

//System.out.println(a.getDetail());

//}

}

}

3.batch-size屬性

“N+1查詢問題”中,當N值較大時,將降低效能batch-size屬性可以定義批量處理的實體個數batch-size的值建議在5-30之間batch-size屬性減少查詢語句條數,從而提高效能

package com.etc.po;

import java.util.List;

import org.hibernate.Session;

import com.etc.po.util.HibernateSessionFactory;

public class TestN {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

Session session=HibernateSessionFactory.getSession();

String hql1="select p,addresses from Person p join p.addresses addresses";

String hql2="select p,address from Address address,Person p where address in elements(p.addresses) ";

String hql3="from Person p left join fetch p.addresses addresses";

List list=session.createQuery(hql3).list();

for(Person p:list){

System.out.println(p.getId());

}

//List list=session.createQuery(hql3).list();

//

//for(Object[] obj:list){

//Person per=(Person)obj[0];

//Address addr=(Address)obj[1];

//System.out.println(per.getId()+" "+addr.getDetail());

//}

}

}

大學, 效能, 例項, word,
相關問題答案