1. 工具类HibernateUitl:
package com.huey.util;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistryBuilder;
/**
* Hibernate工具类
* @author Huey2672
*
*/
public class HibernateUtil {
private static SessionFactory sessionFactory;
static {
// 读取配置文件信息
Configuration cfg = new Configuration().configure("hibernate.cfg.xml");
ServiceRegistryBuilder srb = new ServiceRegistryBuilder()
.applySettings(cfg.getProperties());
// 创建sessionFactory
sessionFactory = cfg.buildSessionFactory(srb.buildServiceRegistry());
}
/**
* 获取session
* @return
*/
public static Session getSession() {
Session session = null;
try {
// 打开session
session = sessionFactory.openSession();
} catch (Exception e) {
e.printStackTrace();
}
return session;
}
/**
* 关闭session
* @param session
*/
public static void closeSession(Session session) {
if (session != null) {
try {
// 关闭session
session.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 添加对象实例
* @param object 要添加的对象实例
* @return
*/
public static boolean addObject(Object object) {
HibernateTransaction saveTransaction = new HibernateSaveTransaction();
return saveTransaction.doTransaction(object);
}
/**
* 删除对象实例
* @param clazz 要删除的对象实例的类型
* @param id 要删除的对象实例
* @return
*/
public static boolean deleteObjectById(Class<?> clazz, int id) {
Object object = findObjectById(clazz, id);
HibernateTransaction deleteTransaction = new HibernateDeleteTransaction();
return deleteTransaction.doTransaction(object);
}
/**
* 更新对象实例
* @param object 要被更新的对象实例
* @return
*/
public static boolean updateObject(Object object) {
HibernateTransaction updateTransaction = new HibernateUpdateTransaction();
return updateTransaction.doTransaction(object);
}
/**
* 通过对象实例的ID查找对象实例
* @param clazz 对象的类型
* @param id 对象实例的ID
* @return
*/
public static Object findObjectById(Class<?> clazz, int id) {
Session session = getSession();
Object object = session.get(clazz, id);
session.close();
return object;
}
/**
* 通过HQL语句查询
* @param hql HQL语句
* @return 结果集
*/
public static List<?> queryByHql(String hql, Object... params) {
Session session = getSession();
Query query = session.createQuery(hql);
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);
}
List<?> list = query.list();
return list;
}
}
2. Hibernate事务处理的抽象类HibernateTransaction:
package com.huey.util;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
/**
* Hibernate事务处理,是save、delete、update等事务的模板方法
* @author Huey2672
*
*/
public abstract class HibernateTransaction {
protected Session session;
public final boolean doTransaction(Object object){
boolean result = true;
session = HibernateUtil.getSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
// 要执行的事务save、delete还是update?
executeUpdate(object);
transaction.commit();
} catch (HibernateException e) {
if(transaction != null){
transaction.rollback();
}
e.printStackTrace();
result = false;
}finally{
HibernateUtil.closeSession(session);
}
return result;
}
public abstract void executeUpdate(Object object);
}
3. Hibernate保存对象事务处理:
package com.huey.util;
/**
* Hibernate保存对象事务处理
* @author Huey2672
*
*/
public class HibernateSaveTransaction extends HibernateTransaction {
@Override
public void executeUpdate(Object object) {
session.save(object);
}
}
4. Hibernate删除对象事务处理:
package com.huey.util;
/**
* Hibernate删除对象事务处理
* @author Huey2672
*
*/
public class HibernateDeleteTransaction extends HibernateTransaction {
@Override
public void executeUpdate(Object object) {
session.delete(object);
}
}
5. Hibernate更新对象事务处理:
package com.huey.util;
/**
* Hibernate更新对象事务处理
* @author Huey2672
*
*/
public class HibernateUpdateTransaction extends HibernateTransaction {
@Override
public void executeUpdate(Object object) {
session.update(object);
}
}