hibernate初始化过程很耗时,只做一次,所以做工具类
1.私有构造方法,不能被继承和构造
2.static代码块,只加载一次
cfg.configure();
在classpath中寻找,所有src目录都会在classpath中编译;
HibernateUtil.java
package com.cxd.hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public final class HibernateUtil {
public static SessionFactory sessionFactory;
private HibernateUtil(){
}
static{
Configuration cfg = new Configuration();
cfg.configure();//如果名字不是叫hibernate.cfg.xml,则需要写“filename”
sessionFactory = cfg.buildSessionFactory();
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
public static Session getSession(){
return sessionFactory.openSession();
}
}
优化后的base.java
package com.cxd.hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.cxd.hibernate.domain.User;
public class base {
public static void main(String[] args){
/*Configuration cfg = new Configuration();
cfg.configure();
SessionFactory sf = cfg.buildSessionFactory();*/
User user = new User();
user.setUsername("name");
user.setPassword("11111");
addUser(user);
System.out.println("id:"+ user.getId());
}
static void addUser(User user){
Session s = null;
Transaction tx = null;
try{
s = HibernateUtil.getSession();
tx = s.beginTransaction();
s.save(user);
tx.commit();
}catch(HibernateException e){
if(tx != null)
tx.rollback();
throw e ;
}finally{
if(s != null){
s.close();
}
}
}
}