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做了三层封装: 第一层:HibernateGenericDao,基于spring的HibernateDaoSupport,但加入了分页函数与各种Finder函数,并使用泛型避免了返回值强制类型转换。 第二层:HibernateEntityDao,...
springside 的一个应用实例,java web的开发末班
springside-3.2.2源码springside-3.2.2源码
springside3 hibernate关联关系api 博文链接:https://calm-forjava.iteye.com/blog/981576
springside
springside是融合spring,hibernate,struts2,的一个做权限框架
SpringSide4.0 Reference Manual 自己整理的官方文档,PDF格式,方便查阅,所有连接都已整理。
pom.xml配置 ...mvn install:install-file -DgroupId=org.springside -DartifactId=springside-core -Dversion=4.2.2.GA -Dfile=./springside-core-4.2.2.GA.jar -Dpackaging=jar -DgeneratePom=true
springside4
springside3.0.zip
NULL 博文链接:https://shrek11.iteye.com/blog/1488659
SpringSide文档.chm。
springside开发全面讲解 springside集成了多项技术,不适合入门者学习,因此本资料也尽量从最简单最基础的讲起。
SpringSide Demo with Spring Security、Hibernate Paging、Hibernate Ehcache、permission、SSH Zero Config...
分享 江南白衣的 springside4 非常强大的Javaee 框架。 官网:http://www.springside.org.cn/ 代码:https://github.com/springside/springside4
springside3.3.4 使用方法 ssh整合 最流行的web框架 使用说明
springside-core-4.3.0.jar 最新版springside-core的jar包
springside示例quickstart的eclipse工程
Springside4 学习整理 Shiro 服务端验证
SpringSide4框架简单使用 sprindside4只写一个简单的DAO接口,日后再根据需要添加方法定义。不需要Dao implements