Hibernate BaseDao

来源:互联网 发布:软件测试行业发展前景 编辑:程序博客网 时间:2024/04/28 10:02
package com.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class BaseDao {
    private static SessionFactory sf;
    private static ThreadLocal<Session> tl=new ThreadLocal<Session>();
    
    static{
        Configuration config=new Configuration().configure();
        sf=config.buildSessionFactory();
    }
    
    public static Session getSession(){
        Session session=tl.get();
        if(session==null){
            session=sf.openSession();
            //将获得的session保存到线程本地变量中
            tl.set(session);
        }
        return session;
    }
    
    public static void closeSession(){
        Session session=tl.get();
        if(session!=null && session.isOpen()){
            //将线程本地变量中的session清空
            tl.set(null);
            session.close();
        }
    }
    
    public static int add(Object obj){
        int count=0;
        Session session=getSession();
        session.beginTransaction();
        try {
            session.save(obj);
            session.getTransaction().commit();
            count=1;
        } catch (Exception e) {
            session.getTransaction().rollback();
            e.printStackTrace();
        }
        return count;
    }
    
    public static int update(Object obj){
        int count=0;
        Session session=getSession();
        session.beginTransaction();
        try {
            session.update(obj);
            session.getTransaction().commit();
            count=1;
        } catch (Exception e) {
            session.getTransaction().rollback();
            e.printStackTrace();
        }
        return count;
    }

    public static int delete(Object obj){
        int count=0;
        Session session=getSession();
        session.beginTransaction();
        try {
            session.delete(obj);
            session.getTransaction().commit();
            count=1;
        } catch (Exception e) {
            session.getTransaction().rollback();
            e.printStackTrace();
        }
        return count;
    }

    public static List findAll(Class clazz){
        List list=new ArrayList();
        Session session=getSession();
        Criteria c=session.createCriteria(clazz);
        list=c.list();
        closeSession();
        return list;
    }
    
    public static Object ById(Class clazz,int id ){
        Object obj=null;
        Session session=getSession();
        obj=session.get(clazz, id);
        closeSession();
        return obj;
    }
    
}

0 0