Hibernate通用Dao设计。
hibernate的通用Dao简化了程序,增加了开发过程,但是通用Dao设计五花八门,我也是一个Hibernate初学者,把我参考一些设计好的Dao而设计的通用Dao写下来,希望各位不要见笑。
原来的Dao是一个整体,把很多内容放在一起,但是发现大部分的内容用不到,所以我把Dao分为三个部分,BaseHibernateEntityDao(基本部分)主要是,增删查改。ExtensionHibernateEntityDao(扩展)包括example等,HibernateEntityDaoUtil(工具部分),包括执行Sql等。
package com.guestbook.dao;import java.io.Serializable;import java.util.List;import com.guestbook.dao.support.Page;public interface BaseHibernateEntityDao<T> { public void setCacheable(boolean cacheable);public T get(Serializable id);public T load(Serializable id);public void save(Object o);public void update(Object o);public void remove(Serializable id);public List<T> findByHql(String hql, Object... values);public List<T> findBySql(String sql,Object... values);public T findUniqueByHql(String hql, Object... values);public T findUniqueBySql(String sql,Object... values); public Page<T> pagedSqlQuery(String sql,int pageNo,int pageSize,Object...values);public Page<T> pagedQuery(String hql,int pageNo,int pageSize,Object...values);}
package com.guestbook.dao;import java.util.List;import org.hibernate.Criteria;import org.hibernate.criterion.Criterion;import com.guestbook.dao.support.Page;public interface ExtensionHibernateEntityDao<T> extendsBaseHibernateEntityDao<T> {public T findByName(String name, Object value);public List<T> findByLike(String name, Object value);public T findUniqueByName(String name, Object value);public T findUniqueByExample(T t);public Page<T> pagedQuery(Criteria criteria, int pageNo, int pageSize);public Page<T> pagedQuery(int pageNo, int pageSize, Criterion... criterions);public Page<T> pagedQuery(int pageNo, int pageSize, String orderBy,boolean isAsc, Criterion... criterions);}
package com.guestbook.dao;import java.util.List;public interface HibernateEntityDaoUtil {public int executeSql(String sql, Object... values);public int executeHql(String sql, Object... values);@SuppressWarnings("unchecked")public List findBySql(String sql, boolean cacheable,Class entityClass,Object... values);@SuppressWarnings("unchecked")public Object findUniqueBySql(String sql,Class entityClass,Object... values);}