一般DAO层负责数据库操作,Service层只处理业务。
我的问题是,对于比较复杂的SQL语句,是写在DAO层还是业务层?我举例说明吧:
比如有 学校、班级、学生表。
对于基本的添加删除等,都好说。DAO层:SchoolDao、ClassDao、StudentDao。 Service层:SchoolService、ClassService、StudentService
但是假设有个非常复杂的业务,比如要查询某学校,班级号为偶数,年龄多大,身高多少的学生,甚至说有可能需要递归等操作。 这种业务还需要在DAO层进行接口定义吗?就算要定义,似乎也不好定义啊我的理解,DAO层每个接口都负责自己的事情,比如StudentDao只负责学生的添加删除修改查询,而不会处理其他的。你可能会想,在StudentDao里面增加一个接口 FindBySchoolClassAgeHeight(。),但是这样岂不是关联性太强了,或者说DAO层的业务性太强了?因此我认为,如果需要实现上面复杂的业务,就没办法做了。请各位教我。灰长感Xie
我的问题是,对于比较复杂的SQL语句,是写在DAO层还是业务层?我举例说明吧:
比如有 学校、班级、学生表。
对于基本的添加删除等,都好说。DAO层:SchoolDao、ClassDao、StudentDao。 Service层:SchoolService、ClassService、StudentService
但是假设有个非常复杂的业务,比如要查询某学校,班级号为偶数,年龄多大,身高多少的学生,甚至说有可能需要递归等操作。 这种业务还需要在DAO层进行接口定义吗?就算要定义,似乎也不好定义啊我的理解,DAO层每个接口都负责自己的事情,比如StudentDao只负责学生的添加删除修改查询,而不会处理其他的。你可能会想,在StudentDao里面增加一个接口 FindBySchoolClassAgeHeight(。),但是这样岂不是关联性太强了,或者说DAO层的业务性太强了?因此我认为,如果需要实现上面复杂的业务,就没办法做了。请各位教我。灰长感Xie
解决方案 »
- java循环显示26个字母问题
- 关于JAVA字节码操纵框架(ASM,BCEL,Javassist...)
- Jboss启动异常
- Hibernate 高手看过来:Hsql 如何写查询某两个时间点的数据
- target="mainFrame",为什么IE7无效
- j2ee中奇怪的乱吗问题(中文+数字 正常 )( 数字+中文 中文部分乱码)
- 高手们,说明一下什么是WebLogic。有什么用。如何使用,安装和配置。
- 訪問oracle9i的blob字段用jdbc訪問通過,但是通過jndi數據源,失敗!那位老大知道,狂送分!!!!!跟貼著有分
- PowerDesigner9.5里如何设置一个int字段的默认值为0?
- web项目中,编译好的class文件在哪存放?Eclipse4.4
- JAVA连ORACEL数据库,动态拼接的SQL运行时单引号总是一个变两
- Apache CXF 讨论
你所举的例子放在StudentDao里,要是dao里只放单表操作那也太浪费了。
关键是看查询的主表是什么,因为你终究是查询符合条件的学生,所以理应放在StudentDao里。
而且这些语句一般都是固定的不用做修改的。
至于复杂的逻辑,就多次调用dao层的接口,虽然这样注定造成效率的低下,但是降低了耦合性。
另外现在一般CPU都没问题,只要不是特别大数据量的查询,硬件一般都是不成问题的。
我不就是想举个复杂业务例子嘛,我不说那么麻烦了,就说班级和学生吧。
照你的意思,我在StudentDao里面, 有个
QueryXXXX()
{
select * from student where id in (select * from class);
......
}这样的话,StudentDao里面竟然出现了select * from class ,这不是ClassDao应该出现的吗,我总觉得不妥,转不过来弯。
请指教,再次感谢。
我现在蛋疼了,啊,蛋疼了,求药
照你这么说, select * from student where id in (select * from class);
上述语句,就必须在业务层先用ClassDao查询,再用StudentDao查询?