`
uule
  • 浏览: 6359014 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

Hibernate底层数据库操作函数BaseDao+具体实例

阅读更多
List ls = this.getHibernateTemplate().executeFind(new HibernateCallback<Object>() {
			@Override
			public Object doInHibernate(Session session) throws HibernateException, SQLException {
				return session.createSQLQuery(sql).list();
			}
		});

  

String hql = "from EsbServiceV v where v.providerApp = "+ user.getApplicationId() +"   and v.enabledFlag = 'Y'";		
		
		int rows = pageQueryParameter.getRows(); // 获取每页显示的条数
		final int firstResult = (pageQueryParameter.getPage() - 1) * rows;
		final int maxResults = rows;
		final String hq = hql;
		List<EsbServiceV> list = getHibernateTemplate().executeFind(new HibernateCallback<Object>() {
			public Object doInHibernate(Session session) throws HibernateException, SQLException {
				Query query = session.createQuery(hq);
				query.setFirstResult(firstResult);
				query.setMaxResults(maxResults);// 定义返回的记录数
				List list = query.list();
				return list;
			}
		});

 

 

1.

package com.techson.boct.dao;

import java.io.Serializable;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.CriteriaSpecification;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Projections;
import org.hibernate.impl.CriteriaImpl;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.techson.boct.page.PagerModel;

public class BaseDao<T> extends HibernateDaoSupport{
	public void delete(T o) {
		this.getHibernateTemplate().delete(o);
	}
	public void insert(T o) {
		this.getHibernateTemplate().save(o);
	}

	public T select(Class cls, Serializable id){
		return (T) this.getHibernateTemplate().get(cls, id);
	}
	public void update(T o) {
		this.getHibernateTemplate().update(o);
	}

	public List<T> getAll(String className) {
		String queryString = "from "+className;
		return this.getHibernateTemplate().find(queryString);
	}
	
	public List<T> getAllByQuery(String queryString) {
		return this.getHibernateTemplate().find(queryString);
	}
	
	public Query getQuery(final String queryStr)
	    throws DataAccessException {
		Query query = (Query) getHibernateTemplate().execute(
		        new HibernateCallback() {
		            public Object doInHibernate(Session session) {
		                return session.createQuery(queryStr);
		            }
		        });
		return query;
	}
	
	public List<T> getListByQuery(final String queryString,final int pageSize,final int pageIndex) {
//		Query query = this.getHibernateTemplate().getSessionFactory().getCurrentSession().createQuery(queryString);
		Query query = getQuery(queryString);
		query.setFirstResult(pageIndex * pageSize);
		query.setMaxResults(pageSize);
		return query.list();
	}

	public List<T> findByProperty(String className, String propertyName,
			Object value) throws Exception {
		String queryString = "from "+className+" where "+propertyName+" =?";
		return this.getHibernateTemplate().find(queryString,value);
	}
	
	public int findByCriteriaCount(final DetachedCriteria detachedCriteria){
		return (Integer) getHibernateTemplate().execute(new HibernateCallback() {
			public Object doInHibernate(Session session)throws HibernateException {
				Criteria criteria = detachedCriteria.getExecutableCriteria(session);
				return ((Integer) criteria.setProjection(Projections.rowCount()).uniqueResult()).intValue();
			}
		}, true);
	}
	
	public Map<String,Object> findPageByCriteria(final DetachedCriteria detachedCriteria,final int pageSize,final int pageIndex)throws Exception {
		return (Map<String,Object>) getHibernateTemplate().execute(new HibernateCallback() {
			public Object doInHibernate(Session session)throws HibernateException {
				Criteria criteria = detachedCriteria.getExecutableCriteria(session);
				List items = criteria.setFirstResult(pageIndex).setMaxResults(pageSize).list();
				int totalCount = items.size();
				if(totalCount >= pageSize){
					//移除order   chanHo 20080415
					List orderEntrys=null;
					Field field=null;

					CriteriaImpl impl = (CriteriaImpl) criteria;
					try {
						field = CriteriaImpl.class.getDeclaredField("orderEntries");
						field.setAccessible(true);//这是关键:)
						orderEntrys = (List)field.get(impl);
						field.set(criteria,new ArrayList()); 
					} catch (Exception e) {
						e.printStackTrace();
					} 
					
					criteria.setProjection(null);
					criteria.setFirstResult(0).setMaxResults(1);
					totalCount = ((Integer) criteria.setProjection(Projections.rowCount()).uniqueResult()).intValue();
					criteria.setProjection(null);
					criteria.setProjection(null);
					criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY); 
					//恢復order , 不過不建議重用detachedCriteria ,目前Criteria有很多問題!後面的代碼可以注釋掉
					/* List innerOrderEntries = null;
					try {
						innerOrderEntries = (List)field.get(criteria);
					} catch (Exception e) {
						e.printStackTrace();
					}
					for(int i=0;i<orderEntrys.size();i++){
						innerOrderEntries.add(orderEntrys.get(i));
					} */
				}
				Map reyurnMap = new HashMap<String,Object>();
				reyurnMap.put("count", totalCount);
				reyurnMap.put("page", items);
				return reyurnMap;
			}
		}, true);
	} 
	
	public List<T> findPageByCriteriaOrderBy(final DetachedCriteria detachedCriteria,final int pageSize,final int pageIndex)throws Exception {
		return (List<T>) getHibernateTemplate().execute(new HibernateCallback() {
			public Object doInHibernate(Session session)throws HibernateException {
				Criteria criteria = detachedCriteria.getExecutableCriteria(session);
				List items = criteria.setFirstResult(pageIndex * pageSize).setMaxResults(pageSize).list();
				return items;
			}
		}, true);
	} 

	public List<T> findByCriteria(DetachedCriteria detachedCriteria)
			throws Exception {
		return this.getHibernateTemplate().findByCriteria(detachedCriteria);
	}
	
	public Map<String,Object> findPageByQuery(final String queryStr,final int pageSize,final int pageIndex)throws Exception {
		return (Map<String,Object>) getHibernateTemplate().execute(
			new HibernateCallback() {
				public Object doInHibernate(Session session)throws HibernateException {
					Query query = session.createQuery(queryStr);
					List items = query.setFirstResult(pageIndex * pageSize).setMaxResults(pageSize).list();
					long totalCount = items.size();
					if(totalCount == pageSize || totalCount==0){
						int fromIndex = queryStr.toLowerCase().indexOf("from");
						int orderIndex = queryStr.toLowerCase().indexOf("order");
						String countQueryStr = "";
						if(orderIndex!=-1){
							countQueryStr = "select count(*) " + queryStr.substring(fromIndex,orderIndex);
						}else{
							countQueryStr = "select count(*) " + queryStr.substring(fromIndex);
						}
						Query CountQuery = session.createQuery(countQueryStr);
						totalCount = (Long)CountQuery.uniqueResult();
						System.out.println("totalCount=" + totalCount);
					}else if(totalCount>0 && totalCount<pageSize){
						totalCount =  pageSize * pageIndex +  totalCount;
					}
					
					Map reyurnMap = new HashMap<String,Object>();
					reyurnMap.put("count", totalCount);
					reyurnMap.put("page", items);
					return reyurnMap;
				}
			}, true);
	}
	
	public PagerModel<T> findPageByCriteria(final int offset, final int pageSize,final DetachedCriteria detachedCriteria) throws Exception {
		  return (PagerModel<T>)getHibernateTemplate().execute(new HibernateCallback() {
		   public Object doInHibernate(Session session)throws HibernateException {
		    Criteria criteria = detachedCriteria.getExecutableCriteria(session);
		    List items = criteria.setFirstResult(offset).setMaxResults(pageSize).list();
		    
		    int totalCount = items.size();
		    if(totalCount>=pageSize) {
		     List orderEntrys=null;
		     Field field=null;
		     
		     CriteriaImpl impl = (CriteriaImpl) criteria;
		     try {
		      field = CriteriaImpl.class.getDeclaredField("orderEntries");
		      field.setAccessible(true);//这是关键:)
		      orderEntrys = (List)field.get(impl);
		      field.set(criteria,new ArrayList()); 
		     } catch (Exception e) {
		      e.printStackTrace();
		     } 
		     
		     criteria.setProjection(null);
		     criteria.setFirstResult(0).setMaxResults(1);
		     totalCount = ((Integer) criteria.setProjection(Projections.rowCount()).uniqueResult()).intValue();
		     criteria.setProjection(null);
		     criteria.setProjection(null);
		     criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY); 
		    } else {
		     List orderEntrys=null;
		     Field field=null;
		        
		     CriteriaImpl impl = (CriteriaImpl) criteria;
		     try {
		      field = CriteriaImpl.class.getDeclaredField("orderEntries");
		      field.setAccessible(true);//���ǹؼ�
		         orderEntrys = (List)field.get(impl);
		         field.set(criteria,new ArrayList()); 
		        } catch (Exception e) {
		         e.printStackTrace();
		        }
		     criteria.setProjection(null);
		     criteria.setFirstResult(0).setMaxResults(1);
		     totalCount = ((Integer) criteria.setProjection(Projections.rowCount()).uniqueResult()).intValue();
		    }
		    
		    PagerModel<T> pm = new PagerModel<T>();
		    pm.setTotal(totalCount);
		    pm.setDatas(items);
		    pm.setPageSize(pageSize);
		    return pm;
		    }
		  },true);
		 }
}

 

具体实例:

删除:

public void deleteTypeEQ2(Long id ,String type){
		String hql = "delete from CompareHotel h where h.type = ? and h.hotelid = ?" ;
		Query query = getBaseDao().getQuery(hql);
		query.setLong(1, id);
		query.setString(0, type);
		query.executeUpdate();
		log.info("deleteTypeEQ2  delete ok.");
	}
public List<CompareHotel> findByIdAndType(String countryCode,String type) throws SystemException{
		String hql = "from CompareHotel h where h.type = "+type+" and h.countrycode = '" + countryCode+"'";
		Query query = this.getBaseDao().getQuery(hql);
		return query.list();
	}

public void deleteAll(String countrycode) throws SystemException {		
		String hql = "delete from CompareHotel gh where gh.countrycode = ?";
		Query query = getBaseDao().getQuery(hql);
		query.setString(0, countrycode);
		query.executeUpdate();
	}
public List<Agentmarket> findById(long id)throws SystemException{
		DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Agentmarket.class);
		detachedCriteria.add(Expression.eq("agent.internalid", id));
		List<Agentmarket> agentmarket = this.getBaseDao().findByCriteria(detachedCriteria);
		return agentmarket;
	}
public List<CompareHotel> findByhotelIdAndType(Long id,String type) throws SystemException{
		DetachedCriteria detachedCriteria = DetachedCriteria.forClass(CompareHotel.class);		
		detachedCriteria.add(Expression.eq("hotelid",id));
		detachedCriteria.add(Expression.eq("type",type));
		List<CompareHotel> l = (List<CompareHotel>)this.getBaseDao().findByCriteria(detachedCriteria);
		return l;
	}

 

public int deleteAllByPackageId(List<Long> packageId) {
		String hql=" delete from PackageHotel ph where ph.packageId in (:packageId)  ";
		Query query = this.baseDao.getQuery(hql);
		query.setParameterList("packageId",  packageId);
		int num = query.executeUpdate();
		return num;
	}


public Query getQuery(final String queryStr)
	    throws DataAccessException {
		Query query = (Query) getHibernateTemplate().execute(
		        new HibernateCallback() {
		            public Object doInHibernate(Session session) {
		                return session.createQuery(queryStr);
		            }
		        });
		return query;
	}
public List<Hotelbookheader> findBysfno(String sfno) throws SystemException {
  String hql = " FROM Hotelbookheader hbh where hbh.sfno =:sfno";
  Query query = this.getBaseDao().getQuery(hql);
  query.setParameter("sfno", sfno);
  List<Hotelbookheader> list = query.list();
  if (list.size() > 0) {
   return list;
  } else {
   return null;
  }
 }

 

 

。。。

分享到:
评论

相关推荐

    hibernate>>BaseDAO

    在Java开发领域,Hibernate是一个非常重要的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以更专注于业务逻辑而不是底层的数据访问。`BaseDAO`是许多项目中常见的一种设计模式,它代表了数据访问对象...

    springboot+mybatis 多数据源 basedao +分页

    - 由于多数据源的存在,BaseDAO需要扩展以适应不同的数据源,可能需要在方法内部或者构造函数中传递当前的数据源别名。 3. **分页功能**: - 分页是大数据量查询时必不可少的功能,MyBatis提供了PageHelper插件来...

    基于hibernate的baseDao

    通过ORM,开发者可以使用Java对象来操作数据库,而无需编写SQL语句,从而降低了开发难度和维护成本。 2. **BaseDAO设计原理** BaseDAO通常包含一组通用的数据库操作方法,如增删改查(CRUD:Create、Read、Update...

    hibernate BASEDAO

    在Java的持久化框架Hibernate中,BaseDAO(Base Data Access Object)是一种常见的设计模式,用于封装数据库操作,提供一套标准的方法来实现CRUD(Create、Read、Update、Delete)操作。这种模式使得业务层可以更加...

    Spring整合hibernate(4)之BaseDao的编写示例

    说明:因为我们在实际编码中会编写一些重复的数据库操作方法CRUD,每个类都写一次感觉很繁琐,因此可以考虑考虑把所有公共的方法都写在BaseDao中,这个时候,让所有的DAO都继承BaseDao;这样基本上就实现了大量的...

    hibernate basedao

    涵盖通过hibernate进行数据库操作的通用方法

    Struts+Spring+Hibernate开发实例 (SSH整合)

    Hibernate作为ORM框架,主要负责数据库的持久化操作。在SSH整合中,我们只需关注对象与数据库表之间的映射配置,确保对象关系的正确映射。Spring的自动管理使得我们可以专注于业务逻辑,而无需直接操作Hibernate API...

    Struts+Spring+Hibernate开发实例.pdf

    标题和描述中指出的文档《Struts+Spring+Hibernate开发实例.pdf》包含了关于这三个流行的Java开源框架结合使用的示例代码和相关知识点。Struts负责视图与控制器部分,Spring负责业务逻辑层及依赖注入,Hibernate负责...

    NC65通过BaseDAO操作数据库

    NC65通过BaseDAO操作数据库,包含接口类及接口实现类: /** * 获取baseDAO * @return */ public BaseDAO getBaseDAO() { if(baseDAO == null){ baseDAO = new BaseDAO(); } return baseDAO; } public ...

    basedao_basedao数据库_

    "基于BaseDao的手动数据库操作"是一个常见的话题,尤其在Java开发中。BaseDao是一种设计模式,它通常被用来作为数据库访问对象(DAO)的基础,用于封装数据库的基本CRUD(创建、读取、更新、删除)操作。这种模式...

    spring和hibernate集成后,通用的basedao

    它提供了强大的查询语言HQL(Hibernate Query Language)以及Criteria API,使得开发者可以以面向对象的方式来操作数据库。 当Spring和Hibernate集成时,Spring可以管理Hibernate的SessionFactory和Session对象,...

    hibernate basedao(泛型版本)

    在Java的持久层框架Hibernate中,BaseDAO(基础数据访问对象)是常用的设计模式,用于封装对数据库的基本操作。在给定的“hibernate basedao(泛型版本)”中,开发人员通过引入泛型进一步提高了代码的复用性和灵活...

    spring hibernate整合的底层数据操作方法

    在IT行业中,Spring和Hibernate是两个非常重要的框架,Spring是一个全面的后端开发框架,而Hibernate则是一个对象关系映射(ORM)工具,主要用于数据库操作。当我们将它们整合在一起时,可以实现强大的数据访问能力...

    nc65前后台数据库操作的用法

    综上所述,nc65系统提供了丰富的数据库操作方法,无论是后台还是前台,都可以根据具体需求选择合适的方式进行数据的查询、新增、更新或删除等操作。同时,nc65也考虑到了安全性问题,提供了防止SQL注入的功能,确保...

    JDBC连接数据库BaseDao通用类(可以调用存储过程)

    这使得开发者能够以一种标准化的方式访问数据库,而无需关心底层数据库的具体实现细节。 #### BaseDao通用类 在本例中,`BaseDaoOutput`类主要负责以下功能: 1. **数据库连接**:`BaseDaoOutput`类通过`open...

    spring4+hibernate4 封装BaseDao增删改查以及分页,,支持jdk1.7,不支持jdk1.8

    本项目结合了Spring 4和Hibernate 4,旨在提供一个基础的数据访问层(DAO)实现,包括基本的CRUD操作(创建、读取、更新、删除)以及分页功能。以下是关于这个项目的详细知识点: 1. **Spring 4**:Spring框架是...

    主流数据库jar包及BaseDao

    在Java项目中,我们通常会将这个jar包添加到项目的类路径中,以便执行SQL查询和操作数据库。 2. SQL Server:由微软公司开发,是一个功能强大的企业级数据库系统。对于Java开发者,需要Microsoft的JDBC驱动(如sql...

    Struts+spring+hibernate开发实例

    Hibernate 是一个对象关系映射(ORM)框架,它允许开发者用Java对象的方式来操作数据库。在Spring的封装下,开发者只需要关注对象的映射配置和业务逻辑,而无需过多关注底层的SQL操作。在本例中,正确地设置实体类和...

Global site tag (gtag.js) - Google Analytics