MyBatis一次执行多个sql语句,这可能吗?

我想知道是否有可能在1 go中执行多个sql语句。 例如,我想从多个表中删除行的场景,有没有办法可以做的事情,比如…

 DELETE FROM DUMMYTABLE_A where X=${value} DELETE FROM DUMMYTABLE_B where X=${value}  

是的,大多数数据库允许这样做 通常,您必须使用某些内容来划分SQL语句。 在PostGRES和MySQL中,它是一个分号(;)。 在Microsoft SQL Server中,您应该使用关键字GO。 [2013年5月更新:从SQL Server 2012开始,您可以并且应该使用分号来分隔您的语句。 在SQL Server 2012(即下一个版本及更高版本)之后,这些将是强制性的。 使用GO现在是在SQL2012及更高版本中不常用的方法。 ]

MySQL / PostGRES示例:

  DELETE FROM DUMMYTABLE_A where X=${value}; DELETE FROM DUMMYTABLE_B where X=${value}; DELETE FROM DUMMYTABLE_C where X=${value}; 

MS-SQL示例:

  DELETE FROM DUMMYTABLE_A where X=${value} GO DELETE FROM DUMMYTABLE_B where X=${value} GO DELETE FROM DUMMYTABLE_C where X=${value} 

更好的数据库(即非MySQL)也将支持与BEGIN TRAN / COMMIT TRAN / ROLLBACK TRAN的交易。 使用事务,您实际上可以将所有语句批量处理为一个primefaces操作,如果其中一部分失败,则所有三个都将被回滚。 有关这些内容的更多信息,请参见http://www.sqlteam.com/article/introduction-to-transactions 。

您最需要的只是SQL语句之间的分号!

我正在使用myBatis和Oracle。 我猜其他数据库中有类似的东西。 实际上,当你必须支持项目时,你总是可以在DB中创建程序,这通常对未来更好。

  {call declare begin delete from TABLE1 where id = #{valueFromMap1}; delete from TABLE2 where id = #{valueFromMap2}; end }