※ 개인적인 개발 수업 정리글입니다. 꾸준히 정리할 예정이고 틀린 부분이 있다면 언제든지 댓글 환영입니다.
왜 mybatis를 쓰는가?
JDBC의
stmt의 단점: sql을 만들기가 어려워서
pstmt로 sql에 ?쓰면서 썼지만, 역시 컬럼이 많으면 데이터나 select로 꺼내오기가 너무 어려웠음
그래서 이걸 "몇개의 별도의 파일들로, SQL을 분리해서, 자동으로 관리하게 해주는"
MYBatis
장점: sql이나 쿼리를 만들 후에 꺼내온 데이터로 작업한게 엄청 줄어듦.
단점: 그 동작시키기 위해서 처음에 설정해야하는게 많음.
-마이바티스 쓸거면(=SqlSessionFactory, Configuration, Mapper, properties 사용하려면)
=> 드라이버 org6_g랑 mybatis 둘다 라이브러리에 등록하고 써야함.
-파일의 내용이 구현은 안되어있어도, 끌어오려는 곳에 파일 자체는 있어야함!!!!
-모델클래스의 멤버변수이름=DB의 컬럼이름, 반드시 꼭 동일해야하고 다르면 문제 생김(소문자통일)
-xml 파일을 만들면, 제일 먼저 xml 파일 먼저 읽음.
- MyBatis 설정파일(SqlMapConfig.xml) : [DB의 접속 주소 정보나 Mapping 파일의 경로 등]의 고정된 환경정보 설정
- SqlSessionFactoryBuilder : MyBatis 설정 파일을 바탕으로 SqlSessionFactory를 생성한다.
- SqlSessionFactory : SqlSession을 생성한다.
- SqlSession : 핵심적인 역할을 하는 클래스로서 SQL 실행이다 트랙잭션 관리를 실행한다. SqlSession 오브젝트는 Thread-Safe 하지 않으므로 thread마다 필요에 따라 생성한다.
- Mapping 파일(ㅁㅁMapper.xml) : SQL문과 OR Mapping을 설정한다.
properties(DB4가지정보),Mapper(sql문)을 -> Configu가 모아서 잡고 있음
-> MySqlSessionFactory가 정리해서 SqlSession함수로 쓸 수 있게 해줌
(Test main이 원하는 sql를 하고 싶다고 입력하면)
-> Service에는 [SqlSession함수 호출]하는 함수가 있고
-> DAO에는 [SqlSession함수 호출하는 함수]를 호출하는 함수로
-> Mapper의 sql문이 DB와 연결되어서 실행되는거임
<내가 정리한 mybatis 코드 작성하는 순서>
0. 드라이브를 프로젝트 라이브러리에 등록
1. properties에 DB 4가지 정보가 제대로 되어있는지 확인.
2. Config에 properties 4가지 정보와, Mapper가 등록되어있는지 확인.
////////////////////여기까지 mybatis쓸 준비 완료////////////////////
3. Test main에서 servcie.함수() 호출 코드 적기
-> Service에서 dao.함수() 호출
-> DAO에서 Mapper 함수 호출
-> Mapper에 sql 작성
-> Mapper의 sql이 DB에 연결되고, DB에서 select,insert into,update,delete연결가능.
<MySqlSessionFactory.java> [4]
SqlSession 생성하는 코드
SqlSession함수가 Mapper의 sql문을 return시켜줌
얘가 [DB 4가지 정보, sql문 있는 Mapper]를 품고 있는 Configu의 모든 걸 다 읽어봄.
Factory의 SqlSession함수가 Configu가 품고 있는 Mapper에 있는 sql을 return시켜줌
<Configuration.xml> [3]
-4가지정보properties랑, sql문 있는 Mapper까지 품고 있고, SessionFactory가 그걸 읽음
-properties의 4가지 정보를 읽어오고(='DB연결'), sql문 있는 Mapper 경로가 제대로 등록되어있어야함.
< Mapper.xml> [2] <===sql문을 DB랑 연결시킴
-DB로 보낼, SQL문 (또는 Mapping)을 설정
-사용할 id가 중요함
< jdbc.properties > [1] DB의 4가지 정보
거의 건들일 없음. 계정 바꿀 때 말고는.
-(key, value)로 이루어졌는데, 데이터타입을 문자열 String으로 밖에 쓸 수 없음.
-오라클 DB연동을 위한 4가지 정보를 아예 이 properties에 빼둘거임.
<자바의 다중클래스 처리에 마지막 책273쪽>
프로젝트 JDBC_MyBatis_Ver_1 생성
드라이버 임포트 +
Dept
int deptno;
String dname;
String loc;
//멤버변수, 기본생성자,전체생성자, 겟셋함수, toString함수
RecordNotFoundException
public RecordNotFoundException(String message) {
super(message);
}
DeptMapper.XML
프로젝트 - src 오른쪽클릭 - New - Others - XML - XML File - File name : 이름넣고 - Finish -Design 보기와 Source 보기 있음
ㄴ하나의 mapper 틀만 만들어 둔거임
<프로젝트 마이바티스 설정 스탭>1.프로젝트생성, driver build path지정2.패키지생성
,3.Jdbc.properties파일의4가지정보설정후파일붙이기 =>쫌따 만들거임4.모델클래스파일만이라도생성, mapper.xml 빈껍데기파일만생성후패키지에붙여넣기
5. Configuration.Xml에서properties, alias, mapper지정 <=여기해야함. 오류 진짜 많이 나는데, 한번 만들면 개꿀
6. MySqlSessionFactory 파일붙여넣기
7. 서비스에서MySqlSessionFactory사용하기
configuration.XML
※이클립스는 가끔 만든 xml에 문제가 없는데 빨간 오류 뜰때가 있음.
그럴 땐, [ 전체선택-잘라내기-xml 저장- 다시 붙여넣기-저장 ] 하면 해결됨
┌configuration에 mapper 추가┐
<프로젝트 마이바티스 설정 스탭>1.프로젝트생성, driver build path지정2.패키지생성
3.Jdbc.properties파일의4가지정보설정후파일붙이기 =>이거 넣었고,4.모델클래스파일만이라도생성, mapper.xml 빈껍데기파일만생성후패키지에붙여넣기
5. Configuration.Xml에서properties,alias, mapper지정 <=여기했음.
직접적음, 안쓸거임, 가져옴
6. MySqlSessionFactory 파일붙여넣기 <=이제 이거 할거임
7. 서비스에서MySqlSessionFactory사용하기
MySqlSessionFactory 클래스
//connection 연결과 같은(커넥션은 안씀) , DAO에서 사용할 SqlSession객체
//Configuration.xml를 이용해서 SqlSession객체를 생성하고 리턴시켜주는 클래스
<프로젝트 마이바티스 설정 스탭>1.프로젝트생성, driver build path지정2.패키지생성3.Jdbc.properties파일의4가지정보설정후파일붙이기4.모델클래스파일만이라도생성, mapper.xml 빈껍데기파일만생성후패키지에붙여넣기5. Configuration.Xml에서properties, alias , mapper지정
직접적음, 안쓸거임, 가져옴6. MySqlSessionFactory 파일붙여넣기
7. 서비스에서MySqlSessionFactory사용하기
< 에러 정리하기 >
1. resource에 "Configuration.xml"를 잘못 넣었을때,
2. configuration.xml안에서 resource="Mapper.xml"를 잘못 썻을때
3. xml의 블럭을 안 닫아주면 뜨는 오류
4. driver 이름을 잘못 적었으면, ClassNotFoundException 뜸
5.
6. SQL 계정이름 오류면
7. Mapper에 문제가 있다면,
ㄴ select id가 틀렸을 경우에 뜨는 오류
8. sql문의 컬럼명을 잘못 썻을 때
9. 세미콜론 ; 안써야한느데 썼을때
10.
11.
완전히 새로 만드는 반복
프로젝트 JDBC_MyBatis_Ver_1_1
- 먼저 com.dto패키지, com.exception패키지,
DeptMapper.xml, configuration.xml 복사하기
<프로젝트 마이바티스 설정 스탭>1.프로젝트생성, driver build path지정2.패키지생성3.Jdbc.properties파일의4가지정보설정후파일붙이기3-1. MySqlSessionFactory클래스 생성(모냐 이건?)
4.모델클래스파일만이라도생성, mapper.xml 빈껍데기파일만생성후패키지에붙여넣기
5. Configuration.Xml에서properties, alias , mapper지정
직접적음, 안쓸거임, 가져옴
6. MySqlSessionFactory 파일붙여넣기
7. 서비스에서MySqlSessionFactory사용하기
JDBC_MyBatis_Ver_1_1프로젝트 순서는
1. com.dto패키지, com.exception패키지,
DeptMapper.xml(내용비우고 틀만), configuration.xml 복사하기
2. Main클래스 생성, 작성
3. Service클래스 생성, 작성?
4. DAO 클래스 생성, 작성?
5. Mapper 내용 채우기
프로젝트 JDBC_MyBatis_Ver_2
<오류 떴을때 내용>
IOException : 파일의 이름이 틀렸거나, 경로가 틀렸거나, 뭐가 잘못됐거나 3가지 경우중 하나.
3. Test main에서 servcie.함수() 호출 코드 적기
-> Service에서 dao.함수() 호출
-> DAO에서 Mapper 함수 호출
-> Mapper에 sql 작성
-> Mapper의 sql이 DB에 연결되고, DB에서 select,insert into,update,delete연결가능.
디벨로퍼에 데이터 insert
ㄴmain에서 {
Service클래스 사용할 수 있는 service 변수 생성 ;
service.insert (새 객체생성(담을 내용)) ; <=== Service의 insert함수 부르고
ㄴService클래스의 insert함수 {
SqlSessionFactory의 SqlSession공간을 불러옴.
dao.insert(session랑 같이, main이 줬던 값 dept) ; <=== DAO클래스의 insert함수 부르고,
ㄴdao의 insert 함수 {
session.insert(Mapper의 sql문 id="deptInsert"에, main이 줬던 값 dept) ; 을 넣어서 요청
ㄴMapper의 sql문
<insert id="deptInser" parameterType="com.dto.Dept"> 아직도 DTO가 이해가 안가냐..
insert into dept (deptno,dname,loc) values ( #{deptno} , #{dname} , #{loc} )
</insert>
아까 main의 ( #{deptno} , #{dname} , #{loc} )가
99 , "개발" , "강남" 인거임
DB와 연결해서 보낼 Mapper의 sql문 작성 끝났고,
main 실행
<SQL디벨로퍼 결과>
'Govern > JDBC, mybatis, Eclipse EE' 카테고리의 다른 글
08-03(화) 2.Mapper에 selectByHashMap만들기 (0) | 2021.08.03 |
---|---|
08-03(화) 1. Mapper에 insert, delete, update 만들기 (0) | 2021.08.03 |
08-02(월) (0) | 2021.08.02 |
07-30(금) (0) | 2021.07.30 |
07-28(수) JDBC, mybatis 넣는 방법 (0) | 2021.07.28 |