锁定老帖子 主题:我的万能dao 设计源码,请大家多多指教!
精华帖 (2) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (10)
|
|
---|---|
作者 | 正文 |
发表时间:2009-08-11
楼主,写的是基于Hibernate。如果要跳出Hibernate直接用Spring的JDBC可以实现DAO的对象化封装么?
|
|
返回顶楼 | |
发表时间:2009-08-11
xxxccc81 写道 楼主,写的是基于Hibernate。如果要跳出Hibernate直接用Spring的JDBC可以实现DAO的对象化封装么?
这个倒是没仔细想过 |
|
返回顶楼 | |
发表时间:2009-08-11
weich_1211 写道 linliangyi2007 写道 虽然想法有点“幼稚”(因为无数的人都像楼主这样设想过),但精神还是值得鼓励的。
这样做不适合复杂逻辑的应用,尤其是性能上不好处理。具体为啥,楼主可以在今后的使用中感悟吧,一言难尽!! 赞同,不知道楼主参加工作多久了,能有这样的想法。对于任何的项目或者工程,程序员应该注重的是业务,而不是DB,DB是根据业务来做的,你这种对于复杂的业务来讲,有点太过于牵强了。 刚出来工作不久,差两个月就以年了吧,很多东西还是要自己摸索的... |
|
返回顶楼 | |
发表时间:2010-03-15
个人认为你的万能DAO写的太繁琐了,每一个类操作都的去实现你那么多方法,不太灵活,其次最好使用泛型,最好借鉴点适配器模式的思想,你可以看看我的DAO类,不太完善,还需要修改。
|
|
返回顶楼 | |
发表时间:2010-03-15
很难做到“万能”
|
|
返回顶楼 | |
发表时间:2010-03-15
sky_dream 写道 个人认为你的万能DAO写的太繁琐了,每一个类操作都的去实现你那么多方法,不太灵活,其次最好使用泛型,最好借鉴点适配器模式的思想,你可以看看我的DAO类,不太完善,还需要修改。
谢谢你,你可以看下我重新整理的dao,现在我基本上不用写新的方法,泛型dao接口定义的方法基本能满足我的需求了,在开发效率上明显提高很多: package com.lym.db.dao; import java.io.Serializable; import java.util.Collection; import java.util.List; import org.hibernate.Session; import org.hibernate.type.Type; import org.springframework.stereotype.Repository; /** * 基础Dao接口,定义通用的操作 * @author LYM * */ @Repository public interface IGenericDao<T, PK extends Serializable> { /** * 对于返回列表的方法,通过调用我来实现返回记录数的控制, * 设置返回记录数,若top为0不设置 */ public void setMaxResults(int top); /** * 获得hibernate session * @return */ public Session getHibernateSession(); /** * 保存T实体 * @param entity 继承T抽象类的实体 * @return Serializable 主键 */ public Serializable save(T entity); /** * 更新T实体 * @param entity 继承T抽象类的实体 */ public void update(T entity); /** * 保存或更新T实体 * @param entity 继承T抽象类的实体 */ public void saveOrUpdate(T entity); /** * 保存或跟新实体集合Collection<T> * 若实体已经存(根据主键判断)在则更新实体,则保存实体 * @param entityList 继承T抽象类的实体集合 */ public void saveOrUpdateAll(Collection<T> entityList); /** * 删除T实体 * @param entity 继承T抽象类的实体 */ public void delete(T entity); /** * 删除Collection<T>集合实体 * @param entityList 继承T抽象类的实体集合 */ public void deleteAll(Collection<T> entityList); /** * 根据主键值获得继承T的实体 * @param id 实体主键 * @return T */ public T findEntityById(PK id); /** * 根据hql语句查找T,返回List<T>类型 * @param hql HQL查询语句 * @return List<T> */ public List<T> findEntityByHqlQuery(String hql); /** * 根据hql语句查找T,返回List<T>类型 * @param hql HQL查询语句 * @param obj 查询参数,匹配站位符? * @return List<T> */ public List<T> findEntityByHqlQuery(String hql, Object obj); /** * 根据hql语句查找T,返回List<T>类型 * @param hql HQL查询语句 * @param objs 查询参数数组,按顺序匹配站位符? * @return List<T> */ public List<T> findEntityByHqlQuery(String hql, Object[] objs); /** * 根据hql语句查找某些列,返回List<Object[]>类型 * @param hql HQL查询语句 * @return List<Object[]> */ public List<Object[]> findColsByHqlQuery(String hql); /** * 根据hql语句查找某些列,返回List<Object[]>类型 * @param hql HQL查询语句 * @param obj 查询参数,匹配站位符? * @return List<Object[]> */ public List<Object[]> findColsByHqlQuery(String hql, Object obj); /** * 根据hql语句查找某些列,返回List<Object[]>类型 * @param hql HQL查询语句 * @param objs 查询参数数组,按顺序匹配站位符? * @return List<Object[]> */ public List<Object[]> findColsByHqlQuery(String hql, Object[] objs) ; /** * 根据hql语句查找某些列,返回List<Object>类型 * @param hql HQL查询语句 * @return List<Object> */ public List<Object> findColByHqlQuery(String hql) ; /** * 根据hql语句查找某些列,返回List<Object>类型 * @param hql HQL查询语句 * @param obj 查询参数,匹配站位符? * @return List<Object> */ public List<Object> findColByHqlQuery(String hql, Object obj); /** * 根据hql语句查找某些列,返回List<Object>类型 * @param hql HQL查询语句 * @param objs 查询参数数组,按顺序匹配站位符? * @return List<Object> */ public List<Object> findColByHqlQuery(String hql, Object[] objs); /** * 根据hql语句查找某些列,返回List<String[]>类型,支持分页 * @param hql HQL查询语句 * @param start 查找记录数其实位置(从0开始) * @param reCount 要返回的记录数(页显示记录数) * @return List<Object[]> */ public List<Object[]> findColsByHqlQuerySupportPaging(String hql, int start, int reCount); /** * 根据hql语句查找某些列,返回List<String[]>类型,支持分页 * @param hql HQL查询语句 * @param objs 查询参数数组,按顺序匹配站位符? * @param types 查询参数类型数组,按顺序对应objs中的参数类型 * 注:参数必须是Hibernate类型的,比如String对应Hibernate.STRING,boolean对应Hibernate.BOOLEAN等 * @param start 查找记录数其实位置(从0开始) * @param reCount 要返回的记录数(页显示记录数) * @return List<Object[]> */ public List<Object[]> findColsByHqlQuerySupportPaging(String hql, Object[] objs, Type[] types, int start, int reCount); /** * 根据hql语句查找,获得记录数 * 例如:select count(*) from T * @param hql HQL查询语句 * @return long */ public long getRecordCountByHqlQuery(String hql) ; /** * 根据hql语句查找,获得记录数 * 例如:select count(*) from T where ... * @param hql HQL查询语句 * @param obj 查询参数,匹配站位符? * @return long */ public long getRecordCountByHqlQuery(String hql, Object obj) ; /** * 根据hql语句查找,获得记录数 * 例如:select count(*) from T where ... * @param hql * @param objs 查询参数数组,按顺序匹配站位符? * @return long */ public long getRecordCountByHqlQuery(String hql, Object[] objs) ; /** * 执行更新update/删除delete操作 * @param hql * @return int 更新数量/删除数量 */ public int executeHqlQuery(String hql) ; /** * 执行更新update/删除delete操作 * @param hql * @param obj 查询参数,匹配站位符? * @return int 更新数量/删除数量 */ public int executeHqlQuery(String hql, Object obj); /** * 执行更新update/删除delete操作 * @param hql * @param objs 查询参数数组,按顺序匹配站位符? * @return int 更新数量/删除数量 */ public int executeHqlQuery(String hql, Object[] objs) ; /** * 根据hql语句查找T,返回List<T>类型,支持分页 * @param hql HQL查询语句 * @param start 查找记录数其实位置(从0开始) * @param reCount 要返回的记录数(页显示记录数) * @return List<T> */ public List<T> findEntityByHqlQuerySupportPaging(String hql, int start, int reCount); /** * 根据hql语句查找T,返回List<T>类型,支持分页 * @param hql HQL查询语句 * @param objs 查询参数数组,按顺序匹配站位符? * @param types 查询参数类型数组,按顺序对应objs中的参数类型 * 注:参数必须是Hibernate类型的,比如String对应Hibernate.STRING,boolean对应Hibernate.BOOLEAN等 * @param start 查找记录数其实位置(从0开始) * @param reCount 要返回的记录数(页显示记录数) * @return List<T> */ public List<T> findEntityByHqlQuerySupportPaging(String hql, Object[] objs, Type[] types, int start, int reCount) ; /** * 支持SQL查询,根据sql语句查找某些列,返回List<String[]>类型 * @param sql SQL查询语句 * @return List<Object[]> */ public List<Object[]> findColsBySqlQuery(String sql) ; /** * 支持SQL查询,根据sql语句查找某列,返回List<Object>类型 * @param sql SQL查询语句 * @return List<Object> */ public List<Object> findColBySqlQuery(String sql) ; /** * 支持SQL操作,执行sql语句update/delete/存储过程 * @param sql SQL语句 * @return int */ public int executeSqlQuery(String sql) ; } |
|
返回顶楼 | |
发表时间:2010-03-30
楼主用什么画的图哦?
|
|
返回顶楼 | |
发表时间:2010-03-30
fancyboy2050 写道 楼主用什么画的图哦?
用的是violet UML Editor,看附件吧! |
|
返回顶楼 | |
发表时间:2010-03-31
LZ 的接口规定 考虑的很 全面 ,我大概看了一下 ,但是我没有仔细用 ,不知道能不能经得起需求的考验!
|
|
返回顶楼 | |
发表时间:2010-04-01
JavaLanguageFun 写道 LZ 的接口规定 考虑的很 全面 ,我大概看了一下 ,但是我没有仔细用 ,不知道能不能经得起需求的考验!
这个我已经在项目中实践过了,基本上是可以满足需求的。 |
|
返回顶楼 | |