刚学SSH,有个问题就是HQL是否全部写在DAO层,而service层 不体现 HQL?
举个例子 :
User有4个属性 User.id, User.name, User.pwd, User.lastLoginTime
有些时候我们只想使用id查到一个user 那在DAO层里定义一个方法
findUserById(Integer id);
有些时候我们又想通过name来找到一个user 于是又有了
findUserByName(String name);.
有些时候我们又想找最后登录时间再一个时间范围的用户,又加一个查询
findUserByLastLoginTime(beginTime, endTime);
另外,更新操作有时需要更新1个字段(譬如修改密码),有时需要更新多个字段,这些操作都要在Dao层完成么?
userdaoImp
public class UserDAOImp{
findUserById(Integer id){ HQL }
findUserByName(String name){ HQL}
findUserByLastLoginTime(beginTime, endTime){ HQL}
updateUser(User user){ HQL}
updateUser(String[] param ){hql}
updateUserPwd(String pwd){ HQL}
}
即所有的hql都写在DAO 层,service层直接UserDAOImp. findUserById是不是这样了
------解决方案--------------------
一般操作数据库的部分都写在Dao层,就比如你说的hql,肯定要写到DAO层的。而Service层只管调用DAO就好了,只传一些必要的参数,比如id、name之类的,你上面写的有些问题,service是不用传HQL或SQL的,这些东西不应该暴露出来,都应当封装在DAO里面,你只用传参数就行了。
------解决方案--------------------
dao层是数据库的一些操作 service业务逻辑层
------解决方案--------------------
一般来说是写在DAO来操作数据库,但是我用来开发网站的时候,为了方便有时候全部写在了Service,在Servide中定义DAO的实现,来调用DAO操作数据写HQL库同时实现业务逻辑,这样你不用两个页面切换,看起来比较轻松点。后期管理的时候也不会不方便,因为都同一写在了Service,所以写在Service还是没有影响的
------解决方案--------------------
不是, 有些项目都没有DAO层的, hql写在service完全可以。
------解决方案--------------------
codereview hql 写在 DAO层 ,写在service 会被骂。
------解决方案--------------------
其实也不一定。
你可以这么想,你每一个Dao里面都要有最基础的增删改查操作,而且这些基础的操作步骤都是相同的。
这样设计明显不合理的。
所以你可以设计一个带泛型的BaseDao,你其他的Dao继承这个Dao,就不用在重复写这些基础的方法。
当然如果你的一个模块只用到这些基础操作就够了,那你直接用Service继承BaseDao就行了,根本就不用再写Dao了
------解决方案--------------------
顶