Mybatis 一次性跑多条sql语句
MyBatis 允许你在一次会话中运行多条 SQL 语句。你可以通过在映射器接口中定义多个方法,每个方法对应一条 SQL 语句,或者使用@Update
注解来执行多条 SQL 语句。
以下是一个使用映射器接口执行多条 SQL 语句的示例:
public interface YourMapper {
@Update("UPDATE your_table SET column1 = value1 WHERE condition1;")
void updateFirstStatement();
@Update("DELETE FROM your_table WHERE condition2;")
void deleteSecondStatement();
@Update("INSERT INTO your_table (column2, column3) VALUES (value2, value3);")
void insertThirdStatement();
}
在你的服务层,你可以调用这些方法来执行定义的 SQL 语句:
@Service
public class YourService {
@Autowired
private YourMapper yourMapper;
public void executeMultipleStatements() {
yourMapper.updateFirstStatement();
yourMapper.deleteSecondStatement();
yourMapper.insertThirdStatement();
}
}
如果你想在一个方法中执行多条 SQL 语句,你可以使用@Transactional
注解来保证这些操作在同一个事务中执行。
@Service
public class YourService {
@Autowired
private SqlSessionFactory sqlSessionFactory;
@Transactional
public void executeMultipleStatementsInOneTransaction() {
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
Connection connection = sqlSession.getConnection();
Statement statement = connection.createStatement();
statement.executeUpdate("UPDATE your_table SET column1 = value1 WHERE condition1");
statement.executeUpdate("DELETE FROM your_table WHERE condition2");
statement.executeUpdate("INSERT INTO your_table (column2, column3) VALUES (value2, value3)");
// No need to call sqlSession.commit() because of @Transactional
}
}
}
确保你的方法在执行这些操作时处理了相关的异常,并且在方法结束时关闭了资源(例如:使用了 try-with-resources 语句)。
评论已关闭