티스토리 뷰
[Java / Mybatis] 일괄(Batch) 입력/수정(Insert/Update)
웹 서비스 만들 때 데이터베이스에 입력/수정을 할 경우 한 번의 요청에 여러 개의 정보를 입력해야 하는 상황이 종종 있습니다.
연관성 없는 각각의 정보를 입력할 때는 별 수 없이 각 정보의 입력/수정에 해당하는 쿼리를 실행해야합니다.
하지만 동일한 구조의 데이터들을 하나의 관계형 데이터베이스 데이블에 입력/수정 할 때에는 여러번의 쿼리 실행은 소모적인 방법이 될 수있습니다.
설명에 앞서 이 글은 SQL문을 작성법 대해 집중하기 위해서 Mybatis 설정에 관한 내용은 생략하겠습니다.
아래 설명을 테스트한 환경은 전자정부 3.7이고 Mybatis의 mapper interface 방식을 사용했습니다.
1. XML 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.tistory.khanorder.mapper.StuddentMapper">
<insert id="batchInsert" parameterType="list">
insert into `student_tb`
(`grade`, `classroom_num`, `age`, `name`, `sex`)
values
<foreach item="item" index="index" collection="list">
<if test="index > 0">,</if>
(#{ item.grade }, #{ item.classroom_num }, #{ item.age }, #{ item.name }, #{ item.sex })
</foreach>;
</insert>
</mapper>
2. Controller
package com.tistory.khanorder.web;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import com.tistory.khanorder.domain.StudentVO;
import com.tistory.khanorder.service.StudentService;
@Controller
public class Student {
@Autowired
StudentService stdntService;
@RequestMapping(value = "/student/process.do")
public String utilVsSql(HttpServletRequest req, ModelMap model) {
List<studentvo> list = new ArrayList<studentvo>();
list.add(new StudentVO(1, 1, 17, "김희철", "M"));
list.add(new StudentVO(1, 1, 17, "박세영", "F"));
list.add(new StudentVO(1, 2, 17, "민경훈", "M"));
list.add(new StudentVO(1, 3, 18, "보아", "F"));
list.add(new StudentVO(2, 1, 18, "김영철", "M"));
list.add(new StudentVO(2, 2, 18, "이상민", "M"));
list.add(new StudentVO(2, 3, 18, "이수근", "M"));
list.add(new StudentVO(2, 3, 18, "김희선", "F"));
list.add(new StudentVO(3, 1, 19, "서장훈", "M"));
list.add(new StudentVO(3, 2, 19, "강호동", "M"));
Integer result = stdntService.batchInsert(list);
String message = "";
if (result > 0) {
message = "성공";
} else {
message = "실패";
}
model.addAttribute("message", message);
// 뷰페이지는 각자 상황에 맞게 처리해준다.
return "result";
}
}
3. Service
package com.tistory.khanorder.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.tistory.khanorder.domain.StudentVO;
import com.tistory.khanorder.mapper.StudentMapper;
@Service
public class StudentService {
@Autowired
private StudentMapper stdntMapper;
public Integer BatchInsert(List<studentvo> list) {
Integer result = 0;
try {
result = stdntMapper.batchInsert(list);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
4. Mapper
package com.tistory.khanorder.mapper;
import java.util.List;
import com.tistory.khanorder.domain.StudentVO;
import egovframework.rte.psl.dataaccess.mapper.Mapper;
@Mapper
public interface StudentMapper {
public Integer batchInsert(List<studentvo> list) throws Exception;
}
5. Domain
package com.tistory.khanorder.domain;
public class StudentVO {
private Integer uid;
private Integer grade;
private Integer classroom_num;
private Integer age;
private String name;
private String sex;
public StudentVO(Integer grade, Integer classroom_num, Integer age, String name, String sex) {
this.grade = grade;
this.classroom_num = classroom_num;
this.age = age;
this.name = name;
this.sex = sex;
}
public Integer getUid() {
return uid;
}
public Integer getGrade() {
return grade;
}
public Integer getClassroom_num() {
return classroom_num;
}
public Integer getAge() {
return age;
}
public String getName() {
return name;
}
public String getSex() {
return sex;
}
@Override
public String toString() {
return "StudentVO [uid=" + uid + ", grade=" + grade + ", classroom_num=" + classroom_num + ", age=" + age + ", name=" + name + ", sex=" + sex + "]";
}
}
도움이 되셨다면 공감이나 좋아요 부탁드립니다~♡
광고를 클릭해주시면 더욱 감사하구요~♡v♡/
혹시 더 궁금하신 점이나 부족한 부분, 잘못된 내용이 있다면 댓글 부탁드립니다~~
'Programming Language > Java' 카테고리의 다른 글
| [Java] void 형의 메서드를 종료하는 방법 (0) | 2019.03.07 |
|---|---|
| [Java] 문자열(String)을 파일로 저장하기 (0) | 2019.03.07 |
| [Java] Date객체 문자열(String) 변환 (0) | 2019.03.05 |
| [Java] 배열객체(String[]) List, ArrayList 변환 (0) | 2019.03.05 |
| [Java] List 객체를 ArrayList 객체로 변환 (0) | 2019.02.21 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- Java
- .NET Core
- egoverment
- jQuery
- Linux
- Eclipse
- high1
- DART
- Flutter
- egov
- asp.net core
- Windows
- eGovFrame
- 하이원
- 이클립스
- 스프링
- Entity Framework Core
- ubuntu
- dotnet core
- MariaDB
- c#
- 자바
- 전자정부
- Fedora
- CentOS
- MySQL
- express
- JSP
- Spring
- php
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
글 보관함