package com.newshopping.util;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
/**
* Hibernate4操作数据库工具类(与spring集成)
*
* @author liyulin
*
* @version 2.4 2013-08-15
*
*/
public class HibernateUtil {
private SessionFactory sessionFactory;
public HibernateUtil(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
/*********************************************** HQL操作数据库 ***********************************************/
/**
* 增加一条记录
*
* @param obj
*
* @return -1 增加失败;1 增加成功
*
*/
public int save(Object obj) {
Session session = sessionFactory.getCurrentSession();
try {
session.save(obj);
return 1;
} catch (Exception e) {
// 当且仅当捕获到RuntimeException类型异常时,Spring事务才会回滚,对普通Exception异常无效
throw new RuntimeException(e.getMessage());
}
}
/**
* 修改一条记录
*
* @param obj
*
* @return -1 修改失败;1 修改成功
*
*/
public int update(Object obj) {
Session session = sessionFactory.getCurrentSession();
try {
session.update(obj);
return 1;
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
/**
* 删除一条记录
*
* @param obj
*
* @return -1 删除失败;1 删除成功
*
*/
public int delete(Object obj) {
Session session = sessionFactory.getCurrentSession();
try {
session.delete(obj);
return 1;
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
/**
* 查询一条记录(HQL:使用positional parameter的方式进行参数绑定)
*
* @param hql
* hql语句(参数用"?"表示)
*
* @param params
* hql参数数组
*
* @return Object
*
*/
public Object searchObjectByHql(String hql, Object[] params) {
Session session = sessionFactory.getCurrentSession();
Object object = null;
try {
// 参数绑定
Query query = session.createQuery(hql);
if (params != null) {
for (int i = 0, size = params.length; i < size; i++) {
query = query.setParameter(i, params[i]);
}
}
object = query.uniqueResult();
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
return object;
}
/**
* 分页查询(HQL:使用positional parameter的方式进行参数绑定)
*
* @param hql
* hql语句(参数用"?"表示)
*
* @param params
* hql参数数组
*
* @param page
* 开始页
*
* @param rows
* 每页的记录条数
*
* @return List 返回结果
*
*/
@SuppressWarnings("rawtypes")
public List searchListByHql(String hql, Object[] params, int page, int rows) {
List list = null;
Session session = null;
try {
session = sessionFactory.getCurrentSession();
// 参数绑定
Query query = session.createQuery(hql);
if (params != null) {
for (int i = 0, size = params.length; i < size; i++) {
query = query.setParameter(i, params[i]);
}
}
query.setFirstResult((page - 1) * rows);// 设置第几页
query.setMaxResults(rows); // 设置每页多少条记录
list = query.list();
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
return list;
}
/**
* 集合查询(HQL:使用positional parameter的方式进行参数绑定)
*
* @param hql
* hql语句(参数用"?"表示)
*
* @param params
* hql参数数组
*
* @return List 返回结果
*
*/
@SuppressWarnings("rawtypes")
public List searchListByHql(String hql, Object[] params) {
List list = null;
Session session = null;
try {
session = sessionFactory.getCurrentSession();
// 参数绑定
Query query = session.createQuery(hql);
if (params != null) {
for (int i = 0, size = params.length; i < size; i++) {
query = query.setParameter(i, params[i]);
}
}
list = query.list();
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
return list;
}
/**
* 删除、更改(HQL:使用positional parameter的方式进行参数绑定)
*
* @param hql
* hql语句(参数用"?"表示)
*
* @param params
* hql参数数组
*
* @return 0:失败;非0:成功
*
*/
public int executeHQL(String hql, Object[] params) {
Session session = sessionFactory.getCurrentSession();
int success = 0;// 是否操作成功
try {
// 参数绑定
Query query = session.createQuery(hql);
if (params != null) {
for (int i = 0, size = params.length; i < size; i++) {
query = query.setParameter(i, params[i]);
}
}
success = query.executeUpdate();
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
return success;
}
/*********************************************** 标准SQL操作数据库 ***********************************************/
/**
* 查询一条记录(标准SQL操作数据库:使用positional parameter的方式进行参数绑定)
*
* @param sql
* sql语句(参数用"?"表示)
*
* @param params
* sql参数数组
*
* @return Object
*
*/
@SuppressWarnings("rawtypes")
public Object searchObjectBySql(String sql, Object[] params, Class obj) {
Session session = sessionFactory.getCurrentSession();
Object object = null;
try {
SQLQuery query = session.createSQLQuery(sql);
// 参数赋值
if (params != null) {
for (int i = 0, size = params.length; i < size; i++) {
query = (SQLQuery) query.setParameter(i, params[i]);
}
}
object = query.addEntity(obj).uniqueResult();
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
return object;
}
/**
* 分页查询(标准SQL操作数据库:使用positional parameter的方式进行参数绑定)
*
* @param sql
* sql语句(参数用"?"表示)
*
* @param params
* sql参数数组
*
* @param page
* 开始页
*
* @param rows
* 每页的记录条数
*
* @param obj
* 欲查询的对象的class
*
* @return List 返回结果
*
*/
@SuppressWarnings("rawtypes")
public List searchListBySql(String sql, Object[] params, int page,
int rows, Class obj) {
Session session = sessionFactory.getCurrentSession();
List list = null;
try {
SQLQuery query = session.createSQLQuery(sql);
// 参数赋值
if (params != null) {
for (int i = 0, size = params.length; i < size; i++) {
query = (SQLQuery) query.setParameter(i, params[i]);
}
}
list = query.addEntity(obj).setFirstResult((page - 1) * rows)
.setMaxResults(rows).list();
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
return list;
}
/**
* 集合查询(标准SQL操作数据库:使用positional parameter的方式进行参数绑定)
*
* @param sql
* sql语句(参数用"?"表示)
*
* @param params
* sql参数数组
*
* @param obj
* 欲查询的对象的class
*
* @return List 返回结果
*
*/
@SuppressWarnings("rawtypes")
public List searchListBySql(String sql, Object[] params, Class obj) {
Session session = sessionFactory.getCurrentSession();
List list = null;
try {
SQLQuery query = session.createSQLQuery(sql);
// 参数赋值
if (params != null) {
for (int i = 0, size = params.length; i < size; i++) {
query = (SQLQuery) query.setParameter(i, params[i]);
}
}
list = query.addEntity(obj).list();
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
return list;
}
/**
* 增加、删除、更改(标准SQL操作数据库:使用positional parameter的方式进行参数绑定)
*
* @param sql
* sql语句(参数用"?"表示)
*
* @param params
* sql参数数组
*
* @return 0:失败;非0:成功
*
*/
public int executeSQL(String sql, Object[] params) {
Session session = sessionFactory.getCurrentSession();
int success = 0;// 是否操作成功
try {
SQLQuery query = session.createSQLQuery(sql);
// 参数赋值
if (params != null) {
for (int i = 0, size = params.length; i < size; i++) {
query = (SQLQuery) query.setParameter(i, params[i]);
}
}
success = query.executeUpdate();
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
return success;
}
}
错误处,请指出,谢谢!