原来的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> extends BaseHibernateEntityDao<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); }
这样就可以当只是简单的应用的时候就是用Base部分,而如果功能比较复杂则可以使用扩展部分的内容。
当然我理解还不是很深入,不知道有没有什么更好的设计。
具体代码见附件。