티스토리 뷰

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();
	}
}

 

  • 코드를 다 작성 한 후의 전체적인 구조는 다음과 같다.

 

  • 실행결과

Main 화면
링크2 클릭 후 화면

 

 

 

 

2019.09.20(금)

String Boot + MySQL + Mybatis

'SpringBoot' 카테고리의 다른 글

[SPRING BOOT] Eclipse Spring Boot Setting  (0) 2019.09.19
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/05   »
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
글 보관함