티스토리 뷰
String Boot + MySQL + Mybatis
- Eclipse를 사용하였으며 String Boot setting 부터 해야 된다면 아래 사이트 참고
https://hwan1001.tistory.com/67
[SPRING BOOT] Eclipse Spring Boot Setting
Eclipse Spring Boot Setting Step 1. 프로젝트 생성 [Help] -> [Eclipse Marketplace] -> sts 검색 -> Spring tools 4 - for Spring Boot 설치 -> Eclipse restart [File] - [New] - [other...] - [spring] - [..
hwan1001.tistory.com
- DataBase는 연동 확인을 위해 간단히 구성이 되어 있다고 생각하고 진행한다.
1. pom.xml 파일에 아래와 같은 dependency 추가
- 앞서 필요한 dependency는 위 Spring Boot Setting 링크에 있으므로 거기에 추가하면 된다.
<!-- JDBC -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!-- MySQL -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
<!-- JSTL -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
2. application.properties 파일에 아래와 같은 설정을 추가
- JSP와 DB를 사용하기 위한 값을 설정한다. DB정보는 본인의 DB 설정에 맞게 입력하면 됨
- application.propeties의 파일은 아래와 같다
server.port=8000 // URL에서 8080 대신 8000 으로 접근 하기 위함.
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/newew_blog?serverTimezone=UTC&autoReconnect=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=hwan1234
3. 디렉토리 구조는 다음과 같이 설정하고 코드 순서 역순으로 코드를 작성해보자.
4. 코드 작성
- Controller가 service를 호출
- Service는 Dao를 호출, Service는 Dao를 호출하고 반환받은 데이터를 가공(Mapper 사용)
- Dao는 DB 값 select (id값을 이용해 Mapper가 select 문을 실행시킨다.)
- DB 값 select 한 값을 BoardModel에 값 저장(Model -> DTO(Getter, Setter))
- 이 과정을 아래서 부터 역순으로 코드 작성
- pack.model(DTO)
- BoardModel.java 작성
// BoardModel.java
package pack.model;
import java.util.Date;
public class BoardModel {
private String id;
private String subject;
private String content;
private Date reg_date;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getReg_date() {
return reg_date;
}
public void setReg_date(Date reg_date) {
this.reg_date = reg_date;
}
}
- Mapper
- board.xml 작성
- mapper로 db값을 select 하는 즉, 질의문을 실행시켜서 데이터 값을 받아온다.
// board.xml
<?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="pack.dao.BoardDao">
<select id="boardList" resultType="pack.model.BoardModel">
SELECT * FROM board;
</select>
</mapper>
- pack.dao(DAO)
- BoardDao.java, BoardDaoImpl.java 작성
// BoardDao.java
package pack.dao;
import java.util.List;
import pack.model.BoardModel;
public interface BoardDao {
public List<BoardModel> boardList() throws Exception;
}
// BoardDaoImpl.java
package pack.dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import pack.model.BoardModel;
public class BoardDaoImpl implements BoardDao {
SqlSession sqlSession;
public static String nameSpace = "pack.dao.BoardDao";
@Override
public List<BoardModel> boardList() throws Exception {
return sqlSession.selectList(nameSpace + ".boadList");
}
}
- pack.service
- BoardService.java, BoardServiceImpl.java 작성
// BoardService.java
package pack.service;
import java.util.List;
import pack.model.BoardModel;
public interface BoardService {
public List<BoardModel> boardList() throws Exception;
}
// BoardServiceImpl.java
package pack.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import pack.dao.BoardDao;
import pack.model.BoardModel;
@Service
public class BoardServiceImpl implements BoardService {
@Autowired
BoardDao dao;
@Override
public List<BoardModel> boardList() throws Exception {
return dao.boardList();
}
}
- pack.controller
- BoardController.java 작성
package pack.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import pack.model.BoardModel;
import pack.service.BoardService;
@Controller
public class BoardController {
@Autowired
BoardService service;
@RequestMapping("list")
public String boardList(Model model) throws Exception {
List<BoardModel> boardList = service.boardList();
model.addAttribute("boardList", boardList);
return "list";
}
}
- pack.config
- DataSourceConfig.java, DataAccessConfig.java 작성
- DataSourceConfig.java
- DB 사용을 위한 설정 파일로 application.properties에 선언된 spring.datasource.* 값들로 DataSource로 빌드 하기 위해 사용한다.
- DB 연동은 다른 방법으로도 가능하지만 보다 편리한 유지보수를 위해 클래스 파일로 분리하는 작업
- DataAccessConfig.java
- 마이바티스 사용을 위해 SqlSessionFactoryBean를 생성하기 위한 클래스이다.
- 마이바티스 역시 다른 방법으로의 연동도 가능하지만 보다 편리한 유지보수를 위해 클래스 파일로 분리
// DataAccessConfig.java
package pack.config;
import javax.sql.DataSource;
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;
@Configuration
@MapperScan(basePackages = "pack.dao")
public class DataAccessConfig {
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
return sessionFactory.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
// DataSourceConfig.java
package pack.config;
import javax.sql.DataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Configuration;
@Configuration
public class DataSourceConfig {
@ConfigurationProperties(prefix="spring.datasource")
public DataSource dataSource(){
return DataSourceBuilder.create().build();
}
}
- 코드를 다 작성 한 후의 전체적인 구조는 다음과 같다.
- 실행결과
2019.09.20(금)
String Boot + MySQL + Mybatis
'SpringBoot' 카테고리의 다른 글
[SPRING BOOT] Eclipse Spring Boot Setting (0) | 2019.09.19 |
---|
댓글