好像没有这样的用法。你可以将这两个语句分开,在DAO里作为两个方法,然后可以额外加一个方法对这两个方法依次调用,也能实现

解决方案 »

  1.   

    MyBatis对每个sql在Mapper Interface里都有一个对应的方法。
    写一个Service,在Service的方法里调用这两个删除方法就可以了,如果有需要,还可以用事务。
      

  2.   

    随便说一句,上面说直接用Mapper,不用Dao是因为使用的是Spring,可以不用Dao层,因为在Dao里创建SqlSession, 关闭SqlSession,创建事务,提交事务等大量模版的事情都由MyBatis-Spring的插件给自动做完了,所以直接在Service的方法里使用Mapper的函数。
      

  3.   

    你两条sql的id一样,应该不能判断使用哪个
      

  4.   

    Inhibitory,你说的mybatis里面的Mapper里面的一个sql语句对应DAO层的一个interface接口,这个我能理解,目前我网上搜了下貌似只有“存储过程”和你说的”把sql在dao映射多个方法"来解决了,因为根据官方介绍mybatis是不可以同时连续执行多条sql的,除非修改其源码,但是小弟是这样的需求:不使用spring技术来管理,也不使用存储过程技术,就是单纯的加入mybatis来简化jdbc的冗余Connction,Statement,ResultSet等这样的重复代码,因为以前老项目数据库使用的是jdbc技术,JDBC可以在prepareStatement里面同时装载多个sql,这一点mybatis不得行,所以就是问下各位高人有没有办法来让mybatis同时连续在Mapper里面可以执行多条SQL哈!
      

  5.   

    还有一点就是如果把多个sql的映射语句都写在DAO层,也就是说一个select,insert,update,delete标签对应一个DAO层的interface接口方法,那么如果业务有100条连续执行的insert或delete标签语句,那岂不是DAO层要写100个对应的方法,这肯定不是最佳方案啊,人家ibatis就可以使用<statement />标签来将多个sql写在一起连续执行,看来升级版mybatis还没以前的ibatis好呢!
      

  6.   

    那你这两步其实就是一个业务操作中的两步嘛。
    业务操作放到service层中,两步操作每一步都放在DAO层
    那么在service开启事务,然后依次调用两步就OK了~很清晰嘛
      

  7.   

    回复012345283:是的,我需要先更新用户状态,然后再删除根据它可用状态删除他,但是以前老项目在DAO层只写了一个deleteUserByID()方法,该方法调用上面2个statement的sql语句就完成,而mybatis在DAO层写一个deleteUserByID()方法,它不可以写2条sqlMapper语句啊,你们的意思就是在DAO层将deleteUserByID()分成2个方法来各自写一个sql语句,我想要的结果就是deleteUserByID()有且只有一个这个方法来调用2条sqlMapper啊!
      

  8.   

    运用事务,要不写个存储过程也行。同一类的SQL可以执行多个,不同类的,执行不了啊
      

  9.   

    首先这要看你的deleteUserByID()方法是作为什么方法存在了。
    如果认为他是业务逻辑,完全可以写在service层,调用两条SQL对应的DAO层方法;
    如果一定要写成DAO方法,完全可以将那两条SQL对应的update和delete两个方法封装起来使用。如果在xml中使用的是Mapper名空间,那么对应Mapper确实可以作为DAO来使用,但仍然可以自己构建一个DAO来对Mapper方法进行扩展。
    Mybatis中没有直接执行多条SQL的方法,事实上将每条语句分开也有便于重用的考虑,虽然未必会用到