Spring&Hibernate增刪改方法總結,版本號V1.0.0(獻給糾結於SSH框架的學子們)

<!--
	Title:Spring&Hibernate增刪改方法總結,版本號V1.0.0(獻給糾結於SSH框架的學子們)
	Author:Lovingshu
	Date:2012-1-5 18:00
	
	Tip:將被源碼複製到Dao類,然後其他dao類繼承這個dao類,然後採用super.或者this.調用裏面我總結的方法!
	
	Remark:這篇文章主要是源碼,總結了8個查詢方法,3個修改方法,3個添加方法,詳見參考圖,都是最常見的,
	我只是對其進行了總結和整理,還有就是避免了糾結於到底使用Hibernate還是Spring中的方法的問題!
	但是這個版本也許存在一定的問題,我寫好後沒有經過嚴格的測試,嘿嘿~但願以後有時間改進!
	
	附帶:本來這篇文章應該提前完成的,但是由於我去體驗了一下<<上古5>>的MOD去了,結果就忘記放下手柄了,然後文章就被推遲了~Sorry啦
	
	最後:希望有用到的同學指出裏面的不足,以及各種提議和意見,以便修正和進步~O(∩_∩)O~
-->

/************************code begin*************************/
package com.shu.dao.impl;

import java.util.List;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class BaseDao<T> extends HibernateDaoSupport{
	//一個session對象
	Session se=null;
	
	/**
	 * 根據hql進行查詢
	 * @param 需要執行的hql語句
	 * @return 查詢後的List集合(泛型)
	 */
	public List<T> queryHql(String hql){
		//採用自帶的方法
		return getHibernateTemplate().find(hql);
	}
	
	/**
	 * 根據sql語句進行查詢
	 * @param 要執行的sql語句
	 * @param 集合的類型所在的類的全名,如java.lang.Integer或com.shu.model.User;
	 * @return
	 */
	public List<T> querySql(String sql,String fullClassName){
		try{
			//得到session對象
			se=getHibernateTemplate().getSessionFactory().openSession();
			//調用session中的查詢方法
			return se.createSQLQuery(sql).addEntity(fullClassName).list();
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}finally{
			//關閉該關閉的
			se.clear();
			se.close();
		}
	}
	
	/**
	 * 根據一個對象查詢該類對象的集合
	 * @param 需要查詢的一個具體對象類型
	 * @return 查詢到的集合(泛型)
	 */
	public List<T> queryHql(Object obj){
		//調用自帶方法
		return getHibernateTemplate().findByExample(obj);
	}
	
	/**
	 * 帶分頁查詢的hql查詢
	 * @param hql
	 * @param 本次查詢最多需要查詢多少條記錄
	 * @param 第一條記錄的下標
	 * @return
	 */
	public List<T> queryHql(String hql,int maxResult,int firstResult){
		try{
			//得到session對象
			se=getHibernateTemplate().getSessionFactory().openSession();
			//得到並返回集合對象
			return se.createQuery(hql).setMaxResults(maxResult).setFirstResult(firstResult).list();
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}finally{
			//關掉該關閉的
			se.clear();
			se.close();
		}
	}
	
	/**
	 * 根據實體對象進行分頁查詢
	 * @param obj
	 * @param maxResult
	 * @param firstResult
	 * @return
	 */
	public List<T> queryHql(Object obj,int maxResult,int firstResult){
		//調用自帶方法
		return getHibernateTemplate().findByExample(obj, firstResult, maxResult);
	}
	
	/**
	 * 帶分頁查詢的sql語句查詢
	 * @param sql
	 * @param maxResult
	 * @param firstResult
	 * @return
	 */
	public List<T> querySql(String sql,int maxResult,int firstResult){
		try{
			//得到session對象
			se=getHibernateTemplate().getSessionFactory().openSession();
			//得到並返回集合
			return se.createSQLQuery(sql).setMaxResults(maxResult).setFirstResult(firstResult).list();
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}finally{
			//關閉該關閉的
			se.clear();
			se.close();
		}
	}
	
	/**
	 * 根據hql查詢單個對象(這個方法偷了一下懶,呵呵,其實就是在原來的基礎上處理了一下)
	 * @param hql
	 * @return
	 */
	public T querySingleHql(String hql){
		//調用的方法~嘿嘿~大家懂得
		List<T> list=queryHql(hql);
		//判斷是否有值
		if(list!=null&&list.size()>0){
			return list.get(0);
		}
		return null;
	}
	
	/**
	 * 根據sql查詢單個對象(偷懶方法如上)
	 * @param sql
	 * @return
	 */
	public T querySingleSql(String sql,String fullClassName){
		//調用的方法~嘿嘿~大家懂得
		List<T> list=querySql(sql,fullClassName);
		//判斷是否有值
		if(list!=null&&list.size()>0){
			return list.get(0);
		}
		return null;
	}
	
	/**
	 * 採用hql語句進行刪除,修改操作
	 * @param hql
	 * @return
	 */
	public boolean updateHql(String hql){
		try{
			//得到session對象
			se=getHibernateTemplate().getSessionFactory().openSession();
			//開啓事物
			se.beginTransaction();
			//執行hql查詢並判斷是否操作成功(這裏有個小小自我矛盾:0行受影響暫且歸爲修改失敗)
			if(se.createQuery(hql).executeUpdate()>0){
				//成功操作後則提交事物
				se.getTransaction().commit();
				return true;
			}
			//無用操作總歸爲錯誤操作,其實這裏不需要回滾的,但是又必須要進行事務操作,所以還是回滾吧
			se.getTransaction().rollback();
			return false;
		}catch(Exception e){
			//報錯則回滾事物
			se.getTransaction().rollback();
			return false;
		}finally{
			se.clear();
			se.close();
		}
	}
	
	/**
	 * 根據實體進行修改操作
	 * @param obj
	 * @return
	 */
	public boolean updateHql(Object obj){
		try{
			//調用自帶的修改方法
			getHibernateTemplate().update(obj);
			return true;
		}catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}
	
	/**
	 * 根據sql語句驚醒修改,刪除操縱
	 * @param sql
	 * @return
	 */
	public boolean updateSql(String sql){
		try{
			//得到session對象
			se=getHibernateTemplate().getSessionFactory().openSession();
			//開始事務處理
			se.beginTransaction();
			//執行sql查詢並判斷是否操作成功(這裏有個小小自我矛盾:0行受影響暫且歸爲修改失敗)
			if(se.createSQLQuery(sql).executeUpdate()>0){
				se.getTransaction().commit();
				return true;
			}
			//其實這裏不需要回滾的,但是又必須要進行事務操作,所以還是回滾吧
			se.getTransaction().rollback();
			return false;
		}catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}
	
	/**
	 * 根據hql進行添加操作
	 * @param hql
	 * @return
	 */
	public boolean addHql(String hql){
		try{
			se=getHibernateTemplate().getSessionFactory().openSession();
			//開啓事物
			se.beginTransaction();
			//調用save方法
			se.save(hql);
			//提交事物
			se.getTransaction().commit();
			return true;
		}catch(Exception e){
			//回滾事物
			se.getTransaction().rollback();
			return false;
		}finally{
			se.clear();
			se.close();
		}
	}
	
	/**
	 * 根據實體進行添加
	 * @param obj
	 * @return
	 */
	public boolean addHql(Object obj){
		try{
			//執行自帶的保存方法
			getHibernateTemplate().save(obj);
			return true;
		}catch(Exception e){
			e.printStackTrace();
			return false;
		}
	}
	/**
	 * 根據sql語句來添加
	 * @param sql
	 * @return
	 */
	public boolean addSql(String sql){
		try{
			se=getHibernateTemplate().getSessionFactory().openSession();
			//開啓事務
			se.beginTransaction();
			//執行添加操作
			se.save(sql);
			//提交併返回true
			se.getTransaction().commit();
			return true;
		}catch(Exception e){
			//回滾並提示操作失敗
			se.getTransaction().rollback();
			return false;
		}finally{
			se.clear();
			se.close();
		}
	}
}
/************************code end*************************/

三個修改方法

三個添加方法

八個查詢方法

發佈了62 篇原創文章 · 獲贊 5 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章