개발환경
Intellij ultimate version
MariaDB
Mybatis
패키지 구조
field | type |
id | varchar(20) |
name | varchar(20) |
passwd | varchar(20) |
테이블명 test
컬럼은 id, name, passwd로 3개
데이터는 임시로 3개 정도 넣어두었음.
Intellij로 spring initializr를 이용하여 Maven 기반 스프링 프로젝트를 생성한다
STEP 1. pom.xml에 Maven dependency 추가
아래의 denpendency를 삽입하면 intellij에서 자동으로 import를 해준다.
mybatis와 mybatis-spring이 잘 구동되기 위한 버전 조합이 따로 있으니 수정시 유의할 것!
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
STEP 2. DB접근 Session을 관리하는 Databaseconfig 파일 추가
DB에 접속하고 접속 session을 관리하는 class를 생성해 주어야 한다.
SqlSessionFactory는 SqlSessionTemplate을 만들기 위한 설정 객체이다.
Factory를 만들려면 db에 대한 정보 한, domain에 대한 정보가 필요하다
domain이란 db에서 가져온 객체를 1:1 매칭할 클래스를 뜻한다.
주의사항! 본인의 패키지 경로에 맞에 설정할 것! 무턱대고 복붙하지 않을것!
package me.yukyeong.demo.db;
import org.apache.ibatis.session.SqlSessionFactory;
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.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages="me.yukyeong.demo.mapper")
@EnableTransactionManagement
public class DatabaseConfig {
@Bean
//프로젝트의 어디에서나 쓸 수 있도록 bean에 등록
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
sqlSessionFactory.setDataSource((javax.sql.DataSource) dataSource);
sqlSessionFactory.setTypeAliasesPackage("me.spring_boot_init.demo.dto");
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
sqlSessionFactory.setMapperLocations(resolver.getResources("classpath:mapper/*.xml"));
return sqlSessionFactory.getObject(); //factory를 만들어서 bean에 등록
}
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) throws Exception {
final SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
return sqlSessionTemplate;
}
}
STEP 3. application.properties 파일에 db 정보를 입력
데이터베이스명에 본인의 데이터베이스 이름을 넣어 코드를 작성할 것
## LOCAL MARIA
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/데이터베이스명?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=본인의 비밀번호를 넣으세요
STEP 4. Dto 클래스 생성하기(Test.java)
lambook을 사용할 경우에는 getter 그리고 setter를 만들지 않아도 자동으로 관리해준다고 한다.
하지만 기본 프로젝트를 수행하는 중이기 대문에 getter and setter를 만들어 보았다.
intellij에서 getters setters를 쉽게 작성하기 위해서는 (절대 손코딩 아님)
alt + insert 를 누르고 getter and setter를 누르면 된다. 매우 간편하니 꼭 이용하도록 할 것. 시간 절약에 도움이 된다.
(우리는 초보자이기 때문에 추후에 오류를 잡는데도 시간이 많이 소요될 것이므로...)
package me.yukyeong.demo.dto;
public class Test {
private String id;
private String name;
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
private String passwd;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
STEP 5. resources/mapper/TestDB.xml 파일 생성하기
- mapper namespace는 반드시 만들 Mapper interface와 동일한 경로로 설정할 것
- resultType은 STEP4에서 만든 Dto클래스의 경로를 넣어줄 것. 데이터의 반환 타입이므로!
- 여기서는 Test 테이블의 모든 레코드를 출력하는 select문으로 작성함
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="me.yukyeong.demo.mapper.TestMapper">
<select id="getAll" resultType="me.yukyeong.demo.dto.Test">
SELECT * FROM Test
</select>
</mapper>
STEP 6. TestMapper.java interface 만들기
interface로 만들면 함수 몸체를 구현하지 않아도 되기 때문에 interface로 만든다.
package me.yukyeong.demo.mapper;
import me.yukyeong.demo.dto.Test;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
public interface TestMapper {
public List<Test> getAll();
}
STEP 7. TestService.java 만들기
어떤 로직을 수행할 때 이 service 안에서 수행하는 것이 Spring 개발에서 통용되는 부분이다
package me.yukyeong.demo.Service;
import me.yukyeong.demo.dto.Test;
import me.yukyeong.demo.mapper.TestMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class TestService {
@Autowired
TestMapper testMapper;
public List<Test> getAll() throws Exception{
return testMapper.getAll();
}
}
STEP 8. TestController.java 만들기
- Service를 호출하고 결과를 return 하는 Controller.
- Mapping은 URL요청을 Springboot에서 자동으로 Mapping해주는 annotation이다.
- 서버에 localhost:8080/query URL로 서버에 요청하게 될 것.
package me.yukyeong.demo.Controller;
import me.yukyeong.demo.Service.TestService;
import me.yukyeong.demo.dto.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class TestController {
@Autowired
TestService testService;
@RequestMapping("/query")
public List<Test> query() throws Exception{
return testService.getAll();
}
}
처음에 만들자면 어렵지만 많이 해보면 편리함에 감탄하게 되는 spring boot를 통해 db를 연동해보았다.
다음에는 Spring Security를 통해 사용자 인증을 구현해보도록 하겠다.
참고한 페이지
https://4urdev.tistory.com/46?category=761752
http://progtrend.blogspot.com/2018/07/spring-boot-security.html