Hibernate 框架(五)(hibernate的封裝工具)

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());

		}

	}



}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章