basic/spring

[spring 05] mybatis 세팅, sql 적용

못지(Motji) 2021. 8. 8. 15:30

📃 mybatis 참고자료
https://mybatis.org/mybatis-3/ko/index.html

Mybatis

• 객체 지향 언어인 자바와 관계형 데이터베이스(Relational DataBase : RDB)
• 프로그래밍을 좀더 쉽게 할 수 있게 도와주는 DB 관련 프레임워크
• 자바 오브젝트와 SQL문 사이에 자동 매핑 기능을 지원하는 ORM 프레임워크
☑ ORM : Object-Relational Mapping
☑ iBatis, MyBatis, hibernate, JPA
☑ DB(oracle, mysql, mariaDB, mongoDB, MS...)

👀 전통적인 JDBC 프로그램 Mybatis
∙ 직접 Connection맺고 close() 자동으로 처리
∙ PreparedStatement  직접생성, 처리 내부적으로 처리
∙ setXXX() 직접 #{} 속성을 지정하면 내부적으로 자동 처리
∙ select 직접 ResultSet 처리 리턴타입 지정하는 경우 자동으로 객체생성

Mybatis 세팅

1. 라이브러리

☑ pom.xml
▪ mybatis
▪ mybatis-spring
▪ commons-dbcp
☑ lib
▪ ojdbc8.jar : 예전에는 Maven과 호환이 안되어 oracle에서 직접 다운받고 배치해야했다.


2. Mybatis 관련 설정 xml

∙ mybatis 홈페이지에 있음
∙ !DOCTYPE configuration 선언

 

3. spring-servlet.xml에 mybatis 커넥션 정보 설정

☑ <bean...> 3개 등록
▪ dataSource : DB 커넥션 정보 설정
▪ sqlSessionFactory : sqlSession 만들어주는 공장 (커넥션풀)
▪ sqlSession : 실제 sql 쿼리문을 날리기 위한 커넥션

 

4. mybatis-config.xml 마이바티스 설정 정보 세팅

 

☑ DAO와 xml 파일을 겸용해서 DB CRUD 대한 작업 진행.
▪ mapper의 위치 정보 : mapper : sql문을 작성해놓을 xml 파일들
▪ aliases : 별칭정보들 : mybatis에서 사용할 자바클래스의 경로 줄임말(별칭) 정리
#1. 매퍼 만들기 (sql 문 작성해놓는 파일) : namespace 반드시 지정
#2. mybatis-config.xml에 매퍼 파일 경로 설정

SQL 적용

SQL 태그

☑ 태그명

▪ select, insert, update, delete 같이 각 쿼리문에 따른 태그가 존재
☑ 속성
▪ id : 태그에 id 값 지정 (유일해야함)
▪ resultType : 자바로 따지면 쿼리문 실행후 결과에 따른 리턴타입
▪ int, string, DTO ( 하나의 레코드 기준으로 생각하기!)
▪ DTO는 결과의 컬럼수가 2개이상일 경우 사용
▪ 컬럼은 1개이고 레코드가 많으면 그냥 한개 컬럼의 데이터타입 작성

각 리턴타입은 레코드 한개에 대한 한개의 컬럼기준으로 타입을 적용
레코드 많은 것이 리턴될때는 해당 태그를 호출시 정해주기 떄문에
여기서 ex.List 인지 정할 필요가 없다.

# 자바에서 호출할때 한개 레코드 결과 받을때
sqlSession.,selectOne("namespace값.id값");

# 자바에서 호출할때 여러개 레코드 결과 받을때
sqlSession.selectList("namespace값.id값");

parameterType : 자바로 따지면 파라미터,
?에 채워줄 데이터의 타입을 지정
int, string, DTO, hashmap

DTO일 경우에는 aliases에 클래스 별칭을 지정해두었다면,
별칭으로 간단하게 지정. 안해놓았으면 전체 경로명 지정.

한개만 적용이 가능,
데이터가 여러개 받아야할경우 dto 또는 hashmap 으로 받는다

placeholder는 ? 대신 #{ } 
int, string -> #{value}
hashmap -> #{키값} / 객체 #{변수명}
${} --> 컬럼명을 작성할때 활용

sqlSession 메서드

(쿼리id = namespace값.id값)
• Object  selectOne("쿼리id")  : id에 대한 select 문 실행, 한개 레코드 리턴
• Object selectOne("쿼리id", 조건) : id에 대한 select 문 실행, 조건전달, 한개 레코드 결과 리턴
• List  selectList("쿼리id")  : id에 대한 select 문 실행, 여러 레코드 리턴
• List selectList("쿼리id", 조건) : id에 대한 select 문 실행, 조건전달, 여러 레코드 결과 리턴
• int insert("쿼리id", Object obj) : id에 해당하는 insert문 실행,
• int update("쿼리id", Object obj) : obj의 값을 조건값으로 id에 대한 update문 실행
• int delete("쿼리id", Object obj) : obj의 값을 조건값으로 id에 대한 delete문 실행

💡 CRUD
∙ Create  : insert
∙ Read : select
∙ Update : update
∙ Delete : delete