티스토리 뷰
[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
- jQuery
- 전자정부
- Entity Framework Core
- c#
- Windows
- 이클립스
- Linux
- express
- JSP
- Eclipse
- Flutter
- asp.net core
- egoverment
- MariaDB
- Java
- egov
- DART
- php
- MySQL
- eGovFrame
- high1
- 자바
- dotnet core
- Fedora
- CentOS
- ubuntu
- 스프링
- 하이원
- .NET Core
- Spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함