📄 hibernateutil.java
字号:
package com.tarena.shoppingcart.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static SessionFactory sf;
private static ThreadLocal<Session> sessions = new ThreadLocal<Session>();
private static ThreadLocal<Transaction> transactions = new ThreadLocal<Transaction>();
static
{
try
{
Configuration config = new Configuration();
sf = config.configure().buildSessionFactory();
}catch(Throwable t)
{
t.printStackTrace();
throw new ExceptionInInitializerError(t);
}
}
//取得当前线程的session实例
public static Session currentSession(){
Session s = sessions.get();
//如果当前session实例存在并可用,则返回
if(s!=null && s.isOpen()){
return s;
}
//如果当前session不存在或不可用,则创建一个新的session实例,保存并返回
sessions.set(sf.openSession());
return sessions.get();
}
//关闭当前线程的session
public static void closeSession(){
Session s = (Session) sessions.get();
if(s!=null && s.isOpen()){
s.close();
}
//解除引用
sessions.set(null);
}
//开始一个事务
public static void beginTransaction(){
//如果当前线程没有开启的事务则开始一个新的事务,并保存该事务
if(transactions.get()==null){
transactions.set(currentSession().beginTransaction());
}
}
//提交当前事务
public static void commitTransaction(){
Transaction tran = transactions.get();
//提交当前事务并解除保存的引用
if(tran!=null && !tran.wasCommitted() && !tran.wasRolledBack()){
tran.commit();
transactions.set(null);
}
}
//回滚当前事务
public static void roolbackTransaction(){
Transaction tran = transactions.get();
//回滚当前事务并解除保存的引用
if(tran!=null && !tran.wasCommitted() && !tran.wasRolledBack()){
tran.rollback();
transactions.set(null);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -