<mapper namespace="com.example.YourMapper"> <insert id="batchInsertOrUpdate" parameterType="java.util.List"> <foreach collection="list" item="item" separator=";"> <if test="item.id != null"> <!-- 判断ID是否存在 --> SELECT COUNT(*) FROM your_table WHERE id = #{item.id} </if> <choose> <when test="_parameter[0] > 0"> <!-- 更新操作 --> UPDATE your_table SET column1 = #{item.column1}, column2 = #{item.column2} WHERE id = #{item.id} </when> <otherwise> <!-- 插入操作 --> INSERT INTO your_table (id, column1, column2) VALUES (#{item.id}, #{item.column1}, #{item.column2}) </otherwise> </choose> </foreach> </insert> </mapper>和mybatis-plus的saveOrUpdateBatch性能比较及如何选用,注:实体对象ID属于type = IdType.INPUT非自增
时间: 2023-12-09 22:06:18 AIGC 浏览: 321
`<insert>`标签方式和MyBatis-Plus的`saveOrUpdateBatch`方法是两种不同的方式来实现大批量数据操作。下面是它们的性能比较和如何选择的建议:
1. `<insert>`标签方式:
- 性能比较:使用`<insert>`标签进行大批量数据操作时,会根据每个数据的ID是否存在执行对应的更新或插入操作。这种方式对于数据量较小的情况下性能较好,因为它会逐条执行SQL语句。但是对于大批量数据操作来说,可能会有较多的数据库交互,性能可能较低。
- 选择建议:如果您的数据量不是特别大,并且对性能要求不高,可以考虑使用`<insert>`标签方式。
2. `saveOrUpdateBatch`方法:
- 性能比较:`saveOrUpdateBatch`是MyBatis-Plus提供的方法,它能够根据实体对象的ID自动判断执行插入或更新操作。这种方式可以减少数据库交互次数,提高性能,尤其在处理大批量数据时效果更好。
- 选择建议:如果您的数据量较大,并且对性能要求较高,推荐使用`saveOrUpdateBatch`方法。
根据您提供的注释信息,实体对象ID属于`IdType.INPUT`非自增类型。在这种情况下,使用`<insert>`标签方式可能更适合,因为您需要在插入操作中显式指定ID的值。
综上所述,如果您的数据量较小且对性能要求不高,可以选择使用`<insert>`标签方式。如果您的数据量较大且对性能有较高的要求,并且实体对象ID属于`IdType.INPUT`非自增类型,可以考虑使用MyBatis-Plus的`saveOrUpdateBatch`方法。根据具体情况选择适合您的方式。
阅读全文
相关推荐

















<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>班级列表</title>
</head>
<body>
班级列表
添加班级
班级名称
操作
<c:forEach var="cls" items="${classist}">
${cls.cname} (ID: ${cls.cid})
查看成绩
查看学生
</c:forEach>
</body>
</html><%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>班级列表</title>
</head>
<body>
班级列表
年级
操作
<c:forEach var="gls" items="${gradeList}">
${gls.term} (ID: ${gls.gid})
查看第一学生成绩
查看第二学生成绩
查看第三学生成绩
查看第四学生成绩
s
</c:forEach>
</body>
</html>package com.buka.controller;
import com.buka.po.Grade;
import com.buka.po.Student;
import com.buka.service.GradeService;
import com.buka.service.StuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
@Controller
public class GradeController {
@Autowired
GradeService gradeService;
@Autowired
StuService stuService;
@RequestMapping("/addGrade")
public ModelAndView addGrade(Grade grade,ModelAndView mv ){
gradeService.addGrade(grade);
Integer sid = grade.getSid();
List<Student>studentList = gradeService.getallS();
if (studentList == null) {
mv.setViewName("error.jsp");
mv.addObject("message", "找不到对应的学生");
return mv;
}
mv.addObject("stuList", studentList);
mv.setViewName("Student.jsp");
return mv;
}
@RequestMapping("/ShowGrade")
public ModelAndView showGrade(String term,ModelAndView mv ){
List<Grade> gradeList = gradeService.showGradeByTerm(term);
mv.addObject("gradeList", gradeList);
mv.setViewName("ShowGrade.jsp");
return mv;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.buka.dao.GradeDao">
<insert id="addGrade" parameterType="com.buka.po.Grade">
INSERT INTO grade (gid, term, sid, math, chinese, English)
VALUES (#{gid}, #{term}, #{sid}, #{math}, #{chinese}, #{English})
</insert>
<select id="selectGradeByTerm" parameterType="String" resultType="java.util.Map">
SELECT
s.name ,
g.math ,
g.chinese ,
g.English ,
g.term
FROM
grade g
INNER JOIN
student s ON g.sid = s.sid
WHERE
g.term = #{term}
ORDER BY
s.name
</select>
</mapper><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.buka.dao.GradeDao">
<insert id="addGrade" parameterType="com.buka.po.Grade">
INSERT INTO grade (gid, term, sid, math, chinese, English)
VALUES (#{gid}, #{term}, #{sid}, #{math}, #{chinese}, #{English})
</insert>
<select id="selectGradeByTerm" parameterType="String" resultType="java.util.Map">
SELECT
s.name ,
g.math ,
g.chinese ,
g.English ,
g.term
FROM
grade g
INNER JOIN
student s ON g.sid = s.sid
WHERE
g.term = #{term}
ORDER BY
s.name
</select>
</mapper>package com.buka.service;
import com.buka.dao.GradeDao;
import com.buka.dao.Studao;
import com.buka.po.Grade;
import com.buka.po.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class GradeService {
@Autowired
GradeDao gradeDao;
@Autowired
Studao studao;
public int addGrade(Grade grade){
return gradeDao.addGrade(grade);
}
public List<Student> getallS() {
return studao.getallS();
}
public List<Grade>showGradeByTerm(String term){
return gradeDao.showGradeByTerm(term);
}
}


