我的万能dao 设计源码,请大家多多指教!
首先,先看下类图:(在这篇文章已经发过了http://lym6520.iteye.com/admin/blogs/421504)
我补充了Query层来存放hql或sql,如下:
现在我们来看下IBaseDao.java文件:
我想目前存在的缺点是对命名参数的支持,大家给补上吧!
这个是不是可以再优化一下,修改代码 满足开发中使用什么类型的框架,程序就自动调用相关代码......
这个是不是可以再优化一下,修改代码 满足开发中使用什么类型的框架,程序就自动调用相关代码......
那要看什么框架了,你可以有多种实现方式。 34 楼 鲜血的记忆 2010-04-02 楼主对万能dao的理解有点问题,以至于把分页都放在dao接口中了,所以才会导致hql散落在各处,如果BasicDao接口使用反射和泛型一般他的BasicDaoImpl就能够满足大部分的需求(都说反射影响性能,没有亲自测试,但是ssh都很频繁的使用了反射技术),hql放在BasicDaoImpl的继承类中(比如ItemDaoImpl),传入的只是参数列表和实体列表。通过反射确定实体和返回类型的类型。而像分页这种事情通常都单独的设计成service接口或实现类让ItemDaoImpl继承或实现,这样可以定制分页等实现,什么时候想分页了只要继承一下就好了,很灵活。楼主这种设计颗粒度太大,冗余和不可复用其实是与楼主的目的背道而驰了。 35 楼 lym6520 2010-04-02 鲜血的记忆 写道楼主对万能dao的理解有点问题,以至于把分页都放在dao接口中了,所以才会导致hql散落在各处,如果BasicDao接口使用反射和泛型一般他的BasicDaoImpl就能够满足大部分的需求(都说反射影响性能,没有亲自测试,但是ssh都很频繁的使用了反射技术),hql放在BasicDaoImpl的继承类中(比如ItemDaoImpl),传入的只是参数列表和实体列表。通过反射确定实体和返回类型的类型。而像分页这种事情通常都单独的设计成service接口或实现类让ItemDaoImpl继承或实现,这样可以定制分页等实现,什么时候想分页了只要继承一下就好了,很灵活。楼主这种设计颗粒度太大,冗余和不可复用其实是与楼主的目的背道而驰了。
你说的没错,可以把AbstractGenericDao(已经修改成这个名称了)进行拆分,但是这里用到的是继承,只能单一继承。