package dc.com;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
public class HiberanteUtitl {
//配置文件
private static Configuration config;
private static SessionFactory sessionFactory;
private static Session session;
//定義靜態塊,完成配置對象的初始化操作和會話對象的初始化操作
static{
config=new Configuration().configure();
sessionFactory=config.buildSessionFactory();
}
//獲取會話
public static Session getSession(){
return sessionFactory.openSession();
}
//關閉會話
public static void closeSession(Session session){
if(session!=null){
session.close();
}
}
//添加
public static boolean add(Object obj){
Session session=null;
Transaction transaction =null;
try{
session=HiberanteUtitl.getSession();
transaction = session.beginTransaction();
session.save(obj);
transaction.commit();
return true;
}catch(Exception e){
if(transaction!=null){
transaction.rollback();
}
return false;
}finally{
if(session !=null){
session.close();
}
}
}
//更新數據
public static boolean update(Object obj) {
// 定義會話對象,並設置爲null
Session session = null;
// 定義事務,並設置爲null
Transaction t = null;
try {
// 獲取會話對象
session = HiberanteUtitl.getSession();
// 獲取事務對象
t = session.beginTransaction();
session.update(obj);
// 提交事務
t.commit();
// 提交成功返回true
return true;
} catch (Exception e) {
// 若有錯誤,則判斷事務是否提交成功,若提交成功則要回滾
if (t != null) {
t.rollback();
}
// 錯誤,返回false
return false;
} finally {
// 不管程序是否有錯,都要判斷會話是否創建,若已經創建,則對它進行關閉
if (session != null) {
session.close();
}
}
}
/**
* 刪除指定對象,成功返回true,否則返回falses
* @param obj 是數據表對應的持久化類
* @return 刪除成功返回true,否則返回 false
*/
public static boolean del(Object obj) {
// 定義會話對象,並設置爲null
Session session = null;
// 定義事務,並設置爲null
Transaction t = null;
try {
// 獲取會話對象
session = HiberanteUtitl.getSession();
// 獲取事務對象
t = session.beginTransaction();
session.delete(obj);
// 提交事務
t.commit();
// 提交成功返回true
return true;
} catch (Exception e) {
// 若有錯誤,則判斷事務是否提交成功,若提交成功則要回滾
if (t != null) {
t.rollback();
}
// 錯誤,返回false
return false;
} finally {
// 不管程序是否有錯,都要判斷會話是否創建,若已經創建,則對它進行關閉
if (session != null) {
session.close();
}
}
}
/**
* 根據id和數據表對應持久類來獲數據表對應的記錄
* @param classe 持久化類
* @param id 持久化類的id
* @return 持久化類的對象,否則返回null
*/
public static Object getById(Class classe, Serializable id) {
// 定義會話對象,並設置爲null
Session session = null;
//定義對象
Object obj = null;
try {
// 獲取會話對象
session = HiberanteUtitl.getSession();
//獲取數據
obj = session.get(classe, id);
//返回數據
return obj;
} catch (Exception e) {
//獲取失敗返回null
return null;
} finally {
// 不管程序是否有錯,都要判斷會話是否創建,若已經創建,則對它進行關閉
if (session != null) {
session.close();
}
}
}
/**
* 獲取數據表中所有數據
* @param hql 對數據表進行查詢的語句,這是hibernate的查詢語句
* @return 成功返回所有數據,否則返回false;
*/
public static <T> List<T> getByHql(String hql) {
try{
/* 創建Query對象【HibernateUtils爲自定義的工具類】 */
Query query = HiberanteUtitl.getSession().createQuery(hql);
/* 獲取查詢結果的集合 */
List<T> list = query.list();
System.out.println(list.size());
if (list != null && list.size() > 0) {
/* 如果集合中有值的話,返回集合的第一個值,作爲當前查詢結果的對象返回 */
return list;
}else{
return null;
}
}catch(Exception e){
/* 如果錯誤值的話返回空 */
return null;
}
}
/**
* 獲取帶有參數的hql命令,即根據條件獲取指定數據
* @param hql hibernate的命令
* @param param 命令中的參數
* @return 若成功返回集合,否則返回null;
*/
public static <T> List<T> getByHql(String hql, Map<String, Object> param) {
try{
/* 創建Query對象【HibernateUtils爲自定義的工具類】 */
Query query = HiberanteUtitl.getSession().createQuery(hql);
//判斷命令中是否有參數,若有參數則對參數進行賦值操作
if (param != null && !param.isEmpty()) {
for (String key : param.keySet()) {
query.setParameter(key, param.get(key));
}
}
//返回返回的數據集,放在集合中
List<T> li = query.list();
//判斷是否有數據若則返回數據集,否則返回false.
if (li != null && li.size() > 0) {
return li;
}else{
return null;
}
}catch(Exception e){
/* 如果錯誤值的話返回空 */
return null;
}
}
/**
* 獲取帶有參數的hql命令,即根據條件查詢指定數據
* @param hql hibernate的命令
* @param param 命令中的參數
* @return 若存在返回true,否則返回false;
*/
public static boolean CheckByHql(String hql, Map<String, Object> param) {
try{
/* 創建Query對象【HibernateUtils爲自定義的工具類】 */
Query query = HiberanteUtitl.getSession().createQuery(hql);
//判斷命令中是否有參數,若有參數則對參數進行賦值操作
if (param != null && !param.isEmpty()) {
for (String key : param.keySet()) {
query.setParameter(key, param.get(key));
}
}
//返回返回的數據集,放在集合中
List<Object> li = query.list();
//判斷是否有數據若則返回數據集,否則返回false.
if (li != null && li.size() > 0) {
return true;
}else{
return false;
}
}catch(Exception e){
/* 如果錯誤值的話返回空 */
return false;
}
}
/**
* 採用分頁方式獲取數據
* @param hql 獲取數據的hibernate的hql命令
* @param param 若命令中有參數,則參數和參數值放在param集合中
* @param page 指定是顯示第幾頁
* @param pagesize 每一頁顯示的記錄個數
* @return 成功返回數據集,否則返回null;
*/
public static <T> List<T> findByHql(String hql, Map<String, Object> param, int page,int pagesize) {
/* 創建Query對象【HibernateUtils爲自定義的工具類】 */
Query query = HiberanteUtitl.getSession().createQuery(hql);
//判斷命令中是否有參數,若有參數則對參數進行賦值操作
if (param != null && !param.isEmpty()) {
for (String key : param.keySet()) {
query.setParameter(key, param.get(key));
}
}
//獲取數據的起始位置
query.setFirstResult((page-1)*pagesize);
//從指定位置開始獲取記錄數據
query.setMaxResults(pagesize);
List<T> li = query.list();
if (li.size() > 0 && li != null) {
return li;
}
return null;
}
}
工具測試類
package dc.com;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class testHiberante {
public static void main(String[] args) {
//添加數據
Login user=new Login();
user.setName("lisi");
user.setPass("lisi");
if(HiberanteUtitl.add(user)){
System.out.println("添加數據成功");
}else{
System.out.println("添加數據失敗");
}
//更新數據
//Login user=new Login();
user.setId(1);
user.setName("lisi");
user.setPass("lisi");
if(HiberanteUtitl.update(user)){
System.out.println("更新數據成功");
}else{
System.out.println("更新數據失敗");
}
//刪除數據
//Login user=new Login();
user.setId(7);
user.setName("lisi");
user.setPass("lisi");
if(HiberanteUtitl.del(user)){
System.out.println("刪除數據成功");
}else{
System.out.println("刪除數據失敗");
}
//查詢所有數據,其中Login是login數據表對應的持久化類
String hql="from Login";
List<Login> li=HiberanteUtitl.getByHql(hql);
for (Login Login : li) {
System.out.println("id="+Login.getId()+",name="+Login.getPass()+",pass="+Login.getPass());
}
//條件查詢
String hql1="from Login where id=:id";
Map<String,Object> param=new HashMap<String, Object>();
param.put("id", 2);
List<Login> lit=HiberanteUtitl.getByHql(hql1,param);
for (Login Login : lit) {
System.out.println("id="+Login.getId()+",name="+Login.getPass()+",pass="+Login.getPass());
}
//分頁查詢
String hql2="from Login ";
List<Login> li2=HiberanteUtitl.findByHql(hql2,null,1,10);
for (Login Login : li2) {
System.out.println("id="+Login.getId()+",name="+Login.getPass()+",pass="+Login.getPass());
}
}
}