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*************************/

三个修改方法

三个添加方法

八个查询方法

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值