DAO

package base; import java.io.Serializable; import java.lang.reflect.ParameterizedType; import java.util.ArrayList; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.criterion.Criterion; import voo.PageBean; //DAO:主要是crud,只需要T,和id即可。必须实现serializable接口。 //下面是泛型使用的范例。 public abstract class GenericHibernateDao implements GenericDao { // 持久化类如private Stu persistentClass; private Class persistentClass; public GenericHibernateDao() { this.persistentClass = (Class ) ((ParameterizedType) getClass()//ParameterizedType:泛型 .getGenericSuperclass()).getActualTypeArguments()[0]; //Class getClass() 返回此 Object 的运行时类。 // Type getGenericSuperclass() 返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的直接超类的 Type。 // Type[] getActualTypeArguments() 返回表示此类型实际类型参数的 Type 对象的数组。 // 开始事务 db.HibernateSessionFactory.beginTransaction(); } public Class getPersistentClass() { return persistentClass; } // 批量更新 public void bulkUpdate(String hql, Object[] params) { Session session = db.HibernateSessionFactory.getSession(); Query q = session.createQuery(hql); for (int i = 0; i < params.length; i++) q.setParameter(i, params[i]); q.executeUpdate(); } // 增加 public T create(T entity) { Session session = db.HibernateSessionFactory.getSession(); session.save(entity); return entity; } // 删除 public void delete(ID id) { Session session = db.HibernateSessionFactory.getSession(); session.delete(findById(id)); } // 查找所有记录 public List findAll() { return findByCriteria(new ArrayList ()); } // 按HQL查询 @SuppressWarnings("unchecked") public List findByHQL(String hql, Object[] params) { Session session = db.HibernateSessionFactory.getSession(); Query q = session.createQuery(hql); for (int i = 0; i < params.length; i++) q.setParameter(i, params[i]); return q.list(); } // 按主键查询 @SuppressWarnings("unchecked") public T findById(ID id) { Session session = db.HibernateSessionFactory.getSession(); T entity = (T) session.load(persistentClass, id); return entity; } // 分页查询 @SuppressWarnings("unchecked") public PageBean findByPage(String hql, int pagecode, int pagesize, Object[] params) { Session session = db.HibernateSessionFactory.getSession(); PageBean pb = new PageBean(); // 数据 Query q = session.createQuery(hql); for (int i = 0; i < params.length; i++) q.setParameter(i, params[i]); // Query setParameter(int position, Object val) //为查询参数设置数值,参数的位置是 position,参数的值是 val,参数的类型由 //Hibernate 根据 val 对象去判断。 q.setMaxResults(pagesize); q.setFirstResult((pagecode - 1) * pagesize); pb.setData(q.list()); // 总记录数 q = session.createQuery("select count(*) " + hql.substring(hql.toLowerCase().indexOf("from")));//高明 for (int i = 0; i < params.length; i++) q.setParameter(i, params[i]); pb.setAllcount((Integer) q.uniqueResult()); pb.setPagecode(pagecode); pb.setPagesize(pagesize); return pb; } // 修改 public T update(T entity) { Session session = db.HibernateSessionFactory.getSession(); session.update(entity); return entity; } // 内部使用条件查询方法 protected List findByCriteria(List criterion) { Criteria crit = db.HibernateSessionFactory.getSession().createCriteria( getPersistentClass()); for (Criterion c : criterion) {//另一种for循环形式 crit.add(c); } return crit.list(); } }

你可能感兴趣的:(DAO,object,session,String,query,Class)