## 52. Mybatis SQL-mapper 프레임워크 사용하기
- mybatis 프레임워크의 구동 원리 및 사용법
Board 관련 정리 후 Member 관련 추가 및 수정
MySQLBoardDao.xml
ㄴ Board 의 DataSource 관련 모두 제거
ServerApp.java
ㄴ Board 의 DataSource 관련 모두 제거
BoardDao.java
ㄴ findAll 에 category 값 넘겨주도록 정의
BoardDao.java
ㄴ findBy 에 category 값 넘겨주도록 정의
MySQLBoard.java
ㄴ BoardDao 인터페이스에 따라 findAll 에 category 값 넘겨주도록 함
MySQLBoard.java
ㄴ BoardDao 인터페이스에 따라 findBy 에 category 값 넘겨주도록 함
MySQLBoardDao.java
ㄴ category 관련 제거
MySQLBoardDao.java
ㄴ category 관련 제거
MySQLBoardDao.java
ㄴ 생성자에서 설정하지 않으므로 this 제거 필요
MySQLBoardDao.java
ㄴ category 관련 제거
ServerApp.java
ㄴ 이제 category 는 생성자에서 받지 않으므로 제거
ServerApp.java
ㄴ 이제 BoardDao 를 boardDao, noticeDao 로 따로 나눌 필요가 없음
ServerApp.java
ㄴ noticeDao -> boardDao 로 모두 변경해주도록 함
ServerApp.java
ㄴ BoardXxxListener 에 category 를 넘겨주도록 함
BoardAddListener.java
ㄴ BoardAddListener 의 생성자에서 category 를 받도록 추가해주기
BoardAddListener.java
ㄴ category 를 Listsener 에서 설정해주도록 함
BoardListListener.java
ㄴ BoardListListener 의 생성자에서 category 를 받도록 추가해주기
BoardListListener.java
ㄴ findAll 에 category 를 넘기도록 설정해주기
BoardDetailListener.java
ㄴ BoardDetailListener 의 생성자에서 category 를 받도록 추가해주기
BoardDetailListener.java
ㄴ findAll 에 category 도 추가적으로 넘기도록 설정해주기
BoardUpdateListener.java
ㄴ BoardUpdateListener 의 생성자에서 category 를 받도록 추가해주기
BoardUpdateListener.java
ㄴ findAll 에 category 도 추가적으로 넘기도록 설정해주기
BoardDeleteListener.java
ㄴ BoardDeleteListener 의 생성자에서 category 를 받도록 추가해주기
BoardDeleteListener.java
ㄴ category 를 Listsener 에서 설정하도록 함
ServerApp.java
ㄴ 이제 BoardDao 객체는 boardDao 하나만 있으면 되므로 noticeDao 는 제거
mybatis-config.xml
ㄴ typeAliases 추가
mybatis-config.xml
ㄴ bitcamp.report.vo.Board 를 board 로 별명을 지어줌
BoardDao.xml
ㄴ mybatis-config.xml 에서 별명을 설정한대로 bitcamp.report.vo.Board 를 board 로 변경해줌
=> 대소문자를 구별하지 않지만 동일하게 쓰는 것을 권장
mybatis-config.xml
ㄴ bitcamp.report.vo.Member 를 member 로 별명을 지어줌
BoardDao.xml
ㄴ mybatis-config.xml 에서 별명을 설정한대로 bitcamp.report.vo.Member 를 member 로 변경해줌
=> 대소문자를 구별하지 않지만 동일하게 쓰는 것을 권장
=>
=>
ㄴ 제대로 출력됨을 확인
mybatis-config.xml
ㄴ package 추가
mybatis-config.xml
ㄴ bitcamp.report.vo 를 package name 으로 두면 bitcamp.report.vo.board 와 bitcamp.report.vo.member 를 따로 정의할 필요가 없음 (같은 패키지 이므로)
=>
ㄴ 제대로 출력됨을 확인
mybatis-config.xml
ㄴ properties 추가
mybatis 문서 확인
https://mybatis.org/mybatis-3/configuration.html#properties
ㄴ properties 사용법 확인
=>
mybats-config.xml
ㄴ 현재 프로젝트에 적용
mybats-config.xml
ㄴ bitcamp.report.config 패키지에 jdbc.properties 파일 추가
mybats-config.xml
ㄴ com.mysql.cj.jdbc.Driver 복사
jdbc.properties
ㄴ jdbc.properties 의 driver 설정 부분에 붙여넣기
mybats-config.xml
ㄴ jdbc:mysql://localhost:3306/studydb 복사
jdbc.properties
ㄴ jdbc.properties 의 url 설정 부분에 붙여넣기
mybats-config.xml
ㄴ study 복사
jdbc.properties
ㄴ jdbc.properties 의 username 설정 부분에 붙여넣기
mybats-config.xml
ㄴ 암호 복사
jdbc.properties
ㄴ jdbc.properties 의 password 설정 부분에 붙여넣기
=>
jdbc.properties
ㄴ 앞에 jdbc_ 붙여주기
=>
jdbc.properties
ㄴ _ 대신 . 으로 변경해줌
mybatis-config.java
ㄴ 각각 ${...} 타입으로 변경해주기
=>
ㄴ 실행 잘 됨을 확인
mybatis-config.java
ㄴ MemberDao.xml 도 생성하여 사용하도록 함
ㄴ BoardDao.xml 복사하여 Memberdao.xml 라는 이름으로 붙여넣기
MemberDao.xml
ㄴ BoardDao -> MemberDao 로 변경
MemberDao.xml
ㄴ board -> member
Member.java
ㄴ Member 클래스 및 데이터베이스에서 타입 확인
MemberDao.xml
ㄴ Member 클래스에서 확인한 타입과 변수명에 따라 해당 코드 수정
MemberDao.xml
ㄴ 해당 코드는 Member 에서는 필요 없으므로 제거
MemberDao.xml
ㄴ board -> member 로 모두 변경
MemberDao.xml
ㄴ 해당 sql 문 수정
MemberDao.xml
ㄴ 암호는 sha1 함수를 이용하도록 수정
MemberDao.xml
ㄴ 해당 parameterType 은 필요 없으므로 제거
MemberDao.xml
ㄴ sql 문에서 join 필요 없으므로 제거
MemberDao.xml
ㄴ findAll 의 최종 sql 문
MemberDao.xml
ㄴ findBy 의 parameterType 은 int 로 변경
mybatis 문서 확인
https://mybatis.org/mybatis-3/configuration.html#typeAliases
MemberDao.xml
ㄴ findBy 의 sql 문 수정
MemberDao.xml
ㄴ login 을 위한 findByPhoneAndPassword 도 추가
MemberDao.xml
ㄴ where 절에 phone, password 추가
ㄴ password 는 sha1 함수를 이용하도록 함
MemberDao.xml
ㄴ parameterType 은 member 로 변경해주기
MemberDao.xml
ㄴ update 의 sql 문 수정
MemberDao.xml
ㄴ member 는 updateCount 필요 없으므로 제거
MemberDao.xml
ㄴ delete 의 sql 문 수정
MySQLMemberDao.java
ㄴ DataSource 대신 SqlSessionFactory 사용
MySQLMemberDao.java
ㄴ SqlSessionFactory를 통해 SqlSession 객체를 생성하고, false 파라미터를 전달하여 자동 커밋을 사용하지 않도록 설정해주기
MySQLMemberDao.java
ㄴ sqlSession.insert() 메서드는 쿼리를 실행하여 데이터베이스에 데이터를 추가하는데 사용됨
ㄴ insert() 메서드의 첫 번째 매개변수에는 실행할 쿼리의 경로와 이름을 지정하고, 두 번째 매개변수에는 쿼리에 전달할 파라미터를 전달함
MySQLMemberDao.java
ㄴ 해당 코드 제거해도 됨
MySQLMemberDao.java
ㄴ SqlSessionFactory를 통해 SqlSession 객체를 생성하고, false 파라미터를 전달하여 자동 커밋을 사용하지 않도록 설정해주기
ㄴ SqlSession 객체의 selectList() 메서드를 사용하여 데이터베이스에서 회원 정보 목록을 조회함
ㄴ selectList() 메서드의 첫 번째 매개변수에는 실행할 쿼리의 경로와 이름을 지정하고, 두 번째 매개변수에는 쿼리에 전달할 파라미터를 전달함
MySQLMemberDao.java
ㄴ 해당 코드 제거해도 됨
MySQLMemberDao.java
ㄴ SqlSessionFactory를 통해 SqlSession 객체를 생성하고, false 파라미터를 전달하여 자동 커밋을 사용하지 않도록 설정해주기
ㄴ SqlSession 객체의 selectOne() 메서드를 사용하여 데이터베이스에서 특정 회원 정보를 조회함
ㄴ selectOne() 메서드의 첫 번째 매개변수에는 실행할 쿼리의 경로와 이름을 지정하고, 두 번째 매개변수에는 쿼리에 전달할 파라미터를 전달함
MySQLMemberDao.java
ㄴ 해당 코드 제거해도 됨
MySQLMemberDao.java
ㄴ 조회 영역에서는 false 넣어주지 않아도 됨 (Autocommit 이 false 일 필요가 없음)
MySQLMemberDao.java
ㄴ param -> member 로 변수명 변경
MySQLMemberDao.java
ㄴ SqlSessionFactory를 통해 SqlSession 객체를 생성하도록 함
ㄴ SqlSession 객체의 selectOne() 메서드를 사용하여 데이터베이스에서 특정 회원 정보를 조회함
ㄴ selectOne() 메서드의 첫 번째 매개변수에는 실행할 쿼리의 경로와 이름을 지정하고, 두 번째 매개변수에는 쿼리에 전달할 파라미터를 전달함
MySQLMemberDao.java
ㄴ 해당 코드 제거해도 됨
MySQLMemberDao.java
ㄴ SqlSessionFactory를 통해 SqlSession 객체를 생성하고, false 파라미터를 전달하여 자동 커밋을 사용하지 않도록 설정해주기
ㄴ SqlSession 객체의 update() 메서드를 사용하여 데이터베이스에서 회원 정보를 업데이트 하도록 함
ㄴ update() 메서드의 첫 번째 매개변수에는 실행할 쿼리의 경로와 이름을 지정하고, 두 번째 매개변수에는 쿼리에 전달할 파라미터를 전달함
MySQLMemberDao.java
ㄴ 해당 코드 제거해도 됨
MySQLMemberDao.java
ㄴ SqlSessionFactory를 통해 SqlSession 객체를 생성하고, false 파라미터를 전달하여 자동 커밋을 사용하지 않도록 설정해주기
ㄴ delete() 메서드를 사용하여 데이터베이스에서 회원 정보를 삭제하도록 함
ㄴ delete() 메서드의 첫 번째 매개변수에는 실행할 쿼리의 경로와 이름을 지정하고, 두 번째 매개변수에는 쿼리에 전달할 파라미터를 전달함
MySQLMemberDao.java
ㄴ 해당 코드 제거해도 됨
ServerApp.java
ㄴ MySQLMemberDao 도 DataSource 대신 SqlSessioinFactory 이용함
ServerApp.java
ㄴ 이제 DataSource 대신 SqlSessionFactory 를 이용하므로 제거
ServerApp.java
ㄴ DataSource 대신 SqlSessionFactory 를 이용하도록 함
ServerApp.java
ㄴ 이제 DataSource 는 사용하지 않으므로 해당 코드 제거
MemberAddListener.java
ㄴ DataSource 대신 SqlSessionFactory 사용하도록 함
MemberAddListener.java
ㄴ DataSource 의 getConnection() 대신 SqlSessionFactory 의 openSession() 이용하도록 함
MemberUpdateListener.java
ㄴ DataSource 대신 SqlSessionFactory 사용하도록 함
MemberUpdateListener.java
ㄴ DataSource 의 getConnection() 대신 SqlSessionFactory 의 openSession() 이용하도록 함
MemberDeleteListener.java
ㄴ DataSource 대신 SqlSessionFactory 사용하도록 함
MemberDeleteListener.java
ㄴ DataSource 의 getConnection() 대신 SqlSessionFactory 의 openSession() 이용하도록 함
=>
ㄴ 현재 Item 을 제외한 Board, Member 모두 제대로 출력됨을 확인
=> Item 도 Member 와 같은 방법으로 추가 및 수정해주기
++ 추가
MemberListListener.java
ㄴ 직원 목록에서는 직책은 출력하지 않도록 함