[신세계I&C KDT][Java 프로그래밍] #18 MyBatis 연동하기 (0405)

박현아·2024년 4월 6일
0

신세계아이앤씨 KDT

목록 보기
22/42

1. MyBatis 아키텍쳐

                  EmpService (인터페이스)
						|
EmpMain----------EmpServiceImpl(클래스)---------EmpDAO--------MySQL
(main 메서드)        비즈니스로직 처리       |     DB 연동
사용자 입력 및         트랜잭션 처리 ★      |  
출력 (화면 처리)                           |
                                         |
                                      EmpDTO
                                    데이터 전달용

2. MyBatis 연동

1) MySQL 드라이버 및 MyBatis 라이브러리 다운로드 및 build path

  • mysql-connector-j-8.3.0.jar
  • mybatis-3.5.14.jar

2) DB 연동시 필요한 4개의 값을 저장한 jdbc.properties

  • src 폴더에 (classpath 경로)
  • package 형식 사용 가능 (com.config.jdbc.properties)
    접근할 때는 / 경로 사용 (com/config/jdbc.properties)

cf) 환경변수들
JAVA_HOME=jdk홈디렉토리 경로
PATH=명령어 경로; 명령어 경로;
CLASSPATH=클래스파일이있는경로 (*.jar)

3) 테이블의 컬럼을 저장하기 위한 DTO 클래스 작성

  • emp 테이블 레코드 저장용으로 com.dto.EmpDTO 작성
    (자동으로 mapping 해서 사용하기 위해 EmpDTO 변수명과 emp 테이블 컬럼명과 일치시킨다)
  • DTO에는 기본 생성자가 필수!!
    (<select id="paging" resultType="EmpDTO"> 하면 내부적으로 시스템이 기본생성자를 이용해서 EmpDTO 객체를 생성하기 때문)
  • 테이블 당 한 개 씩 작성

4) 2개의 xml 생성

  • src 폴더에 (classpath 경로)
  • package 형식 사용 가능 (com.config.Configuration.xml)
    접근할 때는 / 경로 사용 (com/config/Configuration.xml)

(1) 설정 정보 - Configuration.xml

https://mybatis.org/mybatis-3/getting-started.html#building-sqlsessionfactory-from-xml

  • 용도
    • jdbc.properties를 등록해서 DB 연동을 한다
    • DTO 별칭
    • Mapper 등록

(2) sql 정보 - Mapper.xml

https://mybatis.org/mybatis-3/getting-started.html#exploring-mapped-sql-statements

  • 테이블 당 하나씩 작성
  • 테이블명Mapper.xml로 만들기를 권장한다 (EmpMapper.xml)
  • 용도
    • sql문 설정

5) Configuration.xml을 자바 코드로 읽기

https://mybatis.org/mybatis-3/getting-started.html#building-sqlsessionfactory-from-xml

원본

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

변경

 MySqlSessionFactory.java

       public class MySqlSessionFactory {
  
	static SqlSessionFactory sqlSessionFactory;
	static {
		String resource = "com/config/Configuration.xml";
		  InputStream inputStream=null;
		try {
			inputStream = Resources.getResourceAsStream(resource);
		} catch (IOException e) {
			e.printStackTrace();
		}
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	}//end static 블럭
	
	// SqlSessionFactory 로부터 SqlSession 얻는 메서드
	public static SqlSession getSession() {
		// MyBatis는 명시적으로 commit 지정해야 된다.
		SqlSession session = sqlSessionFactory.openSession(); // openSession(false) 동일
		return session;
	}

6) Service 작성

(1) 구조

  com.service.EmpService (인터페이스)
        |
  EmpSerivceImpl (클래스)

(2) 역할

  • 비즈니스 로직
  • 트랜잭션 처리

(3) 특징

  • SqlSession만 여기서 얻는다
  • DAO로 SqlSession을 전달해줘야됨

cf) Connection과 SqlSession 특징
-> 반드시 메서드 안에서 로컬 변수로 얻어야 된다 (thread-safe 보장)
이유는 공유하면 절대 안됨!
메서드마다 따로 얻어서 쓰고 close 해줘야됨

7) DAO 작성

(1) 구조

  • EmpDAO.java

(2) 역할

  • MySQL 연동

(3) 특징

  • Service에서 전달한 SqlSession으로 메서드를 호출해서 DB를 연동한다

8) Main 작성

(1) 구조

  • com.dao.EmpMain

(2) 역할

  • 사용자 데이터 입력 및 출력 (화면 처리)

(3) 특징

  • Service와 연동
  • EmpDAO 생성해서 Service에 설정 ★

0개의 댓글