package com.insigma.books.util;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.insigma.books.factory.HibernateSessionFactory;
/**
* Hibernate操作数据库工具类(防sql注入)
*
* @author liyulin
*
* @version 2.1 2013/07/22
*
*/
public final class HibernateTool2 {
/*********************************************** HQL操作数据库 ***********************************************/
/**
* 增加一条记录
*
* @param obj
*
* @return -1 增加失败;1 增加成功
*
*/
public int add(Object obj) {
// 产生一个数据库的连接
Session session = HibernateSessionFactory.getSession();
// 开启一个事物
Transaction ts = session.beginTransaction();
try {
// 新增数据库记录
session.save(obj);
// 刷新缓存,变为持久化状态
session.flush();
// 提交事务
ts.commit();
return 1;
} catch (Exception e) {
if (ts != null) {
ts.rollback();
}
e.printStackTrace();
return -1;
} finally {
if (session != null && session.isOpen()) {
// 关闭连接
HibernateSessionFactory.closeSession();
}
}
}
/**
* 修改一条记录
*
* @param obj
*
* @return -1 修改失败;1 修改成功
*
*/
public int edit(Object obj) {
// 产生一个数据库的连接
Session session = HibernateSessionFactory.getSession();
// 开启一个事物
Transaction ts = session.beginTransaction();
try {
// 新增数据库记录
session.update(obj);
// 刷新缓存,变为持久化状态
session.flush();
// 提交事务
ts.commit();
return 1;
} catch (Exception e) {
if (ts != null) {
ts.rollback();
}
e.printStackTrace();
return -1;
} finally {
if (session != null && session.isOpen()) {
// 关闭连接
HibernateSessionFactory.closeSession();
}
}
}
/**
* 删除一条记录
*
* @param obj
*
* @return -1 删除失败;1 删除成功
*
*/
public int delete(Object obj) {
// 产生一个数据库的连接
Session session = HibernateSessionFactory.getSession();
// 开启一个事物
Transaction ts = session.beginTransaction();
try {
// 新增数据库记录
session.delete(obj);
// 刷新缓存,变为持久化状态
session.flush();
// 提交事务
ts.commit();
return 1;
} catch (Exception e) {
if (ts != null) {
ts.rollback();
}
e.printStackTrace();
return -1;
} finally {
if (session != null && session.isOpen()) {
// 关闭连接
HibernateSessionFactory.closeSession();
}
}
}
/**
* 查询一条记录(HQL:使用positional parameter的方式进行参数绑定)
*
* @param hql
* hql语句(参数用"?"表示)
*
* @param params
* hql参数数组
*
* @return Object
*
*/
public Object findForObjectByHql(String hql, Object[] params) {
Session session = HibernateSessionFactory.getSession();
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) {
e.printStackTrace();
} finally {
if (session != null && session.isOpen()) {
// 关闭连接
HibernateSessionFactory.closeSession();
}
}
return object;
}
/**
* 分页查询(HQL:使用positional parameter的方式进行参数绑定)
*
* @param hql
* hql语句(参数用"?"表示)
*
* @param params
* hql参数数组
*
* @param page
* 开始页
*
* @param rows
* 每页的记录条数
*
* @return List 返回结果
*
*/
@SuppressWarnings("rawtypes")
public List findForListByHql(String hql, Object[] params, int page, int rows) {
List list = null;
Session session = null;
try {
session = HibernateSessionFactory.getSession();
// 参数绑定
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) {
e.printStackTrace();
} finally {
if (session != null && session.isOpen()) {
// 关闭连接
HibernateSessionFactory.closeSession();
}
}
return list;
}
/**
* 删除、更改(HQL:使用positional parameter的方式进行参数绑定)
*
* @param hql
* hql语句(参数用"?"表示)
*
* @param params
* hql参数数组
*
* @return 0:失败;非0:成功
*
*/
public int executeHQL(String hql, Object[] params) {
// 产生一个数据库的连接
Session session = HibernateSessionFactory.getSession();
// 开启一个事物
Transaction ts = session.beginTransaction();
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();
// 提交事务
ts.commit();
} catch (Exception e) {
if (ts != null) {
ts.rollback();
}
e.printStackTrace();
} finally {
if (session != null && session.isOpen()) {
// 关闭连接
HibernateSessionFactory.closeSession();
}
}
return success;
}
/*********************************************** 标准SQL操作数据库 ***********************************************/
/**
* 查询一条记录(标准SQL操作数据库:使用positional parameter的方式进行参数绑定)
*
* @param sql
* sql语句(参数用"?"表示)
*
* @param params
* sql参数数组
*
* @return Object
*
*/
@SuppressWarnings("rawtypes")
public Object findForObjectBySql(String sql, Object[] params, Class obj) {
Session session = HibernateSessionFactory.getSession();
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) {
e.printStackTrace();
} finally {
if (session != null && session.isOpen()) {
// 关闭连接
HibernateSessionFactory.closeSession();
}
}
return object;
}
/**
* 分页查询(标准SQL操作数据库:使用positional parameter的方式进行参数绑定)
*
* @param sql
* sql语句(参数用"?"表示)
*
* @param params
* sql参数数组
*
* @param page
* 开始页
*
* @param rows
* 每页的记录条数
*
* @param obj
* 欲查询的对象的class
*
* @return List 返回结果
*
*/
@SuppressWarnings("rawtypes")
public List findForListBySql(String sql, Object[] params, int page,
int rows, Class obj) {
Session session = HibernateSessionFactory.getSession();
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) {
e.printStackTrace();
} finally {
if (session != null && session.isOpen()) {
HibernateSessionFactory.closeSession();
}
}
return list;
}
/**
* 增加、删除、更改(标准SQL操作数据库:使用positional parameter的方式进行参数绑定)
*
* @param sql
* sql语句(参数用"?"表示)
*
* @param params
* sql参数数组
*
* @return 0:失败;非0:成功
*
*/
public int executeSQL(String sql, Object[] params) {
// 产生一个数据库的连接
Session session = HibernateSessionFactory.getSession();
// 开启一个事物
Transaction ts = session.beginTransaction();
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();
// 提交事务
ts.commit();
} catch (Exception e) {
if (ts != null) {
ts.rollback();
}
e.printStackTrace();
} finally {
if (session != null && session.isOpen()) {
// 关闭连接
HibernateSessionFactory.closeSession();
}
}
return success;
}
}
错误处,请指出,谢谢!
数据库操作与查询优化技巧
本文深入探讨了数据库操作中的HQL与SQL查询方法,包括增删改查、分页查询及执行SQL语句,同时提供了参数绑定和事务管理的最佳实践,确保数据操作的安全性和高效性。
173

被折叠的 条评论
为什么被折叠?



