WHERE
     id=#{id}
</update>
<delete id="deleteUserById" parameterType="int">
DELETE FROM
     order_users
WHERE
     uid=#{uid}      
</delete>
也就是说先更新用户表users的状态为激活,然后在进行删除该激活的用户,其中用户表的id与订单表的uid是对应的,比如id是22那么它所对应的uid也是22,我上面写法会mybatis会说映射文件ID名称相同了,无法执行,技术限制不使用存储过程方式调用的情况下怎么解决该问题啊,mybatis能否像ibatis那样同时有<statement>属性加入多条sql一起执行呢?
------解决思路----------------------
好像没有这样的用法。你可以将这两个语句分开,在DAO里作为两个方法,然后可以额外加一个方法对这两个方法依次调用,也能实现
------解决思路----------------------
MyBatis对每个sql在Mapper Interface里都有一个对应的方法。
写一个Service,在Service的方法里调用这两个删除方法就可以了,如果有需要,还可以用事务。
------解决思路----------------------
那你这两步其实就是一个业务操作中的两步嘛。
业务操作放到service层中,两步操作每一步都放在DAO层
那么在service开启事务,然后依次调用两步就OK了~很清晰嘛
------解决思路----------------------
引用:
回复012345283:是的,我需要先更新用户状态,然后再删除根据它可用状态删除他,但是以前老项目在DAO层只写了一个deleteUserByID()方法,该方法调用上面2个statement的sql语句就完成,而mybatis在DAO层写一个deleteUserByID()方法,它不可以写2条sqlMapper语句啊,你们的意思就是在DAO层将deleteUserByID()分成2个方法来各自写一个sql语句,我想要的结果就是deleteUserByID()有且只有一个这个方法来调用2条sqlMapper啊!

在别人的世界,就得按照别人的规则去做。
------解决思路----------------------
运用事务,要不写个存储过程也行。同一类的SQL可以执行多个,不同类的,执行不了啊
------解决思路----------------------
首先这要看你的deleteUserByID()方法是作为什么方法存在了。
如果认为他是业务逻辑,完全可以写在service层,调用两条SQL对应的DAO层方法;
如果一定要写成DAO方法,完全可以将那两条SQL对应的update和delete两个方法封装起来使用。如果在xml中使用的是Mapper名空间,那么对应Mapper确实可以作为DAO来使用,但仍然可以自己构建一个DAO来对Mapper方法进行扩展。
Mybatis中没有直接执行多条SQL的方法,事实上将每条语句分开也有便于重用的考虑,虽然未必会用到
  相关解决方案