package com.dao;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Property;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
/**
* 实现增删改查的超类
* @author Administrator
*
* @param <T>
* @param <I>
*/
@Transactional
public class DaoSupport<T,I extends Serializable> {
@Autowired protected SessionFactory factory;
private Class<T> entityClass;
@SuppressWarnings("unchecked")
public DaoSupport() {
Type genType = getClass().getGenericSuperclass();
if(genType instanceof ParameterizedType){
ParameterizedType pra=(ParameterizedType)genType;
Type[] t=pra.getActualTypeArguments();
if(t.length>0){
entityClass=(Class<T>) t[0];
}else{
entityClass=(Class<T>) Object.class;
}
}else{
entityClass=(Class<T>) Object.class;
}
}
/**
* 保存数据
* @param entity
*/
public void save(final T entity) {
factory.getCurrentSession().save(entity);
}
/**
* 更新数据
* @param entity
*/
public void update(final T entity){
factory.getCurrentSession().update(entity);
}
/**
* 删除数据
* @param entity
*/
public void delete(final T entity){
factory.getCurrentSession().delete(entity);
}
/**
* 按照一定顺序获得所有记录
* @param orderByProperty
* @param isAsc
* @return
*/
@SuppressWarnings("unchecked")
public List<T> listAll(String orderByProperty, boolean isAsc){
Criteria c = factory.getCurrentSession().createCriteria(entityClass);
if(isAsc){
return c.addOrder(Order.asc(orderByProperty)).list();
}else{
return c.addOrder(Order.desc(orderByProperty)).list();
}
}
/**
* 查找t对象中属性值(非零)相同的数据记录
* @param t
* @return
*/
@SuppressWarnings("unchecked")
public List<T> queryByAttribute(final T t){
Example exam=Example.create(t).excludeZeroes();
return factory.getCurrentSession().createCriteria(entityClass).add(exam).list();
}
/**
* 条件查询语句
* @param criterions
* @return
*/
@SuppressWarnings("unchecked")
public <X> List<X> query(final List<Criterion> criterions){
Criteria cri=factory.getCurrentSession().createCriteria(entityClass);
for(Criterion criterion:criterions){
cri.add(criterion);
}
return cri.list();
}
/**
* 根据唯一编号查找记录
* @param id
* @return
*/
@SuppressWarnings("unchecked")
public T get(final I id){
return (T) factory.getCurrentSession().get(entityClass, id);
}
public final SessionFactory getFactory() {
return factory;
}
public final void setFactory(final SessionFactory factory) {
this.factory = factory;
}
}
分享到:
相关推荐
总的来说,SpringSide的Hibernate封装是面向实际开发需求的一套解决方案,它不仅简化了DAO层的编写,也提升了代码质量,降低了维护成本,是Spring和Hibernate集成项目中的一个优秀实践。对于开发者来说,理解并熟练...
标题 "struts2+spring3+hibernate3+jquery+springside 做一个OA2" 提供了一个综合的Web开发框架组合,用于构建一个办公自动化(OA)系统。这个系统基于以下技术栈: 1. **Struts2**: Struts2是一个Java Web MVC...
在Java开发中,SpringSide是一个优秀的开源项目,它为Spring框架提供了一种结构化、模块化的使用方式,极大地提高了开发效率。其中,SpringSide 3对Hibernate的使用进行了深入的封装和优化,帮助开发者更好地理解和...
SpringSide是基于Spring框架的一个轻量级、模块化、规范化的开发工具集,旨在提供一种快速、高效且易于维护的Java Web开发模式。在这个实例中,我们将深入探讨如何利用SpringSide进行实际项目开发,特别是其在构建...
1. **自动配置**:借鉴了Spring Boot的自动配置思想,SpringSide-core-4.1.0允许开发者通过简单的配置就能启动一个完整的应用环境。 2. **安全框架集成**:集成了Spring Security,提供了用户认证、授权等功能,...
SpringSide 3.0 是一个基于Spring框架的开源项目,旨在为Java开发者提供一套高效、简洁的开发规范和工具集。它不仅包含了Spring的核心模块,还整合了其他优秀的开源组件,如Hibernate、Quartz等,以简化企业级应用的...
SpringSide是一个开源的Java开发平台,它集成了Spring框架和大量实用的组件,以方便开发人员构建复杂的业务应用。 首先,文档概述了Spring MVC,即Spring的模型-视图-控制器(MVC)框架,它支持Web应用的开发。...
SpringSide 是一个基于 Spring Framework 的 Java 开发工具集,旨在简化 Spring 应用程序的开发过程,提供一套快速、现代且规范的开发实践。SpringSide 3.2.2 版本是一个成熟的版本,它在之前的版本基础上进行了优化...
springside是一款基于Spring框架的轻量级开发工具集,它为Java开发提供了简洁、高效的解决方案,尤其适合中大型项目的开发。尽管springside集合了多种复杂的技术,但这并不意味着初学者无法涉足。本资料将由浅入深,...
SpringSide是一个开源的Java企业级开发工具集,它基于Spring Framework,为开发人员提供了一套完整的开发规范和最佳实践。SpringSide 4.2.3-GA作为其稳定版本,集成了许多最新的技术和最佳实践,如Spring 4.x,...
springside是一个开源的Java开发工具集,它为Spring框架提供了额外的支持和便利,使得开发者在基于Spring构建项目时能够更加高效和规范。这个"springside4-4.1.0.GA"的jar包是Springside项目的4.1.0版本的发布,GA...
它巧妙地融合了Spring、Hibernate、Struts2这三大经典技术,构建了一个强大的权限管理框架,旨在为复杂的企业级应用程序提供简洁、高效的开发环境。 一、Spring的核心魅力 Spring,作为Java领域中广泛使用的轻量级...
Springside项目是基于Spring框架的一个应用架构示例,它提供了一套完整的开发模式来构建企业级Java Web应用程序。Springside 3.3.4版本作为一个成熟的发布版,不仅集成了Spring框架的核心功能,还提供了对其他开源...
SpringSide是一个以Spring Framework为核心的,Pragmatic风格的JavaEE应用参考示例,它总结了JavaEE世界中的主流技术选型和最佳实践,旨在为开发者提供一个高效、便捷的JavaEE应用开发解决方案。
Maven 是一个项目管理和综合工具,它可以帮助开发者构建、管理和部署Java项目,而Springside则是一个基于Spring框架的快速开发工具集,简化了Spring的使用。 【Maven】: 1. **Maven简介**:Maven是一个基于项目...
SpringSide是一个基于Java的开源项目,旨在为Spring框架提供一个简洁、现代的开发实践样本。它集合了最佳实践,包括Maven构建系统、JUnit测试框架、AspectJ切面编程、Hibernate ORM工具等,以帮助开发者快速上手...
Springside4 是一个基于 JavaEE 平台的开源项目,它围绕 Spring Framework 构建,旨在提供实用的示例和最佳实践。Springside4 不是一个完整的框架,而是一个架构示例,帮助开发者理解和应用一系列主流的 JavaEE 技术...