`

hibernate通用方法

 
阅读更多




	/**
	 * 根据sql生产制定的entityClass类型对象
	 * @param sql
	 * @param entityClass
	 * @param scalarList
	 * @param conditions
	 * @return
	 */
	public List<?> findObjectBySql(final String sql,final Class<?> entityClass,final List<HibernateQueryContion> scalarList,final HibernateQueryContion... conditions){
		List<?> result = (List<?>)getHibernateTemplate().execute(new HibernateCallback() {
			public Object doInHibernate(Session session) throws HibernateException, SQLException {
				SQLQuery query = session.createSQLQuery(sql);
			
				for(HibernateQueryContion condition:conditions){
					Object value = condition.getValue();
					String propertyName = condition.getPropertyName();
					if(value instanceof Collection){
						query.setParameterList(propertyName, (Collection)value);
					}else{
						query.setParameter(propertyName, value);
					}
				}
				if(scalarList != null && scalarList.size() > 0){
					for(HibernateQueryContion scalar:scalarList){
						query.addScalar(scalar.getPropertyName(), scalar.getHiberateType());
					}
					query.setResultTransformer(Transformers.aliasToBean(entityClass));
				}
				return query.list();
			}
		});
		return result;
	}
	
	/**
	 * 根据提供的HQL进行条件查询
	 * @param list
	 * @param hql
	 * @return
	 */
	public List<?> findByConditions(final List<HibernateQueryContion> list,final String hql){
		List<?> result = (List<?>) getHibernateTemplate().execute(new HibernateCallback() {
			public Object doInHibernate(Session session) throws HibernateException, SQLException {
				Query select = session.createQuery(hql);
				 Iterator<HibernateQueryContion> iterator = list.iterator();
				 while(iterator.hasNext()){
					 HibernateQueryContion condition = iterator.next();
					 Object value = condition.getValue();
					 if(value instanceof Collection){
						 select.setParameterList(condition.getPropertyName(), (Collection)value);
					 }else{
						 select.setParameter(condition.getPropertyName(), condition.getValue());
					 }
				 }
				return select.list();
			}
		});
		return result;
	}
	/**
	 * 根据提供的HQL进行分页条件查询
	 * @param list
	 * @param hql
	 * @param pageSize
	 * @param firstResult
	 * @return
	 */
	public List<?> findByConditions(final List<HibernateQueryContion> list,final String hql,final Integer pageSize,final Integer firstResult){
		List<?> result = (List<?>) getHibernateTemplate().execute(new HibernateCallback() {
			public Object doInHibernate(Session session) throws HibernateException, SQLException {
				Query select = session.createQuery(hql);
				Iterator<HibernateQueryContion> iterator = list.iterator();
				while (iterator.hasNext()) {
					HibernateQueryContion condition = iterator.next();
					Object value = condition.getValue();
					if (value instanceof Collection) {
						select.setParameterList(condition.getPropertyName(), (Collection) value);
					} else {
						select.setParameter(condition.getPropertyName(), condition.getValue());
					}
				}
				select.setMaxResults(pageSize);
				select.setFirstResult(firstResult);
				return select.list();
			}
		});
		return result;
	}	
	/**
	 * 统计某个实例的总数
	 * @param entityClass
	 * @param countParamsName
	 * @return
	 */
	public int getCountNum(Class<?> entityClass,String countParamsName){
		Criterion[] caseArray = new Criterion[0] ;
		Criteria c = createCriteria(entityClass, caseArray);
		c.setProjection(Projections.count(countParamsName));
		Integer result = (Integer)c.uniqueResult();				
		return result;
	}
	/**
	 * 根据提供的条件统计总数,不能进行模糊统计
	 * @param entityClass
	 * @param countParamsName
	 * @param conditions
	 * 调用方式如下:
	 * <pre>
	 *        dao.getCountNum(entityClass,countParamsName)
	 *        dao.getCountNum(entityClass,countParamsName,arg0);
	 *        dao.getCountNum(entityClass,countParamsName,arg0,arg1);
	 *        dao.getCountNum(entityClass,countParamsName,new Object[arg0,arg1,arg2])
	 * </pre>
	 * @return
	 */
	public int getCountNum(Class<?> entityClass,String countParamsName,HibernateQueryContion... conditions){
		Criteria c = createCriteria(entityClass,conditions);
		c.setProjection(Projections.count(countParamsName));
		Integer result = (Integer)c.uniqueResult();				
		return result;
	}


	/**
	 * 查询entityClass类型对象的所有记录
	 * @param entityClass
	 * @return
	 */
	public List<?> findObjects(Class<?> entityClass){
		Criteria criteria = createCriteria(entityClass);
		return criteria.list();
	}
	/**
	 * 根据条件查询对应的类属性集合
	 * @param entityClass
	 * @param propertyNames
	 * @param conditions
	 * @return
	 * 返回结果如下:
	 * List<Object[]> objArrayList;object数组中第一个记录对应
	 * propertyNames的第一个属性的值,
	 * 例如:
	 * String[] propertyNames = new String[4]{"id","name","age","address"};
	 * .....
	 * 返回结果中Object[]对应的:
	 * for(Object[] objs:objArrayList){
	 * ...
	 * idValue = objs[0];
	 * nameValue = objs[1];
	 * ...
	 * addressValue = objs[3];
	 */
	public List<?> findObjectsByCondition(Class<?> entityClass,String[] propertyNames,HibernateQueryContion... conditions){
		Criteria criteria = createCriteria(entityClass,conditions);
		ProjectionList proList = Projections.projectionList();
		for (String propertyName : propertyNames) {
			proList.add(Projections.property(propertyName));
		}
		criteria.setProjection(proList);
		return criteria.list();
	}
	/**
	 * 根据条件查询对应的类属性集合
	 * @param  entityClass
	 * @param propertyNames
	 * @param conditions
	 * @return
	 * 返回结果如下:
	 * List<T> objArrayList;
	 */
	public List<?> findObjectsByCondition(Class<?> entityClass,String propertyName,HibernateQueryContion... conditions){
		Criteria criteria = createCriteria(entityClass, conditions);
		criteria.setProjection(Projections.property(propertyName));
		return criteria.list();
	}
	/**
	 * 根据entityClass类型创建Criteria实例
	 * @param entityClass
	 * @return
	 */
	public Criteria createCriteria(Class<?> entityClass){
		SessionFactory sessionFactory = getHibernateTemplate().getSessionFactory();
		Session session = sessionFactory.getCurrentSession();
		Criteria criteria = session.createCriteria(entityClass);
		return criteria;
	}
	/**
	 * 根据查询条件创建Criterion实例集合
	 * @param conditions
	 * @return
	 */
	public Criteria createCriteria(Class<?> entityClass,HibernateQueryContion... conditions) {
		SessionFactory sessionFactory = getHibernateTemplate().getSessionFactory();
		Session session = sessionFactory.getCurrentSession();
		Criteria criteria = session.createCriteria(entityClass);
		for (HibernateQueryContion condition : conditions) {
			switch (HibernateQueryContion.queryType.valueOf(condition.getType())) {
			case in:
				criteria.add(Restrictions.in(condition.getPropertyName(), (Collection) condition.getValue()));
				break;
			case eq:
				criteria.add(Restrictions.eq(condition.getPropertyName(), condition.getValue()));
				break;
			case like:
				criteria.add(Restrictions.like(condition.getPropertyName(), condition.getValue()));
				break;
			case asc:
				criteria.addOrder(Order.asc(condition.getPropertyName()));
				break;
			case ne:
				criteria.add(Restrictions.ne(condition.getPropertyName(), condition.getValue()));
				break;
			case isNull:
				criteria.add(Restrictions.isNull(condition.getPropertyName()));
			default:
				break;
			}
		}
		return criteria;
	}

package com.hikvision.cms.scaffolding.dao;

import java.util.List;

import org.hibernate.type.NullableType;


public class HibernateQueryContion{
	public static final String EQ = "eq";
	public static final String LIKE = "like";
	public static final String IN = "in";
	public static final String ASC = "asc";
	public static final String NE = "ne";
	public static final String ISNULL = "isNull";
	
	private Object value;
	private String propertyName;
	private String type;
	private NullableType hiberateType;
	
	public HibernateQueryContion(String propertyName, Object value) {
		super();
		this.propertyName = propertyName;
		this.value = value;
		this.type =  HibernateQueryContion.EQ;
	}
	public HibernateQueryContion(String propertyName, Object value,String type) {
		super();
		this.propertyName = propertyName;
		this.value = value;
		this.setType(type);
	}
	
	public HibernateQueryContion(String propertyName, NullableType hiberateType) {
		super();
		this.propertyName = propertyName;
		this.hiberateType = hiberateType;
	}
	public Object getValue() {
		return value;
	}
	public void setValue(Object value) {
		this.value = value;
	}
	public void setPropertyName(String propertyName) {
		this.propertyName = propertyName;
	}
	public String getPropertyName() {
		return propertyName;
	}
	public void setType(String type) {
		this.type = type;
	}
	public String getType() {
		return type;
	}
	public void setHiberateType(NullableType hiberateType) {
		this.hiberateType = hiberateType;
	}
	public NullableType getHiberateType() {
		return hiberateType;
	}
	public static enum queryType{
		eq,like,in,asc,ne,isNull;
		public queryType getQueryTypeEnum(String type){
			return valueOf(type);
		}
	}
}




  • 大小: 494.3 KB
分享到:
评论

相关推荐

    hibernate 通用接口架构

    "hibernate 通用接口架构"是指利用Hibernate框架,通过设计DAO(Data Access Object)层的接口来实现业务逻辑与数据访问的解耦,从而提高代码的可复用性和可维护性。 首先,我们来理解DAO层的作用。DAO层作为业务...

    hibernate通用分页

    "hibernate通用分页"就是为了解决这一问题,提供一个方便、易用的分页解决方案。 分页的核心在于如何根据用户请求的数据范围(如页码和每页显示条数)来查询数据库,并返回相应的结果集。在Hibernate中,我们可以...

    hibernate通用查询

    Hibernate通用查询是Java开发中非常重要的一个概念,它极大地简化了数据库操作,使得开发者无需编写大量的SQL语句,即可实现复杂的数据查询。本知识点主要围绕Hibernate的通用查询功能展开,包括其基本原理、优势...

    struts+spring+hibernate通用分页方法

    struts+spring+hibernate通用分页方法.rar 博文链接:https://igogogo9.iteye.com/blog/97692

    通用的hibernate查询

    本篇文章将深入探讨通用的Hibernate查询方法,特别是关于分页查询的应用。 在Hibernate中,查询数据主要通过Criteria、HQL(Hibernate Query Language)和Query API三种方式。首先,让我们来看看Criteria查询。...

    Hibernate通用数据库操作方法

    Hibernate 是一个流行的对象关系映射(ORM)框架,它允许开发者使用 Java 对象来操作数据库,而无需直接编写 SQL ...通过封装这些通用方法,可以提高代码的可重用性和可维护性,减少重复的工作,同时避免潜在的错误。

    Hibernate 参数查询通用方法

    本篇将详细探讨"Hibernate参数查询通用方法"这一主题,以及如何通过Dao层实现高效、灵活的数据查询。 在Hibernate中,参数查询通常涉及到HQL(Hibernate Query Language)或者使用Criteria API。这两种方式都可以...

    hibernate数据库通用SQL代码

    本文将详细讲解如何使用Hibernate来编写通用的数据库操作代码,包括插入(insert)、删除(delete)、更新(update)以及查询(select)方法。 1. 插入数据(insert) 插入数据的方法是通过调用`session.save()`...

    hibernate通用查询语句生成类

    这是一个java代码包,里面提供了一个核心类,专门负责生成 hibernate查询语句(常用的,并非所有,现在能力有限),其他都是一些辅助类,自我感觉还可以。主要是为了减轻以后的项目开发负担,可以省去拼接hql查询语句的...

    hibernate4 通用dao,service

    标题中的“hibernate4 通用dao,service”指的是在Java开发中使用Hibernate框架实现的通用数据访问对象(DAO)和业务服务层(Service)。Hibernate是一个流行的对象关系映射(ORM)工具,它允许开发者使用面向对象的...

    本人写的Hibernate超级通用DAO

    《深入浅出Hibernate通用DAO设计与实践》 在软件开发中,数据访问对象(DAO)是用于处理数据库操作的重要组件,它可以将业务逻辑与数据访问层进行解耦,提高代码的可复用性和可维护性。本文将围绕“Hibernate超级...

    Hibernate通用Dao设计。

    综上所述,Hibernate通用DAO设计的核心在于抽象出共性的数据库操作,并通过泛型和继承等面向对象设计原则,达到代码复用的目的。这样不仅可以降低开发难度,还能提升系统的可维护性,对于大型项目尤其重要。通过学习...

    hibernate 通用分页的实现

    hibernate_mysql_struts2 实现的通用分页类.欢迎指正

    hibernate通用jar包20个

    标题中的“hibernate通用jar包20个”指的是用于构建和运行Hibernate应用程序的一组核心库文件。Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发人员使用面向对象的方式来操作数据库,减少了手动编写...

    Hibernate通用Dao

    通用dao,简单全面,所有dao都可以继承这个dao.

    Hibernate 原生通用DAO

    3. **CRUD操作**:提供如`save()`、`update()`、`delete()`、`findById()`、`findAll()`等通用方法,对所有实体类生效。这些方法内部会使用Session的相应方法来执行SQL操作。 4. **HQL与Criteria查询**:支持HQL...

Global site tag (gtag.js) - Google Analytics