Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- jquery
- SQLite
- Spring
- WebClient
- bootstrap
- Apache
- 외국인 노동자
- Ajax
- build tool
- Java
- mybatis
- xml
- RSocket
- swift
- webflux
- Python
- php
- 개발자 이야기
- node.js
- 일본
- Eclipse
- spring boot
- SQL
- pdo
- JavaFX
- angularjs
- gradle
- javadoc
- maven
- Linux
- Today
- 123
- Total
- 3,697,220
슬기로운 개발자 생활
[MyBatis] 등록 INSERT 본문
반응형
데이터 등록인 INSERT에 대해서 알아본다.
기본
소스 코드
sample_mapper.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="sample.mybatis">
<insert id="insertTest">
insert into test_table (
value
) values (
#{value}
)
</insert>
</mapper>
Main.java
package sample.mybatis;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class Main {
public static void main(String[] args) throws Exception {
try (InputStream in = Main.class.getResourceAsStream("/mybatis-config.xml")) {
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
try (SqlSession session = factory.openSession()) {
session.insert("sample.mybatis.insertTest", "hoge");
session.commit();
}
}
}
}
실행 결과
[DEBUG] s.m.insertTest - ==> Preparing: insert into test_table ( value ) values ( ? )
[DEBUG] s.m.insertTest - ==> Parameters: hoge(String)
[DEBUG] s.m.insertTest - <== Updates: 1
test_table
id | value |
---|---|
1 | hoge |
설명
- <insert> 태그에서 INSERT 문을 정의할 수 있다.
- 대체로 <select> 때와 같은 방식으로 정의할 수 있다.
객체를 매개 변수로 전달
소소 코드
TestTable.java
package sample.mybatis;
public class TestTable {
private int id;
private String value;
public TestTable(String value) {
this.value = value;
}
@Override
public String toString() {
return "TestTable [id=" + id + ", value=" + value + "]";
}
}
Main.java
package sample.mybatis;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class Main {
public static void main(String[] args) throws Exception {
try (InputStream in = Main.class.getResourceAsStream("/mybatis-config.xml")) {
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
try (SqlSession session = factory.openSession()) {
TestTable table = new TestTable("fuga");
session.insert("sample.mybatis.insertTest", table);
session.commit();
}
}
}
}
실행 결과
[DEBUG] s.m.insertTest - ==> Preparing: insert into test_table ( value ) values ( ? )
[DEBUG] s.m.insertTest - ==> Parameters: fuga(String)
[DEBUG] s.m.insertTest - <== Updates: 1
test_table
id | value |
---|---|
1 | hoge |
2 | fuga |
설명
- 이쪽도 <select> 때와 같은 방식이다.
- parameterType은 생략 가능하다.
자동 생성된 키값 얻기
소스 코드
sample_mapper.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="sample.mybatis">
<insert id="insertTest" useGeneratedKeys="true" keyProperty="id">
insert into test_table (
value
) values (
#{value}
)
</insert>
</mapper>
Main.java
package sample.mybatis;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class Main {
public static void main(String[] args) throws Exception {
try (InputStream in = Main.class.getResourceAsStream("/mybatis-config.xml")) {
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
try (SqlSession session = factory.openSession()) {
TestTable table = new TestTable("piyo");
session.insert("sample.mybatis.insertTest", table);
session.commit();
System.out.println(table);
}
}
}
}
실행 결과
[DEBUG] s.m.insertTest - ==> Preparing: insert into test_table ( value ) values ( ? )
[DEBUG] s.m.insertTest - ==> Parameters: fuga(String)
[DEBUG] s.m.insertTest - <== Updates: 1
TestTable [id=7, value=piyo]
test_table
id | value |
---|---|
7 | piyo |
설명
- <insert> 태그에 useGeneratedKeys과 keyProperty를 지정한다.
- useGeneratedKeys는 true를 지정한다.
- keyProperty에 키 값을 설정하는 Java 측의 필드(속성) 이름을 지정한다.
- 그러면 INSERT시에 데이터베이스에서 생성된 ID가 자동으로 Java의 인스턴스에 set 설정된다.
Oracle 시퀀스 오브젝트의 경우
ID를 시퀀스 객체로 부터 취득하는 경우는 다음과 같이 한다.
sample_mapper.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="sample.mybatis">
<insert id="insertTest">
<selectKey keyProperty="id" resultType="_int" order="BEFORE">
select test_table_seq.nextval
from dual
</selectKey>
insert into test_table (
id
,value
) values (
#{id}
,#{value}
)
</insert>
</mapper>
실행 결과
[DEBUG] s.m.insertTest!selectKey - ==> Preparing: select test_table_seq.nextval from dual
[DEBUG] s.m.insertTest!selectKey - ==> Parameters:
[DEBUG] s.m.insertTest!selectKey - <== Total: 1
[DEBUG] s.m.insertTest - ==> Preparing: insert into test_table ( id ,value ) values ( ? ,? )
[DEBUG] s.m.insertTest - ==> Parameters: 11(Integer), aaa(String)
[DEBUG] s.m.insertTest - <== Updates: 1
TestTable [id=11, value=aaa]
확인
SQL> select * from test_table;
ID VALUE
---------- -----
11 aaa
설명
- <insert> 태그안에 <selectKey> 태그를 선언한다.
- keyProperty 속성에서 생성된 ID를 설정하는 Java 필드(속성) 이름을 지정한다.
- order 속성에 BEFORE를 설정하여 우선 순서에서 값을 검색한 후에 INSERT가 실행되게 된다.
반응형
'IT 개발 > MyBatis' 카테고리의 다른 글
[MyBatis] 삭제 DELETE (0) | 2017.12.31 |
---|---|
[MyBatis] 변경 UPDATE (0) | 2017.12.31 |
[MyBatis] 검색 결과를 임의의 Java 오브젝트에 매핑 (0) | 2017.12.31 |
[MyBatis] 검색 SELECT (0) | 2017.12.31 |
[MyBatis] 실행되는 SQL을 로그에 출력 (0) | 2017.12.31 |
- Tag
- mybatis
1 Comments