상세 컨텐츠

본문 제목

[Spring] Mapper, DB 연결(1)

공부/Spring

by 비렴 2022. 5. 31. 11:18

본문

[기존 JDBC]

1. Java+SQL 혼합된 형태 : 유지보수가 어렵다
2. 개발 생산성이 떨어진다 : 어렵고 개발 속도가 느리다.

-> 개선
    1. Java와 SQL 분리 --> 연결이 필요(Mapping)
                                                   |
                                          MyBatis Framework(DB Framework)

 

[MyBatis]


1. MyBatis란?
    - SQL Mapping Framework for Java : http://mybatis.org

 

mybatis

 

mybatis.org

<참고>
프로그램 내에 무수히 많은 CRUD 존재 ->  그에 맞는 쿼리문 역시 존재
JDBC -> 유지보수 어려움(변경사항이 생겼을 때 자바 코드 내의 쿼리문 일일이 수정)
MyBatis -> SQL 쿼리문을 분리해서 JDBC보다는 낫지만 그래도 쿼리문이 많이 존재
--> 쿼리문을 쓰지 않는 방법은 없을까? --> Spring JPA

2. MyBatis 공식 문서 보는 법

3. SQL 분리
   1) mapper XML file 생성

 

***<중요>***
이름이 같아야 한다.

<참고>
Mapper.java ---> Mapper Interface
Mapper.xml ---> Mapper XML file

 

   2) Mapping
      - 인터페이스와 XML 파일 이름은 동일해야 한다.
      - <mapper>안의 namespace="패키지명+인터페이스 이름"

       - SQL문과 메서드 연결 --> 메서드의 이름과 SQL문을 감싼 select의 id를 동일하게 한다

       - 실행 결과를 받기 위한 타입을 지정해준다.

<참고>
resultType 지정시 오류가 발생할 수 있다.
Class/TypeAlias '내가 지정한 타입' not found

   해결방법
     1) 패키지명까지 다 적어준다.
       

     2) servlet-context.xml파일을 수정해준다

수정 전 -> 수정후

4. Controller - Mapper 연결
    - Controller --> Mapper Interface --> Mapper XML(SQL) --> 결과 Return
    1) Controller에서 BoardMapper객체 생성
        BoardMapper Interface도 객체니까 생성 OK!
        멤버 변수로 선언해준다
        private BoardMapper mapper;
        List<Board> list = mapper.boardList();

     2) 돌려받은 결과를 저장후 객체바인딩을 해준다.
         request.setAttribute("list",list);

 

5. DB만들기(MySQL)
    1) 구동하기
         - [eGovFrame폴더] - [bin] - [mysql폴더]-[startup.bat]파일 더블클릭

          - port번호는 3306이다

           - 종료할 때는 [stop.bat] 더블클릭 혹은 [Ctrl+c]-->일괄작업을 끝내시겠습니까?(y/n) y

   2) 접속하기
      - [Window키] + r --> cmd 실행
      - MySQL의 bin폴더로 이동
        cd C:\eGovFrame-3.10.0\bin\mysql-5.6.21\bin
      - 접속
        mysql -u root -p
        
           유저 root 패스워드 --> 패스워드를 모르기 때문에 일단 Enter
        Enter password가 나오면 그냥 Enter


            앞부분이 mysql로 바뀌면 접속 완!

    3) 비밀번호 만들기
        - cmd를 이용해 접속한 이유! 비밀번호가 없기 때문에 비밀번호를 만든 후 이클립스나 전용 툴로 접속하려고
        - 데이터베이스를 확인한다
          (기존 샘플 DB + 전자정부표준프레임워크의 샘플 DB(ex. com, hyb, sample)가 존재)
          show databases;


        - mysql(--> 사용자 정보를 가지고 있다) DB 선택
          user mysql;

         - 테이블을 확인
           show tables;

            -  유저 정보들을 확인
               select * from user;
               root의 비밀번호가 없음을 확인할 수 있다.

          - 비밀번호 변경
            update user set password=password('123') where host='localhost' and user='root';
            flush privileges;
            <참고> password='123' 하면 123이 저장되지만 password=password('123')하면 암호화하여 저장됨

 

                       <참고>
                      flush privileges;를 해줘야 비밀번호 변경이 완료된다.

    4) 이클립스에서 DB 연결
        - [Data Source Explorer] - [ Database Connections] --> com을 제외한 DB는 삭제

      - com --> 오른쪽 클릭 --> [Properties]

      - [Driver Properites]에서 삼각형 모양의 Edit Driver Definition 클릭

      - Driver Type : MySQL JDBC Driver

       - JAR List 탭 클릭

             <참고> JAR파일은 왜 필요한가?
                      - DBMS의 종류는 많기 때문에 Java에서 API를 제공할 수 없음
                      - Java는 Interface를 제공하고 DB 벤더사들이 자신들의 제품에 맞는 Driver를 제공--> JAR파일
         - Porperties 탭 클릭

               - OK 누른 후 Test Connection을 클릭해서 Ping succeeded!나오는지 확인

                   - Apply and Close

                   - 원하는 DB(여기서는 mysql)을 더블클릭 혹은 오른쪽 클릭 후 connect

                   - SQL File 만들기
                     domain에서 [New] - [Other] - [General] - [File] 선택한 후 [Next]
                     이름을 board.sql
                     

 

                     - 파일 상단에 Type, Name, Database를 지정해주고 Status가 Connected라고 되면 연결 완!

연결 전
연결 후

 

        - 테이블 생성하기
          쿼리문 작성 - 드래그하여 선택해주고 - 오른쪽 클릭+Execute Selected Text 혹은 [Alt]+x --> 밑에서 결과 확인
         

                      - 가데이터 넣기

                      

관련글 더보기