`
yaoweinan
  • 浏览: 133263 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

一个基于hibernate的超类(仿springside) 已被以后借鉴

 
阅读更多

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;
 }
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics