封裝HibernateUtil(靜態單例模式)和增刪改查方法

來源:互聯網
上載者:User

標籤:常量   font   ram   封裝   query   其他   commit   單例   ring   

封裝HibernateUtil

import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class HibernateUtil {    //定義常量是為了實現單例,不讓隨便new    //ThreadLocal<Session>不是集合,是線程鎖,為了單安全執行緒    private static final ThreadLocal<Session> lock = new ThreadLocal<Session>();        private static final SessionFactory factory = buildFactory();    private static SessionFactory buildFactory() {        Configuration cfg = new Configuration().configure();//讀取 hibernate.cfg.xml 的配置資訊        return cfg.buildSessionFactory();    }        public static Session getSession() {        //先擷取線程鎖中的session        Session session = lock.get();                if (session == null) {//如果沒有session就建立一個session賦值給lock            session = factory.openSession();            lock.set(session);        }                return session;    }    public static void closeSession() {                Session session = lock.get();//先擷取線程鎖中的session                if (session != null) {//如果session有值,那麼關閉session            session.close();            lock.set(null);    //將session關閉之後再給lock賦值null,方便其他線程使用            }    }    }

 

增刪改查方法封裝,使用時是調取該類中的具體方法即可

import java.util.List;import org.hibernate.Session;import org.hibernate.query.Query;import maya.model.Sto;import maya.util.SearchItem;public class StoDAO {    private Session session = null;    public StoDAO() {//建構函式,引用HibernateUtil類的getSession方法        session = HibernateUtil.getSession();    }//添加。要用 事務來控制,另外,增、改也需要    public void insert(Sto data) {        data = null;        try {            session.beginTransaction();//開始事務            data = new Sto();            data.setStorno(data.getStorno());            data.setStorname(data.getStorname());            data.setStoset(data.getStoset());            data.setStoaddr(data.getStoaddr());            data.setWindow(data.getWindow());            data.setTelno1(data.getTelno1());                        session.save(data);//添加到session中            session.getTransaction().commit();//提交事務        } catch (Exception e) {            session.getTransaction().rollback();//拋出異常,交易回復至開始            e.printStackTrace();        } finally {            HibernateUtil.closeSession();//關閉事務        }      }//刪除    public void delete(String storno) {        try {                        Sto data = session.load(Sto.class, storno);//先查出要刪除的對象                        if (data != null) {                session.beginTransaction();                session.delete(data);//將刪除資訊添加至session                                    session.getTransaction().commit();//提交事務            }        } catch (Exception e) {            e.printStackTrace();            session.getTransaction().rollback();        } finally {            HibernateUtil.closeSession();//關閉        }    }//修改    public void update(Sto data) {                try {                        Sto sto = session.get(Sto.class, data.getStorno());//先查出要修改的對象            if (data != null) {                session.beginTransaction();//開始事務                sto.setStorname(data.getStorname());                sto.setStoset(data.getStoset());                sto.setStoaddr(data.getStoaddr());                sto.setWindow(data.getWindow());                sto.setTelno1(data.getTelno1());                                session.update(sto);//將修改資訊添加至session                session.getTransaction().commit();//提交事務            }        } catch (Exception e) {            e.printStackTrace();            session.getTransaction().rollback();                    } finally {            session.close();//關閉        }    }//查單個,不用依靠事務控制        public Sto select2(String storno) {            Sto sto = null;            try {                sto = (Sto)session.createQuery("from Sto where storno=?")                        .setParameter(0, storno)//第一個問號用0來表示,第二個問號用1,以此類推                        .getSingleResult();            } catch (Exception e) {                e.printStackTrace();            } finally {                HibernateUtil.closeSession();//調用HibernateUtil類的close方法來關閉            }            return sto;        }//查集合    public List<Sto> select() {        List<Sto> list = null;        try {            list = session.createQuery("from Sto").getResultList();        } catch (Exception e) {            e.printStackTrace();        } finally {            HibernateUtil.closeSession();        }        return list;    }}

 

封裝HibernateUtil(靜態單例模式)和增刪改查方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.