/**
* 根据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框架,通过设计DAO(Data Access Object)层的接口来实现业务逻辑与数据访问的解耦,从而提高代码的可复用性和可维护性。 首先,我们来理解DAO层的作用。DAO层作为业务...
"hibernate通用分页"就是为了解决这一问题,提供一个方便、易用的分页解决方案。 分页的核心在于如何根据用户请求的数据范围(如页码和每页显示条数)来查询数据库,并返回相应的结果集。在Hibernate中,我们可以...
Hibernate通用查询是Java开发中非常重要的一个概念,它极大地简化了数据库操作,使得开发者无需编写大量的SQL语句,即可实现复杂的数据查询。本知识点主要围绕Hibernate的通用查询功能展开,包括其基本原理、优势...
struts+spring+hibernate通用分页方法.rar 博文链接:https://igogogo9.iteye.com/blog/97692
本篇文章将深入探讨通用的Hibernate查询方法,特别是关于分页查询的应用。 在Hibernate中,查询数据主要通过Criteria、HQL(Hibernate Query Language)和Query API三种方式。首先,让我们来看看Criteria查询。...
Hibernate 是一个流行的对象关系映射(ORM)框架,它允许开发者使用 Java 对象来操作数据库,而无需直接编写 SQL ...通过封装这些通用方法,可以提高代码的可重用性和可维护性,减少重复的工作,同时避免潜在的错误。
本篇将详细探讨"Hibernate参数查询通用方法"这一主题,以及如何通过Dao层实现高效、灵活的数据查询。 在Hibernate中,参数查询通常涉及到HQL(Hibernate Query Language)或者使用Criteria API。这两种方式都可以...
本文将详细讲解如何使用Hibernate来编写通用的数据库操作代码,包括插入(insert)、删除(delete)、更新(update)以及查询(select)方法。 1. 插入数据(insert) 插入数据的方法是通过调用`session.save()`...
这是一个java代码包,里面提供了一个核心类,专门负责生成 hibernate查询语句(常用的,并非所有,现在能力有限),其他都是一些辅助类,自我感觉还可以。主要是为了减轻以后的项目开发负担,可以省去拼接hql查询语句的...
标题中的“hibernate4 通用dao,service”指的是在Java开发中使用Hibernate框架实现的通用数据访问对象(DAO)和业务服务层(Service)。Hibernate是一个流行的对象关系映射(ORM)工具,它允许开发者使用面向对象的...
《深入浅出Hibernate通用DAO设计与实践》 在软件开发中,数据访问对象(DAO)是用于处理数据库操作的重要组件,它可以将业务逻辑与数据访问层进行解耦,提高代码的可复用性和可维护性。本文将围绕“Hibernate超级...
综上所述,Hibernate通用DAO设计的核心在于抽象出共性的数据库操作,并通过泛型和继承等面向对象设计原则,达到代码复用的目的。这样不仅可以降低开发难度,还能提升系统的可维护性,对于大型项目尤其重要。通过学习...
hibernate_mysql_struts2 实现的通用分页类.欢迎指正
标题中的“hibernate通用jar包20个”指的是用于构建和运行Hibernate应用程序的一组核心库文件。Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发人员使用面向对象的方式来操作数据库,减少了手动编写...
通用dao,简单全面,所有dao都可以继承这个dao.
3. **CRUD操作**:提供如`save()`、`update()`、`delete()`、`findById()`、`findAll()`等通用方法,对所有实体类生效。这些方法内部会使用Session的相应方法来执行SQL操作。 4. **HQL与Criteria查询**:支持HQL...