Hibernate泛型Dao(依赖spring)

本文展示了如何在Spring框架中配置和使用泛型Hibernate Dao,包括配置bean、BaseDao类的设计以及相关方法,旨在实现高效、灵活的数据访问操作。
摘要由CSDN通过智能技术生成
HinernateEntityDao和HibernateGenericDao都继承在spring的HibernateDaoSupport
一个提供和实体相关的操作,一个提供和实体类无关的操作。
然后以组合的方式在BaseDao中使用,这样程序中全部使用IBaseDao接口来操作数据,便于修改和维护.
xml配置实用如下:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5.     <!-这个是和实体相关的dao,所以scope是prototype的每个实体对应一个对象->
  6.     <bean id="hedao"
  7.         class="com.hibernate.dao.extend.HibernateEntityDao" scope="prototype" lazy-init="true">
  8.         <property name="sessionFactory">
  9.             <ref bean="sessionFactory" />
  10.         </property>
  11.     </bean>
  12.     
  13.     <!-这个和具体实体无关,所有dao共享->
  14.     <bean id="hgdao"
  15.           class="com.hibernate.dao.generic.HibernateGenericDao">
  16.         <property name="sessionFactory">
  17.             <ref bean="sessionFactory" />
  18.         </property>
  19.     </bean>
  20.     <!--使用泛型DAO作为抽象基类-->
  21.     <bean id="baseDao" class="com.hibernate.dao.base.BaseDao"
  22.         abstract="true" depends-on="hedao,hgdao">
  23.         <property name="hedao">
  24.             <ref bean="hedao" />
  25.         </property>
  26.         <property name="hgdao">
  27.             <ref bean="hgdao" />
  28.         </property>
  29.     </bean>
  30.     
  31.     <!-- 配置实体Demodata的DAO -->
  32.     <bean id="demoDao" parent="baseDao">
  33.         <constructor-arg>
  34.             <value>com.hibernate.entityclass.Demodata</value>
  35.         </constructor-arg>
  36.     </bean>
  37.     
  38. </beans>
代码:
BaseDao.java
  1. package com.hibernate.dao.base;
  2. import java.io.Serializable;
  3. import java.util.List;
  4. import org.hibernate.Criteria;
  5. import org.hibernate.Query;
  6. import org.hibernate.criterion.Criterion;
  7. import org.springframework.orm.hibernate3.HibernateTemplate;
  8. import com.hibernate.dao.extend.HibernateEntityDao;
  9. import com.hibernate.dao.generic.HibernateGenericDao;
  10. import com.hibernate.dao.support.Page;
  11. /**
  12.  * 提供hibernate dao的所有操作,<br>
  13.  * 实现类由spring注入HibernateEntityDao和HibernateGenericDao来实现
  14.  * 
  15.  */
  16. public class BaseDao<T,PK extends Serializable> implements IBaseDao<T,PK> {
  17.     protected Class<T> entityClass;// DAO所管理的Entity类型.
  18.     private HibernateEntityDao<T,PK> hedao;
  19.     private HibernateGenericDao hgdao;
  20.     
  21.     public void setHedao(HibernateEntityDao<T, PK> hedao) {
  22.         hedao.setEntityClass(entityClass);
  23.         this.hedao = hedao;
  24.     }
  25.     public void setHgdao(HibernateGenericDao hgdao) {
  26.         this.hgdao = hgdao;
  27.     }
  28.     
  29.     /**
  30.      *让spring提供构造函数注入
  31.      */
  32.     public BaseDao(Class<T> type) {
  33.         this.entityClass = type;
  34.     }
  35.     
  36.     public BaseDao(){}
  37.     
  38.     /**
  39.      * 清除所有对象缓存
  40.      */
  41.     public void clear() {
  42.         
  43.         hgdao.clear();
  44.     }
  45.     /**
  46.      * 创建Criteria对象.
  47.      * @param criterions 可变的Restrictions条件列表
  48.      */
  49.     public Criteria createCriteria(Criterion... criterions) {
  50.         
  51.         return hedao.createCriteria(criterions);
  52.     }
  53.     /**
  54.      * 创建Criteria对象,带排序字段与升降序字段.
  55.      */
  56.     public Criteria createCriteria(String orderBy, boolean isAsc,
  57.             Criterion... criterions) {
  58.         
  59.         return hedao.createCriteria(orderBy, isAsc, criterions);
  60.     }
  61.     /**
  62.      * 创建Query对象. 对于需要first,max,fetchsize,cache,cacheRegion等诸多设置的函数,可以在返回Query后自行设置.
  63.      * 留意可以连续设置,如下:
  64.      * <pre>
  65.      * dao.getQuery(hql).setMaxResult(100).setCacheable(true).list();
  66.      * </pre>
  67.      * 调用方式如下:
  68.      * <pre>
  69.      *        dao.createQuery(hql)
  70.      *        dao.createQuery(hql,arg0);
  71.      *        dao.createQuery(hql,arg0,arg1);
  72.      *        dao.createQuery(hql,new Object[arg0,arg1,arg2])
  73.      * </pre>
  74.      *
  75.      * @param values 可变参数.
  76.      */
  77.     public Query createQuery(String hql, Object... values) {
  78.         
  79.         return hgdao.createQuery(hql, values);
  80.     }
  81.     /**
  82.      * @param hql 查询sql
  83.      * @param start 分页从哪一条数据开始
  84.      * @param pageSize 每一个页面的大小
  85.      * @param values 查询条件
  86.      * @return page对象
  87.      */
  88.     public Page dataQuery(String hql, int start, int pageSize, Object... values) {
  89.         
  90.         return hgdao.dataQuery(hql, start, pageSize, values);
  91.     }
  92.     /**
  93.      * 消除与 Hibernate Session 的关联
  94.      * @param entity
  95.      */
  96.     public void evit(T entity) {
  97.         
  98.         hedao.evict(entity);
  99.     }
  100.     /**
  101.      * 执行本地sql语句获得标量数值列表
  102.      */
  103.     @SuppressWarnings("unchecked")
  104.     public List executeNativeSql(String sql) {
  105.         
  106.         return hgdao.executeNativeSql(sql);
  107.     }
  108.     /**
  109.      * 根据hql查询,直接使用HibernateTemplate的find函数.
  110.      * @param values 可变参数
  111.      */
  112.     @SuppressWarnings("unchecked")
  113.     public List find(String hql, Object... values) {
  114.         
  115.         return hgdao.find(hql, values);
  116.     }
  117.     /**
  118.      * 根据属性名和属性值查询对象.
  119.      * @return 符合条件的对象列表
  120.      */
  121.     public List<T> findBy(String propertyName, Object value) {
  122.         
  123.         return
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值