** ๐5.1๋จ๊ณ: DAO ํด๋์ค ์ค๊ณ โ StudentDao ๋ถ๋ฆฌ ๊ตฌ์กฐ **
(๐ StudentDao.java
, StudentMapper1.xml
, main.Student
๊ธฐ๋ฐ)
๐ฏ ํ์ต ๋ชฉํ
ํญ๋ชฉ |
์ค๋ช
|
๋ชฉ์ |
DB ์ ๊ทผ ๋ก์ง์ DAO ํด๋์ค๋ก ๋ถ๋ฆฌ |
๊ตฌ์กฐ ๋ณํ |
SqlSession ์ฝ๋ โ DAO ๋ด๋ถ๋ก ์ด๋ |
๊ธฐ๋ ํจ๊ณผ |
๋น์ฆ๋์ค ๋ก์ง๊ณผ DB ๋ก์ง ๋ถ๋ฆฌ, ์ฌ์ฌ์ฉ์ฑ ํฅ์ |
โ
1. DAO ํด๋์ค ๊ธฐ๋ณธ ์ค๊ณ (StudentDao.java
)
package dao;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import main.Student;
public class StudentDao {
private static SqlSessionFactory factory;
static {
try {
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
factory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
public List<Student> selectAll() {
SqlSession session = factory.openSession();
List<Student> list = session.selectList("student.getAllStudents");
session.close();
return list;
}
public Student selectByHakbun(int hakbun) {
SqlSession session = factory.openSession();
Student result = session.selectOne("student.getStudentByHakbun", hakbun);
session.close();
return result;
}
public int insert(Student s) {
SqlSession session = factory.openSession();
int result = session.insert("student.insertStudent", s);
session.commit();
session.close();
return result;
}
public int update(Student s) {
SqlSession session = factory.openSession();
int result = session.update("student.updateStudentGradeAndPhone", s);
session.commit();
session.close();
return result;
}
public int delete(int hakbun) {
SqlSession session = factory.openSession();
int result = session.delete("student.deleteStudentByHakbun", hakbun);
session.commit();
session.close();
return result;
}
}
โ
2. Java ํธ์ถ ์ฝ๋์์ DAO ์ฌ์ฉํ๊ธฐ (Test1_A.java
๋๋ Controller)
StudentDao dao = new StudentDao();
List<Student> list = dao.selectAll();
for (Student s : list) {
System.out.println(s.getHakbun() + " / " + s.getIrum());
}
Student newS = new Student();
newS.setHakbun(2028);
newS.setIrum("์ก๋ค์ ");
newS.setHakgwa("์ํํธ์จ์ดํ๊ณผ");
int result = dao.insert(newS);
System.out.println("์ฝ์
๊ฒฐ๊ณผ: " + result);
โ
3. Mapper XML์ ์ถ๊ฐ๋์ด์ผ ํ ID๋ค
๊ธฐ๋ฅ |
ID |
์ค๋ช
|
์ ์ฒด ์กฐํ |
getAllStudents |
๊ธฐ์กด SELECT * |
ํ ๋ช
์กฐํ |
getStudentByHakbun |
WHERE hakbun = #{hakbun} |
์ฝ์
|
insertStudent |
๊ธฐ์กด INSERT ๋ฌธ |
์์ |
updateStudentGradeAndPhone |
๊ธฐ์กด UPDATE ๋ฌธ |
์ญ์ |
deleteStudentByHakbun |
๊ธฐ์กด DELETE ๋ฌธ |
โ
4. ์ค์ต ์ฒดํฌ๋ฆฌ์คํธ
ํญ๋ชฉ |
์ค๋ช
|
ํ์ธ |
DAO์ ๋ชจ๋ DB ์ ๊ทผ ์ฝ๋๊ฐ ๋ค์ด๊ฐ๋๊ฐ |
โ
|
ย |
์ธ๋ถ์์๋ StudentDao ๋ง ํธ์ถํ๋๊ฐ |
โ
|
ย |
SqlSession ์ DAO ๋ด๋ถ์์๋ง ์ด๊ณ ๋ซ๋๊ฐ |
โ
|
ย |
commit/rollback์ด ํ์ํ ๋ฉ์๋์๋ง commit์ด ํฌํจ๋์ด ์๋๊ฐ |
โ
|
ย |
โ
์ค๋ฌด ํ
ํญ๋ชฉ |
์ค๋ช
|
SqlSessionFactory ๋ static ๋ธ๋ก์ผ๋ก ํ ๋ฒ๋ง ์ด๊ธฐํ |
์ฑ๋ฅ๊ณผ ์์ ์ฑ ํฅ์ |
DAO๋ ๋น์ฆ๋์ค ๊ณ์ธต(์๋น์ค)๋ณด๋ค ํ๋จ์ ๋ฐฐ์น |
๋ช
ํํ ๊ณ์ธตํ |
์์ธ ์ฒ๋ฆฌ ์ try-catch-finally ๋๋ try-with-resources ์ฌ์ฉ ๊ถ์ฅ |
์ค๋ฅ ์ ํ ๋ฐฉ์ง |
โ
๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ ์์ (MVC ์คํ์ผ)
๐ main
โฃ ๐ Student.java
๐ dao
โฃ ๐ StudentDao.java
๐ mapper
โฃ ๐ StudentMapper1.xml
๐ service (์ ํ)
โฃ ๐ StudentService.java
๐ controller
โฃ ๐ Test1_A.java (๋๋ ์๋ธ๋ฆฟ)
โ
5.2๋จ๊ณ: DTO ํด๋์ค ์ค๊ณ โ Student.java ํ๋ ๊ตฌ์กฐ ์ ๋ฆฌ
(๐ main.Student
๊ธฐ์ค, DB ํ
์ด๋ธ ์ปฌ๋ผ๊ณผ ๋งคํ)
๐ฏ ํ์ต ๋ชฉํ
ํญ๋ชฉ |
์ค๋ช
|
๋ชฉ์ |
DB์ ์ปฌ๋ผ ๊ตฌ์กฐ์ 1:1 ๋งคํ๋๋ DTO(Data Transfer Object)๋ฅผ ์ค๊ณ |
์ฃผ์ ํฌ์ธํธ |
ํ๋ ์ ๋ ฌ, ์ ๊ทผ ์ ์ด, ์์ฑ์, getter/setter, toString |
๊ธฐ๋ ํจ๊ณผ |
์ฝ๋ ๊ฐ๋
์ฑ ํฅ์ + MyBatis ๋งคํ ์ผ๊ด์ฑ ์ ์ง |
โ
1. DB ํ
์ด๋ธ ๊ตฌ์กฐ ๊ธฐ๋ฐ ์ค๊ณ ๊ฐ์
CREATE TABLE student (
hakbun INT PRIMARY KEY,
irum VARCHAR(50),
hakgwa VARCHAR(50),
addr VARCHAR(100),
phone VARCHAR(20),
jumin VARCHAR(20),
grade INT
);
โ
2. DTO ํด๋์ค ์ ๋ฆฌ (Student.java
)
package main;
public class Student {
private int hakbun; // ํ๋ฒ
private String irum; // ์ด๋ฆ
private String hakgwa; // ํ๊ณผ
private String addr; // ์ฃผ์
private String phone; // ์ ํ๋ฒํธ
private String jumin; // ์ฃผ๋ฏผ๋ฒํธ
private int grade; // ํ๋
// โ
๊ธฐ๋ณธ ์์ฑ์
public Student() {}
// โ
์ ์ฒด ํ๋ ์์ฑ์ (์ ํ์ )
public Student(int hakbun, String irum, String hakgwa, String addr,
String phone, String jumin, int grade) {
this.hakbun = hakbun;
this.irum = irum;
this.hakgwa = hakgwa;
this.addr = addr;
this.phone = phone;
this.jumin = jumin;
this.grade = grade;
}
// โ
Getter/Setter
public int getHakbun() { return hakbun; }
public void setHakbun(int hakbun) { this.hakbun = hakbun; }
public String getIrum() { return irum; }
public void setIrum(String irum) { this.irum = irum; }
public String getHakgwa() { return hakgwa; }
public void setHakgwa(String hakgwa) { this.hakgwa = hakgwa; }
public String getAddr() { return addr; }
public void setAddr(String addr) { this.addr = addr; }
public String getPhone() { return phone; }
public void setPhone(String phone) { this.phone = phone; }
public String getJumin() { return jumin; }
public void setJumin(String jumin) { this.jumin = jumin; }
public int getGrade() { return grade; }
public void setGrade(int grade) { this.grade = grade; }
// โ
๋๋ฒ๊น
์ฉ toString()
@Override
public String toString() {
return "Student [hakbun=" + hakbun + ", irum=" + irum +
", hakgwa=" + hakgwa + ", addr=" + addr +
", phone=" + phone + ", jumin=" + jumin +
", grade=" + grade + "]";
}
}
โ
3. ์ค๊ณ ์์น ์์ฝ
์์น |
์ค๋ช
|
ํ๋๋ช
= ์ปฌ๋ผ๋ช
|
MyBatis ์๋ ๋งคํ์ ์ํด ์ ํํ ์ผ์น์ํด |
์ ๊ทผ ์ ํ์ |
ํ๋๋ private , ๋ฉ์๋๋ public |
๊ธฐ๋ณธ ์์ฑ์ |
ํ์ (MyBatis ๋ด๋ถ ๊ฐ์ฒด ์์ฑ์ฉ) |
์ ์ฒด ์์ฑ์ |
์ ํ (ํ
์คํธ, ํธ์์ฉ) |
toString() |
๋๋ฒ๊น
/๋ก๊น
์ฉ๋๋ก ์ ์ฉ |
โ
4. ์ค์ต ์ฒดํฌ๋ฆฌ์คํธ
ํญ๋ชฉ |
์ค๋ช
|
ํ์ธ |
DB ์ปฌ๋ผ๋ช
๊ณผ ํ๋๋ช
์ด ์ ํํ ์ผ์นํ๋๊ฐ |
โ
|
ย |
getter/setter ๊ฐ ๋ชจ๋ ๊ตฌํ๋์ด ์๋๊ฐ |
โ
|
ย |
๊ธฐ๋ณธ ์์ฑ์๊ฐ ์กด์ฌํ๋๊ฐ |
โ
|
ย |
์ค์๋ก public ํ๋๊ฐ ์กด์ฌํ์ง ์๋๊ฐ |
โ
|
ย |
โ
์ค๋ฌด ํ
ํญ๋ชฉ |
์ค๋ช
|
Lombok ์ฌ์ฉ ์ |
@Getter , @Setter , @NoArgsConstructor , @ToString ๊ฐ๋ฅ |
์ด๋ฆ์ด ๋ค๋ฅผ ๊ฒฝ์ฐ |
๋งคํผ์์ <resultMap> ์ ์ฌ์ฉํด์ผ ํจ |
๋ค๋ฅธ ํ
์ด๋ธ๊ณผ ์กฐ์ธํ ๊ฒฝ์ฐ |
์๋ธ DTO ๋๋ Join DTO๋ฅผ ๋ณ๋ ์์ฑ |
โ
ํ์ฅ ์ค์ต ์์
๋ชฉ์ |
ํด๋์ค |
JOIN ๊ฒฐ๊ณผ์ฉ |
StudentWithDeptDTO ์์ฑ ๊ฐ๋ฅ |
๊ฒ์ ์ ์ฉ ์กฐ๊ฑด DTO |
StudentSearchDTO ๋ก ๋ฐ๋ก ๋ถ๋ฆฌ |
์
๋ ฅ/์ถ๋ ฅ์ด ๋ค๋ฅผ ๊ฒฝ์ฐ |
StudentInsertDTO , StudentViewDTO ๋ฑ ์ญํ ๋ถ๋ฆฌ ๊ฐ๋ฅ |
โ
5.3๋จ๊ณ: DAO + DTO + Mapper ์์ ๋ถ๋ฆฌ ์ค์ต
(๐ main/
, dao/
, mapper/
๊ธฐ์ค)
๐ฏ ํ์ต ๋ชฉํ
ํญ๋ชฉ |
์ค๋ช
|
๋ชฉ์ |
๊ฐ ๊ณ์ธต์ ์ฑ
์(R) ๋ถ๋ฆฌํ์ฌ ์ฝ๋ ์ ์ง๋ณด์์ฑ ํฅ์ |
ํต์ฌ |
DTO โ Mapper XML โ DAO โ Controller/JSP |
๊ธฐ๋ ํจ๊ณผ |
๊ธฐ๋ฅ ์ถ๊ฐ, ํ๋ ๋ณ๊ฒฝ, ์ฟผ๋ฆฌ ๋ณ๊ฒฝ ์ ์ต์ ์์ ๊ตฌ์กฐ ํ๋ณด |
โ
1. ์ํคํ
์ฒ ์ ๋ฆฌ (MVC + MyBatis ๋ ์ด์ด ๋ถ๋ฆฌ)
๐ main/Student.java โ DTO (VO, Bean ์ญํ )
๐ dao/StudentDao.java โ DB ์ ๊ทผ ์ ์ฉ DAO ๊ณ์ธต
๐ mapper/StudentMapper1.xml โ SQL๋ง ๋ด๋นํ๋ Mapper XML
๐ controller/Test1_A.java โ ํธ์ถ/์
์ถ๋ ฅ ์ฒ๋ฆฌ (ํฅํ JSP ๋๋ Servlet)
โ
2. ์ญํ ๋ถ๋ฆฌ์ ํต์ฌ ์์น
๊ตฌ์ฑ ์์ |
์ฑ
์๊ณผ ์ญํ |
DTO (Student ) |
DB ์ปฌ๋ผ โ Java ํ๋ ๊ฐ ๋ฐ์ดํฐ ์ ๋ฌ ๊ฐ์ฒด |
Mapper XML |
SQL๋ง ์ ์ธ (select , insert , update , delete ) |
DAO ํด๋์ค |
Mapper ํธ์ถ์ ํตํด DB ์ก์ธ์ค ์ถ์ํ |
Controller |
์์ฒญ ํ๋ฆ ์ ์ด, ์๋น์ค ํธ์ถ (JSP ์ฐ๊ณ ํฌํจ ์ View ์ฐ๊ฒฐ) |
โ
3. ๊ตฌ์กฐ ๊ตฌํ ํ๋ฆ (์: ํ์ ๋ฑ๋ก)
๐ธ 1) DTO: Student.java
โ ์ด์ 5.2๋จ๊ณ ์ค๊ณ ์๋ฃ๋ DTO ์ฌ์ฉ
๐ธ 2) Mapper: StudentMapper1.xml
์ SQL ์ ์
<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>
๐ธ 3) DAO: StudentDao.java
public int insert(Student s) {
SqlSession session = factory.openSession();
int result = session.insert("student.insertStudent", s);
session.commit();
session.close();
return result;
}
๐ธ 4) Controller or ํธ์ถ๋ถ: Test1_A.java
Student s = new Student(2029, "์ฅ์์ง", "์ํํธ์จ์ดํ๊ณผ", "์์ธ", "010-1111-2222", "010101-4123456", 2);
StudentDao dao = new StudentDao();
int result = dao.insert(s);
System.out.println("ํ์ ๋ฑ๋ก ๊ฒฐ๊ณผ: " + result);
โ
4. ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ์ ๊ณ ๋ คํ ์ค๊ณ ํฌ์ธํธ
ํญ๋ชฉ |
์ค๋ฌด ๊ธฐ์ค ํฌ์ธํธ |
SQL๋ง ๋ฐ๋ ๋ |
Mapper XML ๋ง ์์ โ ๋๋จธ์ง ์ํฅ ์์ |
ํ๋ ์ถ๊ฐ/์ญ์ |
DTO โ Mapper XML๋ง ์์ โ DAO ์ฌ์ฌ์ฉ |
DAO ๊ณตํตํ |
BaseDao ์์ or ์ธํฐํ์ด์ค ์ ์ฉ ๊ฐ๋ฅ |
ํ
์คํธ ๊ฐ๋ฅ์ฑ |
DAO ๋จ์ ํ
์คํธ, Controller ๊ธฐ๋ฅ ํ
์คํธ ๋ถ๋ฆฌ ๊ฐ๋ฅ |
โ
5. ์ค์ต ์ฒดํฌ๋ฆฌ์คํธ
ํญ๋ชฉ |
์ค๋ช
|
ํ์ธ |
DTO, DAO, Mapper XML์ด ๊ฐ๊ฐ ํ์ผ๋ก ๋ถ๋ฆฌ๋์ด ์๋๊ฐ |
โ
|
ย |
๊ฐ ๊ณ์ธต์ ์ฑ
์์ด ๋ช
ํํ ๊ตฌ๋ถ๋์๋๊ฐ |
โ
|
ย |
์ค๋ณต ์ฝ๋ ์์ด ๊ธฐ๋ฅ๋ณ๋ก๋ง ๊ตฌํ๋์๋๊ฐ |
โ
|
ย |
์ ์ฒด INSERT/SELECT ํ๋ฆ์ด ์ ์ ๋์ํ๋๊ฐ |
โ
|
ย |
โ
ํ์ฅ ์ค๊ณ ์์ (์ค๋ฌดํ ๊ตฌ์กฐ ํ์ฅ)
๊ธฐ๋ฅ |
ํ์ฅ ์ |
๊ฒ์ ์กฐ๊ฑด ์ ๋ฌ |
StudentSearchDTO ๋ฐ๋ก ๋ถ๋ฆฌ ํ ์ ๋ฌ |
View ์ ์ฉ DTO |
StudentViewDTO ์์ฑ (์: JOIN ๊ฒฐ๊ณผ์ฉ) |
DAO ์ธํฐํ์ด์คํ |
IStudentDao ์ธํฐํ์ด์ค + ๊ตฌํ์ฒด ๋ถ๋ฆฌ |
Service ๊ณ์ธต ๋์
|
StudentService ํด๋์ค ์ถ๊ฐํด ํธ๋์ญ์
/๋ก์ง ๋ถ๋ฆฌ ๊ฐ๋ฅ |
โ
๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ ์์ (์ค๋ฌด MVC ๋ถ๋ฆฌ ๊ตฌ์กฐ)
๐ฆ mybatisstudy
โฃ ๐ main
โ โ ๐ Student.java โ DTO
โฃ ๐ dao
โ โ ๐ StudentDao.java โ DAO
โฃ ๐ mapper
โ โ ๐ StudentMapper1.xml โ Mapper
โฃ ๐ controller
โ โ ๐ Test1_A.java โ ํธ์ถ ํ
์คํธ or ์๋ธ๋ฆฟ ์ปจํธ๋กค๋ฌ