new framework(2)--why put Statement inside dao method

new framework(2)--why put Statement inside dao method

原来Statement stmt = conn.createStatement();都是在放在BaseDao中,
子类dao的方法中就可以直接用这个stmt,而且方法最后都会用finally
来close这个stmt以及rs。

这个做不好,因为new一个dao后,不能连续调用两个方法,因为前一个方法
已经把stmt关闭掉了。

因此新架构中,在每个方法中都加入Statement stmt = conn.createStatement();
这样就不会有上述问题了,但以增加代码量为代价。
   例子:

     public   void  addSub(MenuDto dto)
    
{
        Connection conn 
= getConnection();
        
try
        
{            
            MenuDao mDao 
= new MenuDao(conn);
            MenuRoleDao mrDao 
= new MenuRoleDao(conn);
            MenuDto menu 
= mDao.getNextMenu(dto.getId().substring(0,2));
            
            dto.setId(menu.getId());
            dto.setSort(menu.getSort());
            
            mDao.save(dto);
            mrDao.saveMenu(menu.getId());
        }

        
catch(Exception e)
        
{     
            ConnectionManager.rollback(conn);
            SysLogger.error(
"MenuService.addSub()",e);            
        }
        
    }

MenuDao 连续调用了两个方法 getNextMenu save ,如果不把

Statement stmt = conn.createStatement()置于方法内,那么我们要这样写:

           MenuDao mDao = new MenuDao(conn);

           MenuDto menu = mDao.getNextMenu(dto.getId().substring(0,2));          

MenuDao mDao2 = new MenuDao(conn);

           mDao2.save(dto);

new 两次,不是不可以,但让人感觉很不爽。

你可能感兴趣的:(new framework(2)--why put Statement inside dao method)