myBatis
myBatis는 Java Object와 SQL문 사이의 자동 Mapping 기능을 지원하는 ORM Framework
- MyBatis
- SQL문을 별도의 파일로 분리해서 관리 (.xml)
- SQL에 변경이 있을 때마다 자바 코드를 수정하거나 컴파일 하지 않아도 됨
- 개발자가 익숙한 SQL을 그대로 이용하면서 JDBC 코드 작성의 불편함 제거
- 도메인 객체나 VO 객체를 중심으로 개발 가능
- JAVA, C#, .NET, Ruby 등 다양한 언어로 구현 가능
MyBatis3
MyBatis3의 주요 Component
파일 | 설명 |
---|---|
MyBatis 설정파일 (sqlMapConfig.xml) | 데이터베이스의 접속 주소 정보나 객체의 alias, Mappping 파일의 경로 등의 고정된 환경 정보를 설정 |
SqlSessionFactoryBuilder | MyBatis 설정 파일을 바탕으로 SqlSessionFactory를 생성 |
SqlSessionFactory | SqlSession을 생성 |
SqlSession | 핵심적인 역할을 하는 Class로 SQL 실행이나 Transaction 관리를 실행 SqlSession 오브젝트는 Tread-Safe하지 않으므로 thread마다 필요에 따라 생성 |
mapping 파일 (member.xml) | SQL 문과 ORMapping을 설정 |
MyBatis-Spring
MyBatis와 Spring을 연결해주는 역할
MyBatis-Spring의 주요 Component
파일 | 설명 |
---|---|
MyBatis 설정파일 (sqlMapConfig.xml) | Dto 객체의 정보를 설정(Alias) |
SqlSessionFactoryBean | MyBatis 설정 파일을 바탕으로 SqlSessionFactory를 생성 Spring Bean으로 등록해야 함 |
SqlSessionTemplate | 핵심적인 역할을 하는 클래스로서 SQL 실행이나 Transaction 관리를 실행 SqlSession interface를 구현하며, Thread-safe함 Spring Bean으로 등록해야 함 |
mapping 파일 (member.xml) | SQL 문과 ORMapping을 설정 |
Spring Bean 파일 (beans.xml) | SqlSessionFactoryBean을 Bean에 등록할 때 DataSource 정보와 MyBatis Config 파일 정보, Mapping 파일의 정보를 함께 설정함 SqlSessionTemplate을 Bean으로 등록 |
Mapper Interface
mapping 파일에 기재된 SQL을 호출하기 위한 Interface
- packagename + “.” + InterfaceName + “.” + methodName이 namespace + “.” + SQL ID가 되도록 Namespace와 SQL ID를 설정해야 함
- Namespace 속성에는 package를 포함한 Mapper Interface의 이름을 작성
- SQL ID에는 mapping하는 method의 이름을 지정
1
2
3
4
5
6
7
<mapper namespace="com.ssafy.guestbook.model.mapper.MemberMapper">
<select id="idCheck" parameterType="string" resultType="int">
select count(userid)
from ssafy_member
where userid = #{userid}
</select>
</mapper>
동적 SQL
- 특정 조건이나 상황에 따라 변경되는 쿼리
- MyBatis의 강력한 기능 중 하나
- if : 조건문, where 절의 일부로 포함
1
2
3
4
5
6
7
<select id="findActiveBlogWithTitleLike" parameterType="Blog" resultType="Blog">
SELECT * FROM BLOG
WHERE state = ‘ACTIVE’
<if test="title != null">
AND title like #{title}
</if>
</select>
- choose (when, otherwise) : java의 switch 구문과 유사
- trim (where, set)
- foreach
DB
SQL(Structured Query Language)
- Database에 있는 정보를 사용할 수 있도록 지원하는 언어
- 모든 DBMS에서 사용 가능
기본 SQL 구문
- insert (C)
1
INSERT INTO table_name VALUES (col_val1, col_val2, ... col_valN);
- select (R)
1
2
SELECT * | { [ALL | DISTINCT] column | expression [alias], ... }
FROM table_name;
- update (U)
1
2
3
UPDATE table_name
SET col_name1 = col_val1, col_name2 = col_val2, ..., col_nameN = col_valN
WHERE conditions;
- delete (D)
1
DELETE from table_name WHERE conditions;
table 제약조건
- 컬럼에 저장될 데이터의 조건을 설정
- 제약조건을 설정하면 조건에 위배되는 데이터는 저장 불가
- 테이블 생성 시 컬럼에 직접 지정하거나, constraint로 지정, 또는 ALTER를 이용하여 설정 가능
제약조건 | 설명 |
---|---|
NOT NULL | 컬럼에 NULL값을 저장할 수 없음 반드시 쿼리문을 이용하여 값을 지정 |
UNIQUE | 컬럼에 중복된 값을 지정 불가 NULL값은 허용 |
PRIMARY KEY | 컬럼에 중복된 값 저장 불가, NULL 불가 주로 ROW를 구분하기 위한 유일한 값을 지정할 때 사용 ‘기본키’ |
FOREIGN KEY | 특정 테이블의 PK 컬럼에 저장되어 있는 값만 저장 ‘참조키’, ‘외래키’ NULL값 허용 references를 이용하여 어떤 컬럼에 어떤 데이터를 참조하는지 반드시 지정 |
DEFAULT | NULL값이 들어올 경우 기본으로 설정되는 값 지정 |
CHECK | 값의 범위나 종류 지정 |
시험범위
- myBatis
- 객체와 메서드
- 구성파일
- 태그들과 태그 속성 (sql, selectKey 포함)
- 동적쿼리 태그
- 테이블 제약조건
- PK, FK 설정이유: 데이터의 무결성
- 제약사항 종류
- index 특징, view 특징, 사용법
- Select
- 실행순서
- 연산자 (like, in, not in, is null 등)
- join
- 종류, 사용방법
- DDL
- 종류와 활용
- create table 테이블명 select ~ from ~
- 트랜잭션
- 그룹함수