使用 MyBatis ,如何清除表格并在一个查询中插入新值?
普通SQL 我正在考虑以下几点:
START TRANSACTION;
DELETE...
INSERT...;
COMMIT;
有没有办法在XML格式中将其翻译成MyBatis?
我曾想过使用delete和insert命令创建一个简单的<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);
}
答案 0 :(得分:0)
理论上可以使用
<insert id="badWayOfInserting">
${SQL}
</insert>
并传递一个名为&#39; SQL&#39;的字符串变量to badWayOfInserting。尽管不推荐。
最好的选择是使用CDI的交易。你会有一个带有@Transactional注释的方法。或多或少是这样的:
@Transactional
public void deleteAndInsert(List<Item> listOfItems){
db.deleteDB();
db.insertItems(listOfItems);
}
CDI交易与数据库交易相同。只有一切顺利,它才会提交。