最近在做的一个小作业,其中用到了批量插入数据。在这里记录一下MyBatis实现批量插入的方法。
这里我做的是一个宿舍管理系统,就以本系统为例了。
第一步、首先需要从前端获取数据并封装到对象中。
实体类如下:
- Evaluation.java:
public class Evaluation {
private Integer evaluationId;
private Double evaluationScore;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date evaluationDate;
private String dormNumber;
public Integer getEvaluationId() {
return evaluationId;
}
public void setEvaluationId(Integer evaluationId) {
this.evaluationId = evaluationId;
}
public Double getEvaluationScore() {
return evaluationScore;
}
public void setEvaluationScore(Double evaluationScore) {
this.evaluationScore = evaluationScore;
}
public Date getEvaluationDate() {
return evaluationDate;
}
public void setEvaluationDate(Date evaluationDate) {
this.evaluationDate = evaluationDate;
}
public String getDormNumber() {
return dormNumber;
}
public void setDormNumber(String dormNumber) {
this.dormNumber = dormNumber == null ? null : dormNumber.trim();
}
}
第二步、写Controller类方法,获取List集合数据
- Controller
@RequestMapping(value = "/insertEvaluation",method = RequestMethod.PUT,produces = "application/json;charset=utf-8")
@ResponseBody
public String insertEvaluation(@RequestBody List<Evaluation> evaluations) throws JsonProcessingException {
for (Evaluation evaluation:evaluations){
evaluation.setEvaluationDate(new Date());
}
int result = webEvaluationService.insertEvaluation(evaluations);
Map<String,Object> returnMap = new HashMap<>();
if(result > 0){
returnMap.put("state",DormiConstants.SUCCESS);
}else {
returnMap.put("state",DormiConstants.fail);
}
return objectMapper.writeValueAsString(returnMap);
}
第三步,写Service调用Mapper映射
- Service
@Override
public int insertEvaluation(List<Evaluation> evaluations) {
try {
return insertEvaluationMapper.insertEvaluations(evaluations);
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
第四步,写Mapper文件及接口
- InsertEvaluationMapper.xml
<?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.dormi.mapper.Mr.InsertEvaluationMapper">
<resultMap id="BaseResultMap" type="com.dormi.domain.Evaluation">
<id column="evaluation_id" jdbcType="INTEGER" property="evaluationId" />
<result column="evaluation_score" jdbcType="DOUBLE" property="evaluationScore" />
<result column="evaluation_date" jdbcType="DATE" property="evaluationDate" />
<result column="dorm_number" jdbcType="VARCHAR" property="dormNumber" />
</resultMap>
<insert id="insertEvaluations" useGeneratedKeys="true" keyProperty="evaluation_id" parameterType="com.dormi.domain.Evaluation">
insert evaluation(evaluation_id,evaluation_score,evaluation_date,dorm_number)
values
<foreach collection="list" item="eval" index="index" separator=",">
(#{eval.evaluationId},#{eval.evaluationScore},#{eval.evaluationDate},#{eval.dormNumber})
</foreach>
</insert>
</mapper>
-InsertEvaluationMapper.java
public interface InsertEvaluationMapper {
int insertEvaluations(List<Evaluation> evaluations);
}
至此,mabatis实现批量插入就完成了。