티스토리 뷰
프로젝트를 만드는 과정을 기록해두자 !
| 프로젝트 생성
프로젝트 생성 및 기본 설정 세팅은 아래 포스트를 참고해보자.
| 필요 라이브러리 설정
MVC project 로 생성하면 아래 라이브러리는 자동으로 세팅된다.
- spring
- spring web
MyBatis 라이브러리
- Mybatis
MySQL 라이브러리
- mysql
spring-JDBC 라이브러리
spring-jdbc 와 spring 연동을 위해 spring version 이 필요하다.
/pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <!-- DB --> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.22</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.5</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${org.springframework-version}</version> </dependency> | cs |
spring transaction도 version을 현재 사용중이 spring version과 동일하게 해주자.
1 2 3 4 5 6 | <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${org.springframework-version}</version> </dependency> | cs |
version 을 변수로 사용할 수 있다.
원하는 변수명으로 태그를 만들고
${org.springframework-version} 로 사용할 수 있다.
1 | <org.springframework-version>5.2.6.RELEASE</org.springframework-version> | cs |
| MyBatis 관련 환경 설정
MyBatis 환경 설정을 위해
아래 두 파일이 필요한데 이전 프로젝트에서 사용하던 파일을 수정해서 사용하는게 편리하다.
- mybatis-config.xml
- mapper.xml
||| mybatis-config.xml
Dto 객체의 정보를 설정한다.
spring-mybatis를 사용하면서 기존에 작성해야했던 접속환경 정보가 다 필요 없어진다.
결국 필요한 정보는
<typeAliases>
<mappers>
만 남게된다.
src/main/resource/mybatis-config.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?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> <!-- 사용하려는 DTO에 대한 축약 이름 --> <typeAliases> <typeAlias type="com.cristoval.web.model.dto.Product" alias="product" /> </typeAliases> <!-- 사용할 쿼리에 대한 등록 --> <mappers> <mapper resource="product.xml" /> </mappers> </configuration> | cs |
||| mapper.xml
SQL 쿼리문과 ORMapping을 설정하는 파일이다.
우선 준비만 해두자!
| MyBatis 에 필요한 Bean 만들기
mybatis-spring 사용을 위해 아래 세 개의 Bean을 만들어주어야 한다.
ㅇ DataSource
ㅇ SqlSessionFactoryBean
- MyBatis 설정 파일을 파탕으로 SqlSessionFactory를 생성
- Spring Bean 으로 등록해주어야 함
ㅇ SqlSessionTemplate
- 핵심적인 역할을 하는 클래스, SQL 실행이나 Transaction 관리
- SqlSession interface를 구현하며, Thread-safe
- Spring Bean 으로 등록해주어야 함
MyBatis 사용을 위한 Bean들은 백엔드와 관련이 있으므로
ApplicationConfig에 만들어주자.
순수 mybatis는 MyBatisUtil.java 파일이 필요해서
"com.cristoval.web.util"을 ComponentScan에 포함시켜야 했지만,
mybatis-spring 연동으로 @Repository인 Imlp도 없어지고 대신 imterface를 @MapperScan으로 읽는다.
transactionManager는 spring transaction을 위해 만들었다.
src/main/java/com/cristoval/web/config/ApplicationConfig.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | package com.cristoval.web.config; import javax.sql.DataSource; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.transaction.PlatformTransactionManager; @Configuration @ComponentScan("com.cristoval.web.model") //@Repository인 Impl이 없어지고 대신 interface로 읽어서 등록 @MapperScan("com.cristoval.web.model.repo") public class ApplicationConfig { @Bean public DataSource ds() { DriverManagerDataSource ds = new DriverManagerDataSource(); ds.setDriverClassName("com.mysql.cj.jdbc.Driver"); // schema & 계정 정보 확인 ds.setUrl("jdbc:mysql://localhost:0000/ssafyweb?serverTimezone=UTC&useUniCode=yes&characterEncoding=UTF-8"); ds.setUsername("userId"); ds.setPassword("userPw"); return ds; } @Bean public SqlSessionFactoryBean factoryBean() { SqlSessionFactoryBean factory = new SqlSessionFactoryBean(); factory.setDataSource(ds()); factory.setConfigLocation(new ClassPathResource("mybatis-config.xml")); return factory; } @Bean public SqlSessionTemplate sqltemplate() throws Exception { SqlSessionFactoryBean factory = factoryBean(); SqlSessionTemplate template = new SqlSessionTemplate(factory.getObject()); return template; } @Bean public PlatformTransactionManager transactionManager() { return new DataSourceTransactionManager(ds()); } } | cs |
| 단위 테스트(DataSource, SqlSessionTemplate)
단위 테스트에 대한 자세한(?) 정보는
아래 포스트에 따로 정리해보았다.
src/test/java/com/cristoval/web/BeanTest.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | package com.cristoval.web; import static org.junit.Assert.assertNotNull; import javax.sql.DataSource; import org.junit.Test; import org.junit.runner.RunWith; import org.mybatis.spring.SqlSessionTemplate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import com.cristoval.web.config.ApplicationConfig; //단위테스트를 스프링과 연동 @RunWith(SpringRunner.class) //환경설정 파일 명시 @ContextConfiguration(classes = ApplicationConfig.class) public class BeanTest { private static final Logger logger = LoggerFactory.getLogger(BeanTest.class); // Autowired 로 Bean 생성 확인 @Autowired DataSource ds; @Autowired SqlSessionTemplate st; // 모든 테스트들은 @Test를 갖는다. @Test public void dsTest() { // DataSource가 null 이 아니다! assertNotNull(ds); } @Test public void templateTest() { // SqlSessionTemplate가 null 이 아니다! assertNotNull(st); } } | cs |
** 읽어보고 싶은 참고 글 **
[Spring-myBatis] Spring-myBatis 프로젝트를 만들어보자 !
'Web > Spring' 카테고리의 다른 글
[Spring-myBatis] Spring-myBatis Business Logic 구현을 해보자! (0) | 2020.10.23 |
---|---|
[Spring] 단위 테스트(spring-test, JUnit) (0) | 2020.10.23 |
[MyBatis] MyBatis Setting 을 해보자 ! (4) | 2020.10.22 |
[Spring] Spring@MVC 구조 및 @annotation 살펴보기. (0) | 2020.10.21 |
[Spring] Spring@MVC 프로젝트 세팅하기 (0) | 2020.10.21 |