본문 바로가기
네이버클라우드/JAVA 웹 프로그래밍

JAVA 48일차 (2023-07-28) 자바 프로그래밍_52. Mybatis SQL-mapper 프레임워크 사용하기_Member_개인프로젝트 - 마트 관리 시스템

by prometedor 2023. 7. 28.
## 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

 

mybatis – MyBatis 3 | Configuration

Configuration The MyBatis configuration contains settings and properties that have a dramatic effect on how MyBatis behaves. The high level structure of the document is as follows: configuration properties These are externalizable, substitutable properties

mybatis.org

ㄴ 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

 

mybatis – MyBatis 3 | Configuration

Configuration The MyBatis configuration contains settings and properties that have a dramatic effect on how MyBatis behaves. The high level structure of the document is as follows: configuration properties These are externalizable, substitutable properties

mybatis.org

 

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

ㄴ 직원 목록에서는 직책은 출력하지 않도록 함