** ๐7.1๋จ๊ณ: try-catch, finally ๊ตฌ์กฐ โ DB ์ฐ๊ฒฐ ์คํจ, ์ฟผ๋ฆฌ ์คํจ ์ฒ๋ฆฌ ์ค์ต **
(๐ StudentDao.java
, SqlSession
์ฌ์ฉ ๊ธฐ์ค)
๐ฏ ํ์ต ๋ชฉํ
ํญ๋ชฉ | ์ค๋ช |
---|---|
๋ชฉ์ | DB ์ฐ๊ฒฐ ์คํจ ๋๋ SQL ์คํ ์ค๋ฅ ์ ์์ ์ ์ธ ์ฒ๋ฆฌ |
ํต์ฌ ๊ฐ๋ | try-catch-finally , session.commit() ์์ , rollback() |
๊ธฐ๋ ํจ๊ณผ | ์๋น์ค ์์ ์ฑ ํ๋ณด, ์ค๋ฅ ์ถ์ ๋ก๊ทธ ์ถ๋ ฅ, ์ฐ๊ฒฐ ๋์ ๋ฐฉ์ง |
โ 1. ๊ธฐ๋ณธ ๊ตฌ์กฐ: SqlSession ์ฒ๋ฆฌ ๋ฐฉ์
๐น ๊ธฐ์กด ์ฝ๋ (์๋ฌ ์ฒ๋ฆฌ ์์)
SqlSession session = factory.openSession();
List<Student> list = session.selectList("student.getAllStudents");
session.close();
๐ ๋ฌธ์ ์ : ์ฟผ๋ฆฌ ์คํจ ์ ๋ก๊ทธ๋ ์ ๋จ๊ณ , session์ด ๋ซํ์ง ์์ ๋ฆฌ์์ค ๋์ ๋ฐ์ ๊ฐ๋ฅ
โ 2. ์ค์ ์ฉ ์์ธ ์ฒ๋ฆฌ ๊ตฌ์กฐ
public List<Student> selectAll() {
SqlSession session = null;
List<Student> list = null;
try {
session = factory.openSession(); // DB ์ฐ๊ฒฐ
list = session.selectList("student.getAllStudents"); // ์ฟผ๋ฆฌ ์คํ
} catch (Exception e) {
System.out.println("โ ํ์ ๋ชฉ๋ก ์กฐํ ์คํจ: " + e.getMessage());
e.printStackTrace(); // ๋ก๊ทธ๋ก ์์ธ ์์ธ ์ถ๋ ฅ
} finally {
if (session != null) session.close(); // ๋ฐ๋์ ๋ซ์์ค
}
return list; // ์คํจ ์ null ๋ฐํ
}
โ 3. INSERT/UPDATE/DELETE ์ ์์ธ ์ฒ๋ฆฌ
public int insert(Student s) {
SqlSession session = null;
int result = 0;
try {
session = factory.openSession();
result = session.insert("student.insertStudent", s);
session.commit(); // ์ ์ ์ฒ๋ฆฌ ์ ์ปค๋ฐ
} catch (Exception e) {
System.out.println("โ ํ์ ๋ฑ๋ก ์ค ์ค๋ฅ ๋ฐ์");
e.printStackTrace();
if (session != null) session.rollback(); // ์์ธ ๋ฐ์ ์ ๋กค๋ฐฑ
} finally {
if (session != null) session.close();
}
return result;
}
โ 4. ์์ธ ์ํฉ๋ณ ์ฒ๋ฆฌ ์ ๋ต
์ํฉ | ์ฒ๋ฆฌ ๋ฐฉ๋ฒ |
---|---|
DB ์ฐ๊ฒฐ ๋ถ๊ฐ (session = null) | catch ์์ ์ฐ๊ฒฐ ์ค๋ฅ ๋ฉ์์ง ์ถ๋ ฅ |
SQL ๋ฌธ๋ฒ ์ค๋ฅ | e.printStackTrace() ๋ก SQL ์์น ํ์
|
์ค๋ณต ํค ๋ฑ ๋ฐ์ดํฐ ์ค๋ฅ | session.rollback() ์ผ๋ก ํธ๋์ญ์
์ทจ์ |
๋ก๊ทธ ๋ฏธ์ถ๋ ฅ | log4j ๋๋ SLF4J ์ฐ๋ ํ์ |
โ 5. ์ค์ต ์ฒดํฌ๋ฆฌ์คํธ
ํญ๋ชฉ | ์ค๋ช | ํ์ธ |
---|---|---|
๋ชจ๋ DAO ๋ฉ์๋์ try-catch-finally๊ฐ ์ ์ฉ๋์ด ์๋๊ฐ | โ | ย |
์ปค๋ฐ์ด ํ์ํ ๊ฒฝ์ฐ commit() ํธ์ถ ํ ์์ธ ๋ฐ์ ์ rollback() ๋ ์๋๊ฐ |
โ | ย |
session ์ ํญ์ finally ์์ ๋ซํ๋๊ฐ |
โ | ย |
์์ธ ๋ฉ์์ง๊ฐ ์ฌ์ฉ์/๋ก๊ทธ์ ๊ตฌ๋ถ๋์ด ์ถ๋ ฅ๋๋๊ฐ | โ | ย |
โ ์ค๋ฌด ํ
ํญ๋ชฉ | ํ |
---|---|
๋ชจ๋ DB ์ฒ๋ฆฌ์๋ ์์ธ ๋ฐฉ์ด ์ฝ๋ ํ์ | ย |
rollback() ์ INSERT/UPDATE/DELETE๋ง ํ์ (SELECT๋ ๋ถํ์) |
ย |
๋ก๊ทธ ํ๋ ์์ํฌ ์ฐ๋ ์ logger.error(e) ๋ก ๋ณ๊ฒฝ |
ย |
try-with-resources ๊ตฌ๋ฌธ์ผ๋ก session ์๋ close๋ ๊ฐ๋ฅ (Java 7+) |
ย |
โ ํ์ฅ ํ์ต (์ค๋ฌด ์ฐ์ต์ฉ)
์๋๋ฆฌ์ค | ์ฐ์ต ๋ฐฉ๋ฒ |
---|---|
ํ๋ฒ ์ค๋ณต์ผ๋ก INSERT ์คํจ | Duplicate entry ์์ธ ํ์ธ |
WHERE ์กฐ๊ฑด ๋ถ์ผ์น๋ก UPDATE ์คํจ | ์ํฅ ํ ์ 0 ํ์ธ |
SQL ๋ฌธ๋ฒ ์ค๋ฅ | ์คํ ํฌํจ๋ ์ฟผ๋ฆฌ ์คํ โ ์์ธ ๋ฐ์ ๋ก๊ทธ ํ์ธ |
โ 7.2๋จ๊ณ: SQL ์์ธ ๋ฉ์์ง ๋ถ์๋ฒ โ ์ค๋ฅ ๋ก๊ทธ ๋ถ์ ์ค์
(๐ StudentDao.java
๊ธฐ๋ฐ, JDBC + MyBatis ์๋ฌ ๋ก๊ทธ ์ค์ฌ)
๐ฏ ํ์ต ๋ชฉํ
ํญ๋ชฉ | ์ค๋ช |
---|---|
๋ชฉ์ | ์ฝ์์ ์ถ๋ ฅ๋ SQL ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํด์ํ๊ณ ์์ธ ํ์ |
๋์ | ์ฟผ๋ฆฌ ๋ฌธ๋ฒ ์ค๋ฅ, ๋ฐ์ธ๋ฉ ์ค๋ฅ, ์ปฌ๋ผ ๋ถ์ผ์น, ์ค๋ณตํค ์ค๋ฅ ๋ฑ |
๊ธฐ๋ ํจ๊ณผ | ์ค๋ฌด์์ DB ์ค๋ฅ ์์ธ ํ์ ์๋ ๋ํญ ํฅ์ |
โ 1. MyBatis ์๋ฌ ๋ฉ์์ง ๊ตฌ์กฐ ์ดํด
๐ก ๋๋ถ๋ถ ๋ค์๊ณผ ๊ฐ์ ํจํด์ผ๋ก ์ถ๋ ฅ๋ผ
### Error querying database. Cause: java.sql.SQLSyntaxErrorException: ...
### The error may exist in mapper/StudentMapper.xml
### The error occurred while executing a query
### SQL: SELECT * FROM student WHERE hakbun = #{studentId}
### Cause: java.sql.SQLSyntaxErrorException: Unknown column 'studentId' in 'where clause'
๋ก๊ทธ ํ | ์๋ฏธ |
---|---|
### Error querying database |
MyBatis ์ฟผ๋ฆฌ ์คํ ์ค๋ฅ |
Cause: |
JDBC๊ฐ ๋ฐ์์ํจ ๊ตฌ์ฒด์ ์์ธ (SQLSyntaxErrorException , IntegrityConstraintViolationException ๋ฑ) |
The error may exist in ... |
์ด๋ XML์์ ๋ฌธ์ ๋ฐ์ํ๋์ง ํ์ |
SQL: |
์ค์ ์คํ๋ SQL (๋ฐ์ธ๋ฉ ์ ) |
Cause: |
DB์์ ๋ฐ์ ์ต์ข ์ค๋ฅ ๋ฉ์์ง |
โ 2. ์ค์ ์์ธ ์ฌ๋ก๋ณ ๋ถ์
โ โ SQL ๋ฌธ๋ฒ ์ค๋ฅ (SyntaxError)
Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax
SQL: SELECT * FORM student WHERE grade = ?
๐ ์์ธ: FROM
์คํ โ FORM
โ ํด๊ฒฐ: ์คํ ์์
โ โก ์ปฌ๋ผ ์คํ
SQLSyntaxErrorException: Unknown column 'phnne' in 'field list'
๐ ์์ธ: SQL์ด๋ DTO์ ์๋ ์ปฌ๋ผ๋ช ์ฌ์ฉ
โ
ํด๊ฒฐ: DB ์คํค๋ง ๋๋ DTO, SQL์์ phnne โ phone
์ผ๋ก ์์
โ โข ๋ฐ์ธ๋ฉ ์ค๋ฅ (MyBatis)
org.apache.ibatis.binding.BindingException: Parameter 'hakbun' not found. Available parameters are [id]
๐ ์์ธ: XML์์๋ #{hakbun}
์ธ๋ฐ Java์์๋ param.put("id", 1001)
์ฒ๋ผ ์ด๋ฆ์ด ๋ค๋ฆ
โ ํด๊ฒฐ: XML์ ํ๋ผ๋ฏธํฐ๋ช ๊ณผ Java์ ์ ๋ฌ ํค(key)/ํ๋๋ช ์ด ์ ํํ ์ผ์นํด์ผ ํจ
โ โฃ ์ค๋ณตํค ์ค๋ฅ
Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '1001' for key 'PRIMARY'
๐ ์์ธ: PRIMARY KEY์ธ hakbun
์ ์ด๋ฏธ ์กด์ฌํ๋ ๊ฐ ์ฝ์
์๋
โ ํด๊ฒฐ: ์ค๋ณต ์ฌ๋ถ ๋จผ์ ํ์ธํ๊ฑฐ๋ auto_increment ์ ์ฉ
โ โค ResultType ๋งคํ ์ค๋ฅ
java.lang.IllegalArgumentException: Result Maps collection does not contain value for studentResultMap
๐ ์์ธ: <select resultMap="studentResultMap">
์ฌ์ฉํ๋๋ฐ, ์์ resultMap
์ ์๊ฐ ์์
โ
ํด๊ฒฐ: <resultMap id="studentResultMap">
๊ฐ ์ ์ธ๋์ด ์์ด์ผ ํจ
โ 3. ์ค์ต ์ฒดํฌ๋ฆฌ์คํธ
ํญ๋ชฉ | ์ค๋ช | ์ฒดํฌ |
---|---|---|
์ฝ์์์ SQL ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์บก์ฒํ๋๊ฐ | โ | ย |
XML ์์น, SQL ๋ฌธ, ๋ฐ์ธ๋ฉ ๋ณ์ ๋ฑ์ ์ ํํ ์ถ์ ํ๋๊ฐ | โ | ย |
์ค๋ฅ ์์ธ์ ๋ช ํํ ์๋ณํ๊ณ ํด๊ฒฐ ํฌ์ธํธ๋ฅผ ์ ๋ฆฌํ๋๊ฐ | โ | ย |
๋์ผ ์ค๋ฅ๊ฐ ๋ฐ๋ณต๋์ง ์๋๋ก ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํ๋๊ฐ | โ | ย |
โ 4. ์ค๋ฌด ํ
ํญ๋ชฉ | ํ |
---|---|
log4j ์ค์ ์ ํ์ โ SQL, ํ๋ผ๋ฏธํฐ ๋ก๊ทธ ํจ๊ป ์ถ๋ ฅ๋จ |
ย |
SQLSyntaxErrorException ์ ์ฟผ๋ฆฌ ๊ตฌ์กฐ ์์ฒด ๋ฌธ์ |
ย |
BindingException ์ XML โ ์๋ฐ ํ๋ผ๋ฏธํฐ ๋ถ์ผ์น ๋ฌธ์ |
ย |
IntegrityConstraintViolationException ์ ์ค๋ณต ํค ๋๋ ์ธ๋ํค ์ค๋ฅ |
ย |
MySQL Workbench์์ ์๋ ์คํํด๋ณด๋ฉฐ SQL ํ์ธ๋ ๋ณํ | ย |
โ ํ์ฅ ํ์ต ์์
์์ธ ์ํฉ | ์ฐ์ต ๋ฐฉ๋ฒ |
---|---|
์ปฌ๋ผ ์คํ | SELECT phnne FROM student |
์๋ resultMap ํธ์ถ | resultMap id ์คํ intentionally ์ ๋ฐ |
DTO ํ๋๋ช ๋ณ๊ฒฝ | Student.java์ phone ์ tel ๋ก ๋ณ๊ฒฝ ํ ์คํ |
โ 7.3๋จ๊ณ: NullPointerException ๋ฐฉ์ง ํจํด
(๐ StudentDao.java
+ StudentMapper.xml
+ Controller ์ฐ๋ ๊ธฐ์ค)
๐ฏ ํ์ต ๋ชฉํ
ํญ๋ชฉ | ์ค๋ช |
---|---|
๋ชฉ์ | selectOne , selectList ๊ฒฐ๊ณผ๊ฐ null ์ผ ๋ ์์ ํ๊ฒ ์ฒ๋ฆฌ |
์ฃผ์ ๊ฐ๋ | null ์ฒดํฌ , Optional ํจํด , ๊ฒฐ๊ณผ ์ ๋ฌด ๋ถ๊ธฐ ์ฒ๋ฆฌ |
๊ธฐ๋ ํจ๊ณผ | ์๋น์ค ๋ค์ด ๋ฐฉ์ง, ์ฌ์ฉ์์๊ฒ ์น์ ํ ๋ฉ์์ง ์ ๊ณต, NullPointerException ์๋ฐฉ |
โ 1. ๊ฐ์ฅ ํํ ์์ธ ์ํฉ ์์
Student s = mapper.getStudentByHakbun(9999);
System.out.println("์ด๋ฆ: " + s.getIrum()); // โ ์ฌ๊ธฐ์ NullPointerException ๋ฐ์ ๊ฐ๋ฅ
๐ ์์ธ: ํ๋ฒ 9999๋ฒ์ด ์กด์ฌํ์ง ์์์ null
์ด ๋ฆฌํด๋จ
โ 2. ์์ ํ ์ฒ๋ฆฌ ๋ฐฉ์ ์์ (๊ธฐ๋ณธ ํจํด)
๐น ๋ฐฉ๋ฒ 1: null
์ฒดํฌ ํ ๋ถ๊ธฐ
Student s = mapper.getStudentByHakbun(9999);
if (s != null) {
System.out.println("์ด๋ฆ: " + s.getIrum());
} else {
System.out.println("โ ์กฐํ ๊ฒฐ๊ณผ๊ฐ ์์ต๋๋ค.");
}
๐ก selectOne() ๊ฒฐ๊ณผ๋ ์ฐพ๋ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒฝ์ฐ null ๋ฐํ๋๋ฏ๋ก ํญ์ ์ฒดํฌํด์ผ ํจ.
๐น ๋ฐฉ๋ฒ 2: Optional ํจํด (Java 8+)
Optional.ofNullable(mapper.getStudentByHakbun(9999))
.ifPresentOrElse(
stu -> System.out.println("์ด๋ฆ: " + stu.getIrum()),
() -> System.out.println("โ ํด๋น ํ๋ฒ ํ์ ์์")
);
์ค๋ฌด์์๋ Optional
๋ก ๋ฆฌํดํ๋๋ก ์ค๊ณํ๋ ๊ฒ๋ ๊ฐ๋ฅ (Spring ํ๊ฒฝ ๋ฑ)
โ 3. Controller + JSP ์ฐ๋ ์ ์์ ์ฒ๋ฆฌ ํ๋ฆ
Student s = dao.selectByHakbun(9999);
if (s == null) {
request.setAttribute("msg", "ํด๋น ํ์์ด ์กด์ฌํ์ง ์์ต๋๋ค.");
request.getRequestDispatcher("/error.jsp").forward(request, response);
} else {
request.setAttribute("student", s);
request.getRequestDispatcher("/student_detail.jsp").forward(request, response);
}
โ
4. selectList()
๊ฒฐ๊ณผ๊ฐ ๋น ๋ฆฌ์คํธ์ผ ๊ฒฝ์ฐ
List<Student> list = mapper.getAllStudents();
if (list == null || list.isEmpty()) {
System.out.println("โ ํ์ ๋ฐ์ดํฐ๊ฐ ์์ต๋๋ค.");
} else {
for (Student s : list) {
System.out.println(s.getHakbun() + " / " + s.getIrum());
}
}
โ
selectList()
๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋น ๋ฆฌ์คํธ๋ฅผ ๋ฐํํ์ง๋ง,
MyBatis ์ค์ ์ ๋ฐ๋ผ null
์ด ๋ ์๋ ์์ผ๋ฏ๋ก null || isEmpty()
๋ฅผ ํจ๊ป ์ฐ๋ ๊ฒ์ด ์์ ์ ์ด์ผ.
โ 5. ์ค์ต ์ฒดํฌ๋ฆฌ์คํธ
ํญ๋ชฉ | ์ค๋ช | ํ์ธ |
---|---|---|
selectOne() ๊ฒฐ๊ณผ๊ฐ null์ผ ์ ์์์ ๊ฐ์ ํ๊ณ ๋์ํ๋๊ฐ |
โ | ย |
null ๊ฒ์ฌ ์์ด getter ํธ์ถํ๋ ์ฝ๋๊ฐ ์๋๊ฐ |
โ | ย |
selectList() ๊ฒฐ๊ณผ๊ฐ ๋น ๋ฆฌ์คํธ์ผ ๋๋ ์์ธ ์์ด ์ถ๋ ฅ ๊ฐ๋ฅํ๊ฐ |
โ | ย |
์ฌ์ฉ์์๊ฒ๋ โ์กฐํ ๊ฒฐ๊ณผ ์์โ ๋ฉ์์ง๋ฅผ ๋ช ํํ ์ ๋ฌํ๋๊ฐ | โ | ย |
โ ์ค๋ฌด ํ
์ํฉ | ๋์ ๋ฐฉ๋ฒ |
---|---|
select ๊ฒฐ๊ณผ๊ฐ ์๋๋ฐ getter ํธ์ถ ์ | NullPointerException ๋ฐ์ โ ๋ฐ๋์ null ์ฒดํฌ |
JSP์์ ${student.irum} ์ถ๋ ฅ ์ null์ด๋ฉด? |
JSTL <c:if test="${empty student}"> ๋ก ๋ฐฉ์ด ๊ฐ๋ฅ |
๋๋ ๋ฐ์ดํฐ ์กฐํ ๊ฒฐ๊ณผ ์์ | "๊ฒ์๋ ๊ฒฐ๊ณผ๊ฐ ์์ต๋๋ค" ๋ฉ์์ง ๋์ฐ๊ธฐ ํ์ |
API ์๋ต | null ๋์ { "data": null, "message": "ํ์ ์์" } ๋ฑ์ ํฌ๋งท ๊ถ์ฅ |
โ ํ์ฅ ํ์ต: ์์ธ UX ์ค๊ณ
๋ชฉํ | ์ค์ต ๋ฐฉ๋ฒ |
---|---|
null ๊ฒฐ๊ณผ ์ ์ฌ์ฉ์์๊ฒ ์๋ด ๋ฉ์์ง ํ์ | JSP + <c:if> + ${empty} ํ์ฉ |
์๋น์ค ์ฅ์ ๋ฐฉ์ง | ๋ชจ๋ DAO ๋ฉ์๋์ null ๋ฐฉ์ด ์ถ๊ฐ |
๋ก๊ทธ ์ถ๋ ฅ๋ ํจ๊ป ๊ตฌ์ฑ | null ๋ฐํ ์ logger.info("ํ์ ์์") |
โ 7.4๋จ๊ณ: XML ๋งคํผ ๋ฌธ๋ฒ ์ค๋ฅ ๋๋ฒ๊น
(๐ StudentMapper1.xml, StudentMapper.xml ์ค์ฌ)
๐ฏ ํ์ต ๋ชฉํ
ํญ๋ชฉ | ์ค๋ช |
---|---|
๋ชฉ์ | XML Mapper ์์ฑ ์ ๋ฐ์ํ ์ ์๋ ๋ฌธ๋ฒ ์ค๋ฅ๋ฅผ ์ฌ์ ์ ๋ฐฉ์ง ๋๋ ๋น ๋ฅด๊ฒ ๋๋ฒ๊น |
๋์ | ์คํ, ๋๋ฝ, ๊ฒฝ๋ก ์ค๋ฅ, ํ๊ทธ ์์ ์ค๋ฅ ๋ฑ |
๊ธฐ๋ ํจ๊ณผ | XML ์ค๋ฅ ๋ฐ์ ์ ์์ธ์ ๋น ๋ฅด๊ฒ ์ฐพ๊ณ ์์ ํ ์ ์๋ ๋ฅ๋ ฅ ํ๋ณด |
โ 1. ๋งคํผ ๋ฌธ๋ฒ ์ค๋ฅ์ ๋ํ ์ฆ์ 5๊ฐ์ง
์ฆ์ | ๋ก๊ทธ ๋ฉ์์ง ์์ | ์์ธ ๋ถ์ |
---|---|---|
โ XML ํ์ฑ ์คํจ | org.apache.ibatis.exceptions.PersistenceException: Error parsing SQL Mapper Configuration. |
DTD ๋๋ฝ, ํ๊ทธ ๋๋ฝ, XML ๊นจ์ง |
โ Mapper ID ๋ถ์ผ์น | Parameter 'id' not found. Available parameters are ... |
XML ID ์ด๋ฆ ์คํ ๋๋ Java ์ชฝ ID ์คํ |
โ resultType ๋ถ์ผ์น | Could not set property 'irum' on class main.Student |
DTO ํ๋๋ช ๊ณผ ์ปฌ๋ผ๋ช ์ด ๋ค๋ฆ |
โ SQL ๋ฌธ๋ฒ ์ค๋ฅ | SQLSyntaxErrorException: Unknown column |
์ปฌ๋ผ๋ช ์คํ or ์กด์ฌํ์ง ์๋ ํ ์ด๋ธ |
โ include refid ์ค๋ฅ | org.apache.ibatis.builder.IncompleteElementException: Could not find SQL statement to include with refid |
<sql id="..."> ์ ์ ์์ or ์์ ์ค๋ฅ |
โ 2. Common Error Checklist (ํ์ ๊ธฐ๋ฐ ์ ๋ฆฌ)
๊ตฌ๋ถ | ์ฒดํฌ ํญ๋ชฉ | ์์ / ์ค๋ช |
---|---|---|
โ XML ๊ธฐ๋ณธ ๊ตฌ์กฐ | <!DOCTYPE mapper ...> ์ ์ธ์ด ์๋๊ฐ? |
DTD ๋๋ฝ ์ ํ์ฑ ์ค๋ฅ |
โ ๋ค์์คํ์ด์ค | <mapper namespace="..."> ์ ์ ํํ ๊ฒฝ๋ก๊ฐ ๋ค์ด์๋๊ฐ? |
Java ์ธํฐํ์ด์ค ์ด๋ฆ๊ณผ ์์ ํ ๊ฐ์์ผ ํจ |
โ
<select> /<insert> ํ๊ทธ |
id , resultType , parameterType ๋๋ฝ ์์? |
๋น ์ง๋ฉด ์ปดํ์ผ OK โ ์คํ ์ค๋ฅ ๋ฐ์ |
โ resultType | DTO ํ๋๋ช ๊ณผ ์ปฌ๋ผ๋ช ์ด ์ผ์นํ๋๊ฐ? | ์๋ ๋งคํ์ด ์คํจํ๋ฉด ๊ฐ์ด ์ ๋ค์ด์ด |
โ ํ๋ผ๋ฏธํฐ๋ช | Java โ XML ์ ๋ฌ๊ฐ ์ด๋ฆ์ด ์ผ์นํ๋๊ฐ? | #{hakbun} โ Java param.put("hakbun", 1) |
โ ์ค์ฒฉ ํ๊ทธ | <where> , <trim> , <foreach> ์ ๋ซํ ์ฌ๋ถ ํ์ธ |
์ด๊ณ ๋ซ๋ ํ๊ทธ ์ ํ์ |
โ include | <sql> ์ ์ ์์๊ฐ <include> ๋ณด๋ค ๋จผ์ ์ธ๊ฐ? |
refid๋ฅผ ๋ชป ์ฐพ๋ ๊ฒฝ์ฐ |
โ ๊ฒฝ๋ก ๋ฌธ์ | mapper/*.xml ๊ฒฝ๋ก๊ฐ mybatis-config.xml์ ๋ง๊ฒ ์ง์ ๋์ด ์๋๊ฐ? |
๊ฒฝ๋ก ์คํ๊ฐ ์์ธ๋ก ์ฆ์ |
โ ๋ก๊ทธ๋ก SQL ํ์ธ | log4j ์ค์ ์ด ์ ์ฉ๋์ด ์๋๊ฐ? | SQL์ ๋์ผ๋ก ํ์ธํด์ผ ์ถ์ ๊ฐ๋ฅ |
โ 3. ์ค์ ์์ธ ๋ฉ์์ง ์์ & ํด๊ฒฐ
โ ์์ธ: Could not set property 'irum'
Caused by: java.lang.NoSuchMethodException: main.Student.setIrum(java.lang.Integer)
๐ ์์ธ: DB์์ irum
์ ์ซ์๋ก ๋ณด๋ด๋๋ฐ DTO์ setIrum(String)
์ด๊ธฐ ๋๋ฌธ
โ ํด๊ฒฐ: ์ปฌ๋ผ ํ์ , DTO ํ์ ์ ์ผ์น์ํด
โ ์์ธ: <sql id="studentColumns">
์ ์ ๋ชป ์ฐพ์
Could not find SQL statement to include with refid 'studentColumns'
๐ ์์ธ: <sql id="studentColumns">
๊ฐ <include refid="studentColumns"/>
๋ณด๋ค ์๋์ชฝ์ ์ ์๋์ด ์์
โ
ํด๊ฒฐ: <sql>
์ ์๋ ์์ชฝ์ ์ ์ธ
โ 4. ์ค์ต ์ฒดํฌ๋ฆฌ์คํธ
ํญ๋ชฉ | ์ค๋ช | ์ฒดํฌ |
---|---|---|
DTD ํฌํจ ์ฌ๋ถ ํ์ธ (<!DOCTYPE mapper ...> ) |
โ | ย |
๋ชจ๋ ํ๊ทธ ๋ซํ ์ฌ๋ถ ํ์ธ | โ | ย |
<sql> , <include> ์์ ์ค๋ฅ๊ฐ ์๋๊ฐ |
โ | ย |
parameterType, resultType ์ ํํ๊ฒ ์ผ์นํ๋๊ฐ | โ | ย |
DTO ํ๋๋ช โ ์ปฌ๋ผ๋ช ์ผ์น ์ฌ๋ถ | โ | ย |
Java โ XML ์ ๋ฌ ํ๋ผ๋ฏธํฐ ์ด๋ฆ ์ผ์น ์ฌ๋ถ | โ | ย |
โ ์ค๋ฌด ํ
ํญ๋ชฉ | ํ |
---|---|
XML ์๋ํฐ์์ ์๋์์ฑ ๊ธฐ๋ฅ์ด ์๋ ๋๊ตฌ(Eclipse, IntelliJ)๋ฅผ ์ฌ์ฉ | ย |
๋ก๊ทธ์ SQL: Parameters: ๊ฐ ๋์ค๋๋ก log4j ์ค์ ํ์ |
ย |
์ค๋ฅ๊ฐ ๋ฐ๋ณต๋๋ฉด Mapper XML์ ์ต์๋จ์๋ก ์ชผ๊ฐ์ ํ ์คํธ | ย |
๋ณต์กํ WHERE์ ์ <sql> ๋ก ๋ถ๋ฆฌํด ๋๋ฒ๊น
์ฝ๊ฒ |
ย |