MyBatis
SQL Mapping Framework - Easy & Simple
자바 코드에서 SQL 문을 분리해서 관리
매개 변수 설정과 쿼리 결과를 읽어오는 코드를 제거
작성할 코드를 줄어서 생산성 향상 & 유지 보수 편리
MVNRepository 가서 코드 가져오자
MyBatis, MyBatis Spring 둘 다 필요함
Spring 을 5.0 이상의 버젼을 쓸 때
MyBatis 3.5 버젼 이상
MyBatis Spring 2.0 버젼 이상 써야 함
설정
root-context.xml 코드 추가
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<property name="mapperLocations" value="classpath:mapper/*Mapper.xml"/>
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactory"/>
</bean>
pom.xml 코드 추가
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.7</version>
</dependency>
mybatis-config.xml 추가
src / main / resources / mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias alias="BoardDto" type="com.jcy.usedhunter.domain.BoardDto"/>
</typeAliases>
</configuration>
board 테이블 생성
CREATE TABLE `usedhunter`.`board` (
`bno` INT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(100) NOT NULL,
`content` TEXT NOT NULL,
`writer` VARCHAR(30) NOT NULL,
`view_cnt` INT NULL DEFAULT 0,
`comment_cnt` INT NULL DEFAULT 0,
`reg_date` DATETIME NULL DEFAULT now(),
`up_date` DATETIME NULL DEFAULT now(),
PRIMARY KEY (`bno`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;
SqlSessionFactoryBean 과 SqlSessionTemplate
MyBatis, Interface
SqlSessionFactory - SqlSession 을 생성해서 제공
SqlSession - SQL 명령을 수행하는데 필요한 메서드 제공
MyBatis Spring, 구현부 class
SqlSessionFactoryBean - SqlSessionFactory 를 Spring 에서 사용하기 위한 빈
SqlSessionTemplate - SQL 명령을 수행하는데 필요한 메서드 제공. thread-safe
thread-safe 의 의미 : SqlSessionTemplate 을 이용해서 DAO 를 작성하고 공유할 때 안전하다.
root-context.xml
mapper 는 SQL 문서를 모아둔 곳
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<property name="mapperLocations" value="classpath*:/mapper/*Mapper.xml"/>
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactory"/>
</bean>
SqlSession 의 주요 메서드
String statement : SQL 문의 이름
Object parameter : SQL 문에서 '?' 값을 객체로 전달 (ex : User, Map)
메서드 | 설명 |
int insert(String statement) int insert(String statement, Object parameter) |
insert 문을 실행하고, insert 된 행의 개수를 반환 |
int delete(String statement) int delete(String statement, Object parameter) |
delete문을 실행하고, delete 된 행의 개수를 반환 |
int update(String statement) int update(String statement, Object parameter) |
update문을 실행하고, update된 행의 개수를 반환 |
T select(String statement) T selectOne(String statement, Object parameter) |
하나의 행을 반환하는 select 에 사용, parameter 로 SQL 에 binding 될 값 제공 |
List<E> selectList(String statement) List<E> selectList(String statement, Object parameter) |
여러 행을 반환하는 select 에 사용, parameter 로 SQL 에 binding 될 값 제공 |
Map<K, V> selectMap(String statement, String KeyCol) Map<K, V> selectMap(String statement, String KeyCol, Object parameter) |
여러 행을 반환하는 select 에 사용, keyCol에 Map의 key로 사용할 컴럼 지정 |
Mapper XML 의 작성
boardMapper.xml
insert 는 반환 타입이 항상 int 라 resultType 생략가능
<typeAliases> 으로 이름 짥게 하기
mybatis-config.xml
alias="BoardDto" 같이 별명은 대소문자 구별 안한다.
https://mybatis.org/mybatis-3/configuration.html#typeAliases
<configuration>
<typeAliases>
<typeAlias alias="BoardDto" type="com.jcy.usedhunter.domain.BoardDto"/>
</typeAliases>
</configuration>
'프로젝트 > 중고헌터' 카테고리의 다른 글
중고헌터 - 게시판 목록 만들기 (0) | 2022.10.03 |
---|---|
중고헌터 - MyBatis로 DAO 작성 (0) | 2022.10.02 |
중고헌터 - DAO(Data Access Object) 작성 2 (0) | 2022.09.29 |
중고헌터 - 데이터 변환과 검증 2 (0) | 2022.09.28 |
중고헌터 - 데이터 변환과 검증 (0) | 2022.09.28 |