-
[JSP] MyBatis 적용_2(어노테이션 없이)JAVA/ORM 2024. 7. 30. 18:56
▤ 목차
https://hi-hahahoho.tistory.com/93저번 글에서는 configuration.xml과 sqlMapConfig.java 설정을 자세히 봤다.
이번에는 DataMapper.xml과 DAO간 어떻게 사용되는지 정리하겠다.
jsp와 같은 앞단은 특별히 달라지는 것은 없다.
✔ DataDao
⌨ SqlSession
MyBatis에서 데이터베이스와 실제 세션(sql 쿼리 실행을 준비)을 나타내는 객체이다.
SQL 실행 및 트랜잭션 관리를 담당한다.
openSession() 메서드를 호출하여 기본 세션을 열고 작업이 끝나면 해당 객체를 해제한다.
🔦 MyBatis는 List 자료구조를 반환한다.
여러 행을 조회할때, 해당 테이블의 모든 행을 조회하고 각 행을 객체로 매핑해서 List로 반환한다.
🖇️Mapper 메서드 호출
session.selectList("selectAll")
session.selectOne("selectOne", code)
session.insert("insertData", form)
...
Mapper XML에서 정의된 쿼리를 호출하여 데이터베이스 작업을 수행한다.
👏 조회하는 객체에 따라
조회하는 객체가 2개 이상이라면 selectList메서드를 사용해야하며, 1개의 객체를 조회한다면 selectOne()메서드를 사용해야한다.
✔ Mapper XML 파일 (DataMapper.xml)
⌨ Mapper
namespace 속성을 사용해서 Mapper 인터페이스를 정의한다.
SQL 쿼리를 정의해야한다..
select, insert.. 등 sql 문장과 매개변수 parameterType과 resultType을 명시해줘야한다.
이때 각 매핑되는 xml과 dao의 타입을 잘 맞춰줘야한다.
❓XML에서 # 기호
이 기호는 주로 MyBatis에서 SQL 쿼리 매개변수(parameter)를 지정할 때 사용한다. MyBatis는 SQL 매퍼 xml파일에서 SQL 쿼리를 정의할때 ' #{ .. }'을 사용하여 동적으로 값이 들어갈 부분을 표시한다.
1.동적 SQL 매개변수 지정이 가능하다.
MyBatis에서 SQL 쿼리 내에 #{ .. } 기호를 사용하여 SQL 매개변수를 지정한다.
MyBatis에서 자동으로 해당 매개 변수의 값을 sql 쿼리에 적절하게 매핑한다.
2. SQL Injection 방지 가능.
#{ .. } 기호를 사용하면 MyBatis가 쿼리 실행 시 자동으로 매개변수 값을 안전하게 처리하여 sql injection 공격을 방지한다.
jsp에서 PreparedStatement (pstmt)의 ? 기능과 비슷한 역할을 한다 (물론 사용하는 목적엔 차이가 약간 있다.)
3. 자동 타입 변환
#{ .. } 기호를 사용하면 MyBatis는 매개변수의 자료형에 따라 자동으로 적절한 sql 매개변수 값을 생성한다.
(쉽게 말하자면) 문자열이 들어오면 알아서 따옴표 처리를 한다는 의미!
😊정리
jsp 파일에서 이와같이 dao에 접근하여 사용할 수 있다.
- MyBatis의 활용
코드에서 MyBatis를 사용하여 데이터베이스와의 연동을 구현해봤다.
MyBatis는 SQL 매퍼 XML을 사용하여 SQL 쿼리를 정의하고 자바 코드에서 실행하는 방식이다.
위와 같은 방식으로 데이터 접근 계층을 구성할 수 있다. - SqlMapConfig 클래스에서 SqlSessionFactory를 생성하고 설정한다.
이 클래스는 싱글톤 패턴을 사용하여 애플리케이션 전체에서 하나의 SqlSessionFactory 인스턴스를 관리하고 있다. - DAO 클래스
데이터 접근 객체 패턴을 사용했다.
데이터베이스와 직접적인 접근을 캡슐화(묶어)하여 비즈니스 로직과 데이터 접근을 분리하여 유지보수를 높였다.
'JAVA > ORM' 카테고리의 다른 글
SqlSessionFactory 클래스 정리 (0) 2024.07.29 [JSP] MyBatis 적용 (ORM/ 어노테이션 없이) (0) 2024.07.29 java에서 jpa 사용해보기 _ CRUD (JPA를 사용한 DML처리) (2) 2024.06.19 jpa) DB와 매핑 어노테이션 @Entity, @Table, @Id, @Column (0) 2024.05.14 - MyBatis의 활용