当前位置: 代码迷 >> Java Web开发 >> 刚学SSH,有个有关问题就是HQL是否全部写在DAO层,而service层 不体现 HQL
  详细解决方案

刚学SSH,有个有关问题就是HQL是否全部写在DAO层,而service层 不体现 HQL

热度:543   发布时间:2016-04-16 21:58:29.0
刚学SSH,有个问题就是HQL是否全部写在DAO层,而service层 不体现 HQL?
刚学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了
------解决方案--------------------
引用:
看错了,HQL在花括号里就对着呢,最基本的写法就是你那样,差不多。
  相关解决方案