UserDAO.java :
public class UserDAO {
public void add(User user){
Configuration conf=new Configuration();
conf.configure();//加载hibernate.cfg.xml配置文件
SessionFactory sf=conf.buildSessionFactory();//获取SessionFactory实例
Session session=sf.openSession();
Transaction txt=session.beginTransaction();
session.save(user);
txt.commit();//提交事务
session.close();
}
public void delete(int id){
Configuration conf=new Configuration();
conf.configure();
SessionFactory sf=conf.buildSessionFactory();
Session session=sf.openSession();
Transaction txt=session.beginTransaction();
User user=findById(id);
session.delete(user);
txt.commit();
session.close();
}
public void update(User user){
Configuration conf=new Configuration();
conf.configure();
SessionFactory sf=conf.buildSessionFactory();
Session session=sf.openSession();
Transaction txt=session.beginTransaction();
session.update(user);
txt.commit();
session.close();
}
public User findById(int id){
Configuration conf=new Configuration();
conf.configure();
SessionFactory sf=conf.buildSessionFactory();
Session session=sf.openSession();
//get方法是立刻加载数据;
//load方法是延迟加载数据,直到调用属性的getter方法时才加载数据
User user=(User)session.get(User.class,id);
return user;
}
}
可以看出冗余代码很多,下面简单地封装一下:
HibernateSessionUtil.java :
public class HibernateSessionUtil {
private static final ThreadLocal<Session> sessionLocal=new ThreadLocal<Session>();
public static Session getSession(){
Session session=sessionLocal.get();
if(session==null|| !session.isOpen()){
Configuration conf=new Configuration();
conf.configure();
SessionFactory sf=conf.buildSessionFactory();
session=sf.openSession();
sessionLocal.set(session);
}
return session;
}
public static void closeSession(){
Session session=sessionLocal.get();
sessionLocal.set(null);
if(session!=null){
session.close();
}
}
}
BaseDAO.java :
public class BaseDAO {
public Session getSession(){
return HibernateSessionUtil.getSession();
}
public void closeSession(){
HibernateSessionUtil.closeSession();
}
}
UserDAO.java :
public class UserDAO extends BaseDAO{
public void add(User user){
Session session=this.getSession();
Transaction txt=session.beginTransaction();
session.save(user);
txt.commit();
this.closeSession();
}
public void delete(int id){
Session session=this.getSession();
Transaction txt=session.beginTransaction();
User user=findById(id);
session.delete(user);
txt.commit();
this.closeSession();
}
public void update(User user){
Session session=this.getSession();
Transaction txt=session.beginTransaction();
session.update(user);
txt.commit();
this.closeSession();
}
public User findById(int id){
Session session=this.getSession();
User user=(User)session.get(User.class,id);
return user;
}
}