dao层一般是放一些关于对数据库的操作的内容,那么开session,开事务和事务提交,关闭session之类的也是放在 dao层吗?? 

解决方案 »

  1.   

    事务和hibernate的session的管理需要另起一层。dao层只管拿他来做事,不管他的死活。
      

  2.   

    dao层不管事务,dao层只管用。
      

  3.   

    那 session 和 transaction 放哪里??  service层吗?  还有dao层里 没有session怎么用?
    例如 session.save()这样的方法,没session怎么用?
      

  4.   

    用hibernate封装数据库DAO实例import net.sf.hibernate.*;
    import java.util.*;public final class UserDAO {
       
         public static int chkUserName(String name) throws HibernateException 
         {
         Session hsession=HibernateUtil.currentSession();
    Transaction tx = hsession.beginTransaction();
             int n=-1;
             int id=-2;
             String q = "from User as user where user.name='"+name+"'";         Query query2 = hsession.createQuery (q);try{
    List list=query2.list();
         n=list.size();
    for(int i=0;i<list.size();i++)
           {
                 User g2=(User)list.get(i);
    id=g2.getId();   }
    }catch (Exception e) {
    System.out.println(e.getMessage());
    }finally{           tx.commit();
               HibernateUtil.closeSession();
             }return n;
              
         }
             
          public void saveName(String name) throws HibernateException 
         {
         Session hsession=HibernateUtil.currentSession();
    Transaction tx = hsession.beginTransaction();
             User user=new User();
             
    try{
    user.setName(name);
    hsession.save(user);
             hsession.flush();
            
    }catch (Exception e) {
    System.out.println(e.getMessage());
    }finally{           tx.commit();
               HibernateUtil.closeSession();
             }
              
         }
             public List getGbooks() throws HibernateException{
       Session session=HibernateUtil.currentSession();
         Transaction tx = null;
         List list=null;
         try {
           tx = session.beginTransaction();
             Query query = session.createQuery ("select user from User as user ");
             list = query.list();
             tx.commit();
         }catch (HibernateException e) {
           if (tx != null) {
             tx.rollback();
           }
           System.err.println("getGbook:"+e.getMessage());
         } finally {
           //session.close();
         }
          return list;
       }
               
    }
      

  5.   

    好的~谢谢了~~ 其实我就是想知道  
    Session hsession=HibernateUtil.currentSession(); 
    Transaction tx = hsession.beginTransaction(); 这2句代码是不是 放在dao层~
      

  6.   

    @Transactional
    public int saveModuleList(Mod...mods ) {
    return moduleDao.save(mods);
            }
            应该是想法问题吧!一直没放入Dao里。
      

  7.   

    LS用的Spring管理事物吧。
    回答LZ的问题,将你的那两句加入到DAO层完全可以,但是要看你具体的环境了,比如你开发的是一套业务系统,那么一个业务可能是处于一个事物当中,这种情况需要将事物拿到DAO外面控制,但是这样比较麻烦了就,还有就是操作太多,没准会引起一些数据库死锁问题。放到DAO层可以,但是遇到长事务就不行了,而且短事物多了还会影响性能。
      

  8.   

    看实际情况。过于简单的需求可以这样,稍复杂点的就建议拿出来。dao层是dao层,事务层是事务层。spring鼓励我们以面向切面的思想来设计,而事务管理就是一个切面,把事务从业务逻辑中抽离,使双方都能够仅关注自己的部分,而不是胶在一起。
      

  9.   

    一般都是弄的工厂,来放session的open,close 等等,在dao层调用
      

  10.   

    一般不用spring~~ 就是 sh~    分三层 action,dao,service~~  
      

  11.   

    session不要和dao混在一起。
    找点j2ee patterns之类的书,会对你有帮助的。
      

  12.   

    那是肯定的咯。。
    DAO   --  数据库访问对象
    它的职责就是专门和数据库打交道,应该说开始事务、提交事务、关闭连接是在DAO层
    至于开启时session、关闭session那不一定,因为你用了hibernate框架,而hibernate
    它是通过session来管理与数据库的操作,既然你的事务是加在DAO层了,那session的操作
    也就再这一层了,项目中如果你不抽取一个DAO层来,就直接一个业务逻辑层(manager/service)
    那么这时候session
    就是业务逻辑这一层了
      

  13.   

    LZ混淆了.session和request\response一般都是在action层.不过都是在baseaction中封装.service层处理事务. 要么事务交给spring声明式管理
      

  14.   

    DAO: Data Access Object
    顾名思意,只管访问数据,如从数据库。
      

  15.   

    其实我感觉LZ你对DAO的概念应该有一定程度的熟悉了 你真正不了解的 是Service用来做什么的
      

  16.   


    无论你使用不使用框架,都最好抽象出一个service层,将事务加到Serviece层,这样方便事务的回滚,如果加到Dao层,那么业务和数据库操作掺到了一起将很难维护。这个也是MVC模式最基本的思想。
      

  17.   


    事务一般都是放在service层中的 ,因为service中 可能会执行多个操作 
      

  18.   

    如果你用ssh框架,你就会体会到这一用法,放到业务里是最好的。而且事务交给spring来给你管理。
      

  19.   

    MVC 有3层。管理session的这些方法,完全可以放到service层。dao就只管数据方面的东西吧~
      

  20.   

    我的理解,session哪里用到就在哪里get就行,不过要和线程绑在一起,事务处理要在service里做,有可能一个业务要调用几个dao,每个dao都有一个自已的事务是不行的.
      

  21.   

    DAO只管数据存取。事务应该在service来做。比如不同dao有事务绑定,写在dao就不合适
      

  22.   

    编号002627    
    SSE-JAVA 招聘中。。
    上海/北京/武汉 
    ? Be responsible for application design, technical design 
     ? Be responsible for application development, unit testing and system integration testing and implementation  
    ? Maintain and design project related documentation  
    ? Troubleshooting critical bugs, critical issues  
    ? Lead junior developers to finish tasks on time 
    ? Bachelor degree or higher with a major in computer engineering or related 
     ? 7+ years experience in solution design and software development  
    ? Proficiency in Java/J2EE related design, development, testing, debugging skills   
    ? Strong developing experience on Oracle or SQL Server  
    ? Good verbal and written communication in Chinese and English  
    ? Airline industry background is a plus 有意向者
    请联系QQ635844351 
    MSN:[email protected]
      

  23.   

    如果将session 和 transaction 放在 service层。 
    那么在dao层里 如果对数据库进行操作
    例如 session.save()这样的方法。这个地方的session怎么来呢?  因为session是在service里open的~
    在dao里 还要再开一个?  那不是开了2个session了~
      

  24.   

    开关session属于事物的控制,应该在model处理
      

  25.   

    dao层只做DB
    用spring来管理吧
      

  26.   

    我感觉DAO层就是封装数据库业务逻辑的。。当然只要不会影响将来维护的话可以加些其他的。。
    建议不要混在一起因为势必会影响的