gpt4 book ai didi

mysql - MyBatis - 在一个查询中执行连续的删除和插入语句

转载 作者:行者123 更新时间:2023-11-29 18:03:57 26 4
gpt4 key购买 nike

使用MyBatis,如何清除表并在一个查询中插入新值?

普通 SQL 我正在考虑以下内容:

START TRANSACTION;
DELETE...
INSERT...;
COMMIT;

有什么方法可以将其转换为 XML 格式的 MyBatis 吗?

我想过做一个简单的<sql>元素具有删除和插入命令,但是我如何从 XML 中调用它呢?当然,每个操作都必须从适当的标签调用( <insert><delete> )?

例如...

假设我想要清除所有学生的名为“学生”的表,并在同一张表中填充新学生。我首先会通过 DELETE FROM Students 清除表格或TRUNCATE TABLE Students ,然后我想用数据等重新填充表格...

INSERT INTO Students
(name,age,class)
VALUES
(John,12,A),
(Jim,12,A),
(Jess,13,C);

StudentServiceImpl.java

public class StudentServiceImpl implements StudentService {
Student get(Integer id) { ... };
Student getByName(String name) { ... };
Student update(Student student) { ... };
Student create(Student student) { ... };
void delete(Integer id) { ... };
List<Student> list(int offset, int limit, String name) { ... };
}

StudentMapper.java

public interface StudentMapper {
Student getStudent (Integer id);
Student getStudent ByName(@Param("name") String name);
void update(Student student);
void create(Student student);
void delete(Integer id);
List<Student> list(RowBounds rowBounds);
List<Student> listByName(@Param("name") String name,RowBounds rowBounds);
}

最佳答案

理论上这是可能的

<insert id="badWayOfInserting">
${SQL}
</insert>

并将名为“SQL”的字符串变量传递给 badWayOfInserting。虽然不推荐。

最好的选择是使用CDI的交易。您将拥有一个带有 @Transactional 注释的方法。或多或少像这样:

@Transactional
public void deleteAndInsert(List<Item> listOfItems){
db.deleteDB();
db.insertItems(listOfItems);
}

CDI 事务与 DB 事务相同。仅当一切顺利时它才会提交。

关于mysql - MyBatis - 在一个查询中执行连续的删除和插入语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48080504/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com