1. DataBase 연결을 위한 pom.xml(Project Object Model)에 dependency 추가
* pom.xml에 dependency를 추가하기 전에 JDBC와 MyBatis를 확인한다.
* JDBC
: JDBC(Java DataBase Connectivity)란 자바에서 DB 프로그래밍을 위해 사용되는 API
: DB와 관련된 일을 처리하며, DB 종류에는 상관없다.
필요 구성요소
- JDBC Driver
: DBMS와 통신을 담당하는 자바 클래스
: 각 DB에 맞는 드라이버가 필요하다.
- JDBC URL
: DBMS와 연결을 위한 식별자
: DBMS 드라이버 마다 식별자가 다르다.
: 구성- jdbc:[DMBC]:데이터베이스 식별자
ex) MySQL : jdbc:mysql://ip:port/DataBase명
- DB UserName, Password 등
* MyBatis
: 객체지향언어인 자바의 관계형 데이터베이스 프로그래밍을 보다 쉽게 도와주는 프레임워크
: JDBC보다 더 편리하게 데이터베이스 프로그래밍을 할수 있다.
- 특징
1. SQL문이 코드로부터 완전히 분리 : 기존에는 DAO파일에 모든 SQL문을 작성하였지만,
MyBatis는 Mapper 파일에 SQL문을 적어놓고 필요할때마다 DAO 파일에서 가져와서 사용
2. 생산성 : 코드가 짧다
3. 유지보수성 향상 : 프로그램 코드와 SQL문의 분리로 인한 코드의 간결성 및 유지보수성 향상
- 본론으로 들어가 이제 dependency를 추가하자
<!--JDBC(Java DataBase Connectivity) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>1.4.1.RELEASE</version>
</dependency>
<!-- MySQL -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!--MyBatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.2</version>
</dependency>
dependendcy를 추가하고 라이브러리들을 update 하기 위해 Maven > Update Project 적용
2. DB 연결정보 설정을 위한 application.properties 설정 정보 추가
- src/main/resources > application.properties 설정 정보 추가
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/DataBase 명
spring.datasource.username=유저명
spring.datasource.password=패스워드
3. DB연결 및 SQL문을 실행하기 위한 메인함수에 설정 추가
- src/main/java > 프로젝트명Application.java 라는 폴더가 있을것이다.
Main 함수 안에 내용을 추가한다.
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception{
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
return sessionFactory.getObject();
}
실제로 MyBatis에서 SQL문을 실행하는 SqlSession 객체가 필요하다. 이러한 SqlSession 객체를 생성하기 위해 Main 함수에 구문을 추가한것이다.
* @Bean 과 @Component 어노테이션
: @Bean 과 @component 어노테이션 둘다 Spring(IOC) Container에게 Bean으로
등록하도록 하는 어노테이션이다.
하지만 둘의 차이점이 있다.
@Bean : 개발자가 직접 제어 불가능한 외부 라이브러리등을 Bean으로 생성할때 사용하는 어노테이션
@Component : 개발자가 직접 작성한 class를 Bean으로 등록하기 위한 어노테이션
* SqlSession, SqlSessionFactory, SqlSessionFactoryBuilder, SqlSessionFactoryBean, DataSource
SqlSession : 실질적인 SQL문을 실행, 트랜잭션 제어
SqlSessionFactory : SqlSesstion 객체를 생성하기 위한 구성요소
SqlSessionFactoryBuilder : MyBatis의 구성파일을 읽어 SqlSessionFactory를 생성하는 Builder
SqlSessionFactoryBean : MyBatis 구성파일을 생성하지 않고 SqlSessionFactoryBuilder가
SqlSessionFactoy를 생성할수 있게 도와준다.
3. 요청을 받는 Controller, 비즈니스 로직을 처리하는 Service, SQL문을 가지고 있는 Mapper 추가
- Controller.java
@Controller
public class SpringTestController {
@Autowired
SpringTestService ss;
@RequestMapping(value="/test")
public String springTestController(Model model) {
model.addAttribute("count", ss.springTestCountService());
return "test";
}
}
Model을 사용하여 view에서 보여질 데이터를 model 객체에 담는다.
- Service.java
@Service
public class SpringTestService {
@Autowired
SpringTestMapper sm;
public int springTestCountService() {
return sm.test();
}
}
- Mapper.interface
public interface SpringTestMapper {
final String TEST="SELECT count(*) FROM app_target";
@Select(TEST)
int test();
}
어노테이션만으로 쿼리를 실행 시킬수 있는 기능인 @Select 어노테이션이다.
간단하게 DB에 접근 할수 있고 동적쿼리가 아니라면 @Select 어노테이션을 사용하면 좋다.
@Select 어노테이션 말고도 @Insert, @Update, @Delete가 있다.
4. 화면을 보여주는 view인 jsp 파일 추가
- Controller에서 추가한 model 객체의 attributeName과 같은 이름으로 jsp에 추가한다.
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
화면테스트입니다.
count : ${count}
</body>
</html>
5. Spring Boot 실행 후 화면 확인!
완료!