** π 3.1λ¨κ³: INSERT ꡬ문 μμ± β νμ λ±λ‘ κΈ°λ₯ μ€μ΅ **
(π StudentMapper1.xml + DTO: main.Student
κΈ°λ°)
π― νμ΅ λͺ©ν
νλͺ© |
μ€λͺ
|
λͺ©μ |
μλ‘μ΄ νμ μ 보λ₯Ό DBμ INSERT νκΈ° |
μ£Όμ ν¬μΈνΈ |
parameterType , insert , commit() |
μ μ 쑰건 |
Student ν΄λμ€μ νλμ DB 컬λΌλͺ
μ΄ μΌμΉν΄μΌ ν¨ |
β
1. DTO ν΄λμ€ κ΅¬μ‘° (main.Student.java
κΈ°μ€)
public class Student {
private int hakbun;
private String irum;
private String hakgwa;
private String addr;
private String phone;
private String jumin;
private int grade;
// + Getter / Setter ν¬ν¨
}
β
2. INSERT SQL μμ± (π StudentMapper1.xmlμ μΆκ°)
<insert id="insertStudent" parameterType="main.Student">
INSERT INTO student
(hakbun, irum, hakgwa, addr, phone, jumin, grade)
VALUES
(#{hakbun}, #{irum}, #{hakgwa}, #{addr}, #{phone}, #{jumin}, #{grade})
</insert>
νλͺ© |
μ€λͺ
|
id="insertStudent" |
Javaμμ νΈμΆν SQL ID |
parameterType="main.Student" |
DTO κ°μ²΄ μ 체λ₯Ό λκΉ |
#{νλλͺ
} |
DTOμ νλλͺ
κ³Ό 100% μΌμΉν΄μΌ ν¨ |
β
3. Java νΈμΆ μ½λ μμ
Student s = new Student();
s.setHakbun(2025); // νλ²
s.setIrum("μ λ€μ΄"); // μ΄λ¦
s.setHakgwa("μ»΄ν¨ν°κ³΅νκ³Ό"); // νκ³Ό
s.setAddr("μμΈμ λ§ν¬κ΅¬"); // μ£Όμ
s.setPhone("010-1234-5678"); // μ νλ²νΈ
s.setJumin("010101-4123456"); // μ£Όλ―Όλ²νΈ
s.setGrade(3); // νλ
int result = session.insert("student.insertStudent", s);
session.commit(); // νμ!
System.out.println("νμ λ±λ‘ κ²°κ³Ό: " + result);
β
SQL λ‘κ·Έ μΆλ ₯ μμ (log4j μ€μ μ)
==> Preparing: INSERT INTO student (hakbun, irum, hakgwa, addr, phone, jumin, grade) VALUES (?, ?, ?, ?, ?, ?, ?)
==> Parameters: 2025(Integer), μ λ€μ΄(String), μ»΄ν¨ν°κ³΅νκ³Ό(String), ...
β
4. μ€μ΅ 체ν¬λ¦¬μ€νΈ
νλͺ© |
μ€λͺ
|
νμΈ |
DTOμ νλλͺ
μ΄ DB 컬λΌλͺ
κ³Ό μ νν μΌμΉνλκ° |
hakbun , irum λ± |
β
|
parameterTypeμ΄ main.Student λ‘ μ§μ λμλκ° |
κ²½λ‘ μ νν μ
λ ₯ |
β
|
SQL INSERT κ΅¬λ¬Έμ΄ μ ννκ² μμ±λμλκ° |
μ»¬λΌ μ == κ° μ |
β
|
session.commit() νΈμΆμ΄ μλκ° |
μλ΅ μ DB λ°μ μ λ¨ |
β
|
μ½μ λ‘κ·Έμ INSERT μΏΌλ¦¬κ° μΆλ ₯λλκ° |
log4j μ€μ νμ |
β
|
β
DB λ°μ νμΈ μΏΌλ¦¬ (MariaDB)
SELECT * FROM student WHERE hakbun = 2025;
β
μ€λ¬΄ νμ₯ ν¬μΈνΈ
ν¬μΈνΈ |
μ€λͺ
|
μ€λ³΅ νλ² λ°©μ§ |
hakbun μ UNIQUE μ μ½ μ‘°κ±΄ κ±ΈκΈ° |
κΈ°λ³Έ ν€ μλ μμ± |
auto_increment μ»¬λΌ μ€μ + useGeneratedKeys="true" μ¬μ© |
μ
λ ₯ μ ν¨μ± κ²μ¬ |
Java λ¨μμ null, 곡백, νμ κ²μ¬ λ± μ¬μ μ²λ¦¬ νμ |
β
3.2λ¨κ³: UPDATE ꡬ문 β νλ
μμ , μ νλ²νΈ μμ κΈ°λ₯ μ€μ΅
(π StudentMapper1.xml + DTO: main.Student
κΈ°λ°)
π― νμ΅ λͺ©ν
νλͺ© |
μ€λͺ
|
λͺ©μ |
κΈ°μ‘΄ νμ λ°μ΄ν°μ grade , phone κ°μ μμ |
μ£Όμ ν€μλ |
update , parameterType , #{} μ¬μ©, commit() |
μ μ 쑰건 |
μμ κΈ°μ€ μ»¬λΌ (hakbun )μ΄ WHERE μ μ μ‘΄μ¬ν΄μΌ ν¨ |
β
1. UPDATE SQL μμ± β hakbun
κΈ°μ€μΌλ‘ νλ
κ³Ό μ νλ²νΈ μμ
π§ λ§€νΌ XML (StudentMapper1.xml
μ μΆκ°)
<update id="updateStudentGradeAndPhone" parameterType="main.Student">
UPDATE student
SET grade = #{grade},
phone = #{phone}
WHERE hakbun = #{hakbun}
</update>
νλͺ© |
μ€λͺ
|
id="updateStudentGradeAndPhone" |
Javaμμ νΈμΆ μ μ¬μ©λ ID |
parameterType="main.Student" |
DTO μ 체 μ λ¬ |
WHERE hakbun = #{hakbun} |
μμ λμ μλ³ κΈ°μ€ |
SET grade = #{grade} |
μμ ν λ΄μ© μ μ |
β
2. Java νΈμΆ μ½λ μμ
Student s = new Student();
s.setHakbun(2025); // νλ²μΌλ‘ λμ νμ μ§μ
s.setGrade(4); // νλ
μμ
s.setPhone("010-9999-8888"); // μ νλ²νΈ μμ
int result = session.update("student.updateStudentGradeAndPhone", s);
session.commit(); // λ°λμ 컀λ°ν΄μΌ μ€μ λ°μλ¨
System.out.println("μμ λ νμ μ: " + result);
β
3. λ‘κ·Έ μΆλ ₯ μμ (log4j μ€μ μ)
==> Preparing: UPDATE student SET grade = ?, phone = ? WHERE hakbun = ?
==> Parameters: 4(Integer), 010-9999-8888(String), 2025(Integer)
β
4. DB κ²°κ³Ό νμΈ μΏΌλ¦¬
SELECT * FROM student WHERE hakbun = 2025;
κΈ°λ κ²°κ³Ό |
λ³κ²½ νμΈ ν¬μΈνΈ |
grade = 4 |
νλ
μμ λ¨ |
phone = β010-9999-8888β |
μ νλ²νΈ μμ λ¨ |
β
μ€μ΅ 체ν¬λ¦¬μ€νΈ
νλͺ© |
μ€λͺ
|
νμΈ |
WHERE μ μ΄ λλ½λμ§ μμλκ°? |
hakbun κΈ°μ€ νμ |
β
|
DTO νλλͺ
κ³Ό SQLμ #{} μ΄λ¦μ΄ μΌμΉνλκ°? |
phone , grade , hakbun |
β
|
session.commit() μ΄ μλκ°? |
μμΌλ©΄ rollback λ¨ |
β
|
λ‘κ·Έ μΆλ ₯μΌλ‘ μ€μ 쿼리 νμΈνλκ°? |
log4j μ€μ νμ |
β
|
β
μ€λ¬΄ ν
ν¬μΈνΈ |
μ€λͺ
|
쑰건 μμ΄ UPDATE μ μ£Όμ |
WHERE λλ½ μ μ 체 λ°μ΄ν° μμ λ μ μμ |
νλΌλ―Έν° νλλ§ μμ νκ³ μΆμ λ |
if , trim μΌλ‘ λμ SQL μμ± νμ |
update() λ°νκ° |
μμ λ ν μ (0μ΄λ©΄ λμ μμ) |
β
νμ₯ μ€μ΅ μμ΄λμ΄
- μ΄λ¦μΌλ‘ μ°Ύκ³ μ£Όμ λ³κ²½
- μ£Όλ―Όλ²νΈ κΈ°μ€μΌλ‘ νκ³Ό λ³κ²½
if
쑰건μΌλ‘ μ νλ²νΈλ§ μμ λλ§ μμ νλ λ²μ
β
3.3λ¨κ³: DELETE ꡬ문 β νΉμ νμ μμ κΈ°λ₯ μ€μ΅
(π StudentMapper1.xml
+ DTO: main.Student
κΈ°λ°)
π― νμ΅ λͺ©ν
νλͺ© |
μ€λͺ
|
λͺ©μ |
νΉμ νλ²(hakbun )μ νμ λ°μ΄ν°λ₯Ό μμ |
ν΅μ¬ κ°λ
|
delete , parameterType , #{} , commit() |
μ μ 쑰건 |
hakbun μ WHERE μ μμ λ°λμ 쑰건μΌλ‘ μ¬μ©λμ΄μΌ ν¨ |
β
1. DELETE SQL μμ± β νλ² κΈ°μ€ μμ
π§ λ§€νΌ XML (StudentMapper1.xml
μ μΆκ°)
<delete id="deleteStudentByHakbun" parameterType="int">
DELETE FROM student
WHERE hakbun = #{hakbun}
</delete>
μμ± |
μ€λͺ
|
id |
"deleteStudentByHakbun" β Javaμμ νΈμΆν 쿼리 μλ³μ |
parameterType |
int β λ¨μΌ νλ²(hakbun) κ° μ λ¬ |
#{hakbun} |
μμ κΈ°μ€μΌλ‘ μ λ¬λ°μ νλ²μ΄ λ€μ΄κ° |
β
2. Java νΈμΆ μ½λ μμ
int hakbun = 2025; // μμ λμ νλ²
int result = session.delete("student.deleteStudentByHakbun", hakbun);
session.commit(); // νμ! delete ν commit μ νλ©΄ rollback λ¨
System.out.println("μμ λ νμ μ: " + result);
β
3. λ‘κ·Έ μΆλ ₯ μμ (log4j μ€μ μ)
==> Preparing: DELETE FROM student WHERE hakbun = ?
==> Parameters: 2025(Integer)
β
4. DB μμ νμΈ μΏΌλ¦¬
SELECT * FROM student WHERE hakbun = 2025;
(κ²°κ³Ό μμ) β μ μ μμ
β
μ€μ΅ 체ν¬λ¦¬μ€νΈ
νλͺ© |
μ€λͺ
|
μ²΄ν¬ |
WHERE μ μ hakbun μ΄ μ νν λ€μ΄κ°λκ° |
μ 체 μμ λ°©μ§ |
β
|
parameterType="int" κ° μ¬λ°λ₯΄κ² μ€μ λμλκ° |
hakbun κ° μ λ¬ |
β
|
#{} λ΄λΆ μ΄λ¦μ΄ Java λ³μλͺ
κ³Ό μΌμΉνλκ° |
hakbun |
β
|
session.commit() νΈμΆ μ¬λΆ |
DB λ°μ |
β
|
λ‘κ·Έ μΆλ ₯μμ DELETE 쿼리 νμΈ μ¬λΆ |
log4j μ€μ νμ |
β
|
β
μ€λ¬΄ ν
νλͺ© |
μ€λͺ
|
WHERE 쑰건 μμ κ²½μ° |
μ 체 ν
μ΄λΈ λ°μ΄ν° μμ λ¨ β λ§€μ° μν! |
μμ μ μ ν¨μ± κ²μ¬ |
μ‘΄μ¬νμ§ μλ νλ²μΌ κ²½μ° μ¬μ©μμκ² μλ¦Ό νμ |
λ°νκ° μ²λ¦¬ |
0 μ΄λ©΄ μμ λμμ΄ μμ β λ©μμ§ μΆλ ₯ νμ |
β
νμ₯ μ€μ΅ μμ΄λμ΄
- μ΄λ¦μΌλ‘ μμ :
irum = #{irum}
(λ¨, μ€λ³΅ κ°λ₯μ± μ£Όμ)
- μ£Όλ―Όλ²νΈ κΈ°μ€ μμ :
jumin = #{jumin}
(κ³ μ μλ³ κ°λ₯)
WHERE hakbun IN (...)
μ νμ©ν λ€μ€ μμ (foreach
μ μ©μ 3.4λ¨κ³)
β
3.4λ¨κ³: νΈλμμ
μ²λ¦¬ μ€μ΅
(π Test1_A.java
λλ 컨νΈλ‘€λ¬ ν΄λμ€ + StudentMapper1.xml
κΈ°λ°)
π― νμ΅ λͺ©ν
νλͺ© |
μ€λͺ
|
λͺ©μ |
commit() κ³Ό rollback() μ νμ©ν νΈλμμ
κ°λ
μ΄ν΄ |
ν΅μ¬ ν€μλ |
νΈλμμ
, μμΈ μ²λ¦¬, μλ 컀λ°, μλ λ‘€λ°± |
μ€μ΅ |
INSERT β UPDATE λμ€ μμΈ λ°μ μ, μ 체 μ·¨μ νμΈ |
β
1. νΈλμμ
μ΄λ?
λ°μ΄ν°λ² μ΄μ€μμ νλμ μμ
λ¨μλ‘ μ²λ¦¬λμ΄μΌ νλ μ°μ° μ§ν©
μ¦, βλͺ¨λ μ±κ³΅ or λͺ¨λ μ€ν¨βκ° λμ΄μΌ ν¨.
β
2. κΈ°λ³Έ νΈλμμ
ꡬ쑰 (MyBatisμ SqlSession
μλ μ²λ¦¬)
SqlSession session = factory.openSession(); // autoCommit = false
try {
session.insert(...); // 1λ¨κ³
session.update(...); // 2λ¨κ³
session.commit(); // β
λͺ¨λ μ±κ³΅ μ 컀λ°
} catch (Exception e) {
session.rollback(); // β μ€ν¨ λ°μ μ λ‘€λ°±
e.printStackTrace();
} finally {
session.close();
}
β
3. μ€μ μμ: INSERT + UPDATE μ€κ° μ€ν¨ β rollback()
π§ λ§€νΌ XML: κΈ°μ‘΄μ μμ±λ κ² νμ©
insertStudent
(π 3.1λ¨κ³)
updateStudentGradeAndPhone
(π 3.2λ¨κ³)
π§ Java νΈλμμ
μμ
SqlSession session = factory.openSession(); // μλ μ»€λ° β
try {
// 1. INSERT μ€ν
Student s = new Student();
s.setHakbun(2026);
s.setIrum("κΉλ―Όμ§");
s.setHakgwa("μ μ°νκ³Ό");
s.setAddr("λΆμ°");
s.setPhone("010-1111-1111");
s.setJumin("000101-4123456");
s.setGrade(1);
session.insert("student.insertStudent", s);
// 2. κ°μ λ‘ μμΈ λ°μ (null ν¬μΈνΈ λ±)
String test = null;
System.out.println(test.length()); // π₯ κ°μ μμΈ λ°μ
// 3. μ΄ μλλ μ€ν μ λ¨
s.setPhone("010-0000-0000");
session.update("student.updateStudentGradeAndPhone", s);
session.commit();
} catch (Exception e) {
session.rollback(); // β
λͺ¨λ μμ
λ‘€λ°±
System.out.println("β οΈ νΈλμμ
μ€ν¨, λ‘€λ°±λ¨: " + e.getMessage());
} finally {
session.close();
}
β
4. λ‘κ·Έ & DB μν νμΈ
νλͺ© |
κΈ°λ κ²°κ³Ό |
μ½μ λ‘κ·Έ |
rollback() λ°μ λ©μμ§ μΆλ ₯ |
DB μ‘°ν |
SELECT * FROM student WHERE hakbun = 2026 β κ²°κ³Ό μμ |
β
νΈλμμ
체ν¬λ¦¬μ€νΈ
νλͺ© |
μ€λͺ
|
νμΈ |
factory.openSession() μ μ»€λ° μλ΅νλκ° |
MyBatisλ κΈ°λ³Έμ μΌλ‘ autoCommit = false μνμμ μΈμ
μ μ΄κΈ° λλ¬Έμ, SQLμ μ€νν΄λ commit() νμ§ μμΌλ©΄ DBμ μ€μ λ‘ λ°μλμ§ μμ |
β
|
commit() μ μ μμΈ λ°μ μ rollback() μ²λ¦¬νλκ° |
SQL μ€ν λμ€ μμΈκ° λ°μνλ©΄ commit() μμ΄ λλλ―λ‘, λ°λμ catch λΈλ‘μμ session.rollback() νΈμΆν΄μ λ³κ²½ μλλ₯Ό μ·¨μν΄μΌ ν¨ |
β
|
DBμλ μ무 μμ
λ λ°μλμ§ μμλκ° |
commit() μ μ μμΈκ° λκ±°λ rollback() λ§ μ€νλμμ κ²½μ°, DBμλ μλ¬΄λ° INSERT/UPDATE/DELETE λ΄μ©μ΄ μ μ₯λμ§ μμμΌ μ μ |
β
|
λ‘κ·Έμ rollback κ΄λ ¨ λ‘κ·Έκ° μΆλ ₯λλκ° |
μμΈ λ°μ μ rollback() μ΄ μ λλ‘ μ€νλλ©΄, μ½μμ΄λ λ‘κ·ΈνμΌμ Rolling back JDBC Connection κ³Ό κ°μ λ¬Έκ΅¬κ° μΆλ ₯λ¨ |
β
|
π‘ μΆκ° μ€λͺ
: νΈλμμ
μ€ν¨ νλ¦ μμ
β
μ 리 μμ½
κ΅¬λΆ |
μ€λͺ
|
commit() |
λͺ¨λ μμ
μ΄ λ¬Έμ μμ λ λͺ
μμ μΌλ‘ μ€ν |
rollback() |
μμΈ λ°μ μ, μ΄μ μμ
κΉμ§ λͺ¨λ μ·¨μ |
finally { close(); } |
μμ ν΄μ νμ |
νΈλμμ
λ¨μ |
νλμ SqlSession λ΄μμ μνλλ μμ
μ§ν© |
π§ μ€λ¬΄ ν
νλͺ© |
μ€λͺ
|
μλ μ»€λ° μ¬μ© μ |
μμΈκ° λ°μν΄λ μ΄μ μμ
μ΄ λ°μλ¨ (μν) |
λ€λ¨κ³ μμ
μ |
λ°λμ μλ μ»€λ° λ°©μ μ¬μ© κΆμ₯ |
μΉ νκ²½μμλ |
μ€νλ§μμλ νΈλμμ
μ΄λ
Έν
μ΄μ
μΌλ‘ λ체 (@Transactional ) |