Mybatis
- 쿼리문만 적으면 알아서 DB에서 데이터를 꺼내오는 프레임워크
- 거의 모든 jdbc 관련 코드를 자동으로 생성해준다.
- 개발자는 사용할 쿼리문과 종류만 선택하면 된다.
필요한 의존성(dependency)들
- mybatis
- mybatis-spring
- spring-jdbc
적용 순서
1. DBCP로 DataSource 객체를 생성한다.
2. 생성한 DataSource 객체를 전달해 SqlSessionFactoryBean 객체를 생성한다.
(컨텍스트상에 sqlSessionFactory가 있으면 mybatis가 알아서 필요할 때 가져다 사용한다.)
<bean id="sqlSesseionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="hikariDataSource"/>
</bean>
3. mybatis-spring:scan 기능을 통해 패키지의 위치를 지정한다.
<mybatis-spring:scan base-package="com.ezen.springdatabase.mapper" />
pom.xml에 mybatis 적용법
root-context.xml에 mybatis 설정법
Mapper
- Mybatis에 Mapper 인터페이스를 등록하면 해당 Mapper의 정보를 통해 자동으로 메서드를 생성해준다. (리턴 타입, 쿼리문, 쿼리문 타입)
- 어노테이션 방식의 Mapper와 XML 방식의 Mapper가 있다.
어노테이션 방식 Mapper
@Select(query)
@Insert(query)
@Delete(query)
@Update(query)
- 조회하는 데이터가 여러 행인 경우 List타입으로 리턴해준다.
- 조회하는 데이터가 한 행인 경우 해당 DTO타입으로 리턴해준다.
- 쿼리문에 파라미터가 필요한 경우 #{property}로 사용하고 @Param("name")으로 지정해준다.
package com.ezen.springdatabase.dto;
import lombok.Data;
@Data
public class EmployeeDTO {
private Integer employee_id;
private String first_name;
private String last_name;
private Integer salary;
private Integer manager_id;
}
package com.ezen.springdatabase.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Select;
import com.ezen.springdatabase.dto.EmployeeDTO;
public interface EmployeeMapper {
@Select("select * from employees")
List<EmployeeDTO> getAll();
}
XML 방식 Mapper
1. Mapper Interface를 생성한다. (메서드만 정의하고 어노테이션은 사용하지 않는다.)
2. resources 밑에 해당 Mapper가 속한 패키지의 경로대로 폴더를 생성한다.
(폴더를 하나씩 생성하는 것이 좋다.)
3. 해당 폴더에 같은 이름의 Mapper.xml을 생성한다.
4. xml의 형식은 mybatis의 공식 페이지를 참조한다.
package com.ezen.springdatabase.mapper;
import java.util.List;
import com.ezen.springdatabase.dto.BoardDTO;
public interface XMLBoardMapper {
List<BoardDTO> getAll();
int add(BoardDTO board);
BoardDTO getBoard(int board_id);
String getPw(int board_id);
int updateBoard(BoardDTO board);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ezen.springdatabase.mapper.XMLBoardMapper">
<select id="getAll" resultType="com.ezen.springdatabase.dto.BoardDTO">
SELECT * FROM board
</select>
<select id="getBoard" parameterType="int"
resultType="com.ezen.springdatabase.dto.BoardDTO">
SELECT * FROM board where board_id=#{board_id}
</select>
<select id="getPw" parameterType="int" resultType="String">
SELECT board_pw FROM board where board_id=#{board_id}
</select>
<update id="updateBoard" parameterType="com.ezen.springdatabase.dto.BoardDTO">
update board set board_title=#{board_title}, board_content=#{board_content},
writer_date=sysdate where board_id=#{board_id}
</update>
</mapper>
pom.xml 설정 정리
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ezen</groupId>
<artifactId>springboard</artifactId>
<name>SpringBoard</name>
<packaging>war</packaging>
<version>1.0.0-BUILD-SNAPSHOT</version>
<properties>
<java-version>1.8</java-version>
<org.springframework-version>5.2.24.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- AspectJ -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- @Inject -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2.1-b03</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<!-- Utils -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.28</version>
<scope>provided</scope>
</dependency>
<!-- Database -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>4.0.3</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.7</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.9</version>
<configuration>
<additionalProjectnatures>
<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
</additionalProjectnatures>
<additionalBuildcommands>
<buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
</additionalBuildcommands>
<downloadSources>true</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<mainClass>org.test.int1.Main</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
'Spring' 카테고리의 다른 글
[Spring] Log4jdbc (0) | 2023.07.11 |
---|---|
[Spring] 프로젝트 계층 분리 (0) | 2023.07.11 |
[Spring] Connection Pool (0) | 2023.07.06 |
[Spring] Controller (0) | 2023.07.04 |
[Spring] Lombok (0) | 2023.07.04 |