[Spring] 프로젝트 커뮤니티,블로그 만들기(#3)-DB 연결+MyBatis 설정하기
안녕하세요 무작정 일단 따라 해 보는 Spring 커뮤니티 만들기 3탄 시작합니다.
환경
Eclipse 2019-9 Jee
JDK 1.8_231
Apache Tomcat 8.5.47
+ MariaDB 10.4.10
+ MyBatis 3.2.2
자 오늘은 제일 중요한 DB 연결을 해볼껀데요, DB는 MariaDB 10.4.10 version을 사용합니다. 참고 해주세요
Java로 DB 연결 할 때 꼭 필요한 준비물이 무엇입니까?
네? DB 연결 코드?
네?? 하느님께 기도하기?
네??? MariaDB는 모르겠다는 당신! 반성하십시오.
MSSQL, MySQL, MariaDB, PG등 모든 DB를 JAVA로 연결 할 땐 DB 드라이버 라이브러리가 필요합니다.
즉, jar 파일말입니다. Spring이 아니라면 jar 파일을 홈페이지에서 구해서 라이브러리 폴더에 넣어줘야 하지만
저희는 *Maven을 사용하고 있습니다. *Maven이 정확히 무엇인지는 모르겠지만
일단 라이브러리를 쉽게 다운받고 자동으로 등록 해주는 빌드 툴이라고만 알고 있읍시다.
대표적인 빌드 툴
*Gradle : 자바 프로젝트의 빌드(build)를 자동화 해주는 빌드 툴(build tool) (최신)
*Maven : 자바 프로젝트의 빌드(build)를 자동화해주는 빌드 툴(build tool)
1.Maven으로 MariaDB 라이브러리를 다운로드
https://mvnrepository.com/ 사이트 접속
검색 창에 mariadb 검색
1. MariaDB Java Client 클릭
Usages가 가장 많은 2.3.0 버전을 받겠습니다.
2.3.0 클릭
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>2.3.0</version>
</dependency>
코드 복사
프로젝트로 돌아와 pom.xml이라는 파일에 붙여넣기 후 파일 저장
2.Spring version 및 서블릿(servlet) version 변경
pom.xml 파일을 손 댄김에 Spring 버전도 바꿔줍니다.
Spring 프로젝트 기본 버전
Spring Framework 3.1.1
java version 1.6
Maven compiler
source 1.6
target 1.6
servlet-api 2.5
jsp-api 2.1
변경 후 버전
Spring Framework 4.3.4
java version 1.8
Maven compiler
source 1.8
target 1.8
servlet-api 3.0
jsp-api 2.2
주의 : Java version 1.8로 올릴땐 로컬에 설치된 Java가 1.8이상이여야 합니다.
Before
pom.xml
<properties>
<java-version>1.6</java-version>
<org.springframework-version>3.1.1.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
web.xml
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
After
pom.xml
<properties>
<java-version>1.8</java-version>
<org.springframework-version>4.3.2.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
주의 : servlet-api는 artifactId도 변경해야 됩니다.
web.xml
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
저장 후 Building workspace(n%)를 꼭 다 기다려주세요 꼭!
spring version, mariadb-java 잘 받아졌는지 확인
다 기다리셨으면 또 할 게 남아있습니다.
프로젝트 우 클릭 -> Properties -> Java Build Path -> Libraries 탭 클릭 -> JRE System Library 더블클릭 or Edit… 버튼 클릭 -> Java 1.6으로 설정 돼있는걸 로컬에 있는 Java 1.8 파일 선택 후 Finish 클릭
주의 : jre 말고 꼭 jdk를 사용하셔야 나중에 불이익(?)이 없습니다.
바로 Properties 창 Close 하지마시고
Project Facets 선택 -> Java 선택 -> 1.6 - 1.8로 변경 -> Runtimes 탭 클릭 -> Tomcat 체크 박스 체크 후
Apply and Close
또 기다림...
스프링은 설정이 반이라고 할 수 있는데요, 프레임워크를 쓰면 어쩔수 없이 설정부분이 많이 들어갑니다.
3.MyBatis 연결
자! 이제 DB 연결의 시작인데요 Java로 커넥션을 설정 할수도 있지만
저희는 바로 *MyBatis을 이용하여 Spring + *MyBatis를 사용합니다.
*MyBatis : 개발자가 하드코딩하는 걸 굉장히 줄여주는 아주 고마운 SQL 프레임워크 생산성 쑥쑥
설정
pom.xml 라이브러리 추가
(이제 감 잡으신 분들도 있겠지만 라이브러리 추가는 항상 pom.xml)
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.2</version>
</dependency>
<dependency><groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.0</version>
</dependency>
<dependency> <groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
WEB-INF - spring - root-context.xml
root-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- mariaDB와 연결을 담당하는 dataSource -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="org.mariadb.jdbc.Driver"></property>
<property name="url" value="jdbc:mariadb://127.0.0.1:3306/데이터베이스이름"></property>
<property name="username" value="root"></property>
<property name="password" value="password"></property>
</bean>
<!-- SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="/WEB-INF/spring/mybatis/mybatis-config.xml"></property>
</bean>
<!-- SqlSessionTemplate -->
<bean id="sqlSessoinTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
</bean>
</beans>
WEB-INF - spring - mybatis 폴더 생성 - mybatis-config.xml 파일 생성
mybatis-config.xml
<?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>
<typeAliases>
<typeAlias alias="board" type="com.company01.springEx01.logic.Board"/>
</typeAliases>
<mappers>
<mapper resource="mapper/board-Mapper.xml"/>
</mappers>
</configuration>
src/main/resources -> mapper 폴더 생성 -> board-Mapper.xml 생성
board-Mapper.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="mapper.board-Mapper">
<select id="getBoardList" resultType="board">
select * from board;
</select>
</mapper>
4.MariaDB 만들기
MariaDB 접속 (HeidiSQL 이용)
새 DB 만들기
CREATE DATABASE toyblog;
새 Table 만들기
CREATE TABLE board (
id INT AUTO_INCREMENT PRIMARY KEY,
subject VARCHAR(64),
context VARCHAR(512),
attachments VARCHAR(64),
likes INT,
views INT,
create_time DATETIME,
update_time DATETIME
)
INSERT INTO board VALUES(1,'제목1','내용1','첨부없음',0,0,NOW(),NULL);
가짜 데이터도 하나 넣어주었습니다.
파일 제공
5.MyBatis를 이용한 DB 값 받아오기
src/main/java -> com.company01.springEx01 -> logic -> Board(VO). java 생성
Board.java
public class Board {
private int id;
private String subject;
private String context;
private String attachments;
private int likes;
private int views;
private Date create_time;
private Date update_time;
//get and set ...
}
여기까지 만드시고
Source 탭 -> Generate Getters and Setters 클릭 후 Select All -> Generate 버튼 클릭
Source 탭 -> Generate toString().... 클릭
src/main/java -> com.company01.springEx01 -> service -> BoardService.java(인터페이스) 생성
import java.util.List;
import com.company01.springEx01.logic.Board;
public interface BoardService {
List<Board> getBoardList();
}
주의 : BoardService class를 만드는게 아니고 interface를 만드는 겁니다.
src/main/java -> com.company01.springEx01 -> service -> BoardServiceImpl.java 생성
BoardServiceImpl.java
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.company01.springEx01.dao.BoardDAO;
import com.company01.springEx01.logic.Board;
@Service
public class BoardServiceImpl implements BoardService{
@Autowired
BoardDAO boardDAO;
public List<Board> getBoardList() {
return boardDAO.getBoardList();
}
}
src/main/java -> com.company01.springEx01 -> dao -> BoardDAO.java 생성
BoardDAO.java
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.company01.springEx01.logic.Board;
@Repository
public class BoardDAO {
@Autowired
public SqlSession sqlSession;
public List<Board> getBoardList() {
return sqlSession.selectList("getBoardList");
}
}
src/main/java -> com.company01.springEx01 -> controller-> ViewController.java
ViewController.java
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.company01.springEx01.logic.Board;
import com.company01.springEx01.service.BoardService;
@Controller
@RequestMapping("view/*")
public class ViewController {
@Autowired
BoardService boardService;
@RequestMapping("view/dashboard")
public ModelAndView dashboard() {
List<Board> result = boardService.getBoardList();
System.out.println(result);
ModelAndView mav = new ModelAndView();
return mav;
}
}
결과
성공적으로 MyBatis를 이용한 DB 연결이 됐습니다.
얼추 세팅이 맞췄으니, 다음부턴 본격적으로 게시판 만들기에 돌입하겠습니다.
최종 Project Explorer
'Spring > 커뮤니티(블로그) 프로젝트' 카테고리의 다른 글
[Spring] 프로젝트 커뮤니티,블로그 만들기(#5)-회원가입,로그인,로그아웃 구현하기 (5) | 2019.12.08 |
---|---|
[Spring] 프로젝트 커뮤니티,블로그 만들기(#4)-게시판 작성,수정,삭제(CRUD) 만들기 (1) | 2019.11.30 |
[Spring] 프로젝트 커뮤니티,블로그 만들기(#2)-package 생성 및 설정 (Feat.Controller,Service,DAO) (4) | 2019.11.17 |
[Spring] 프로젝트 커뮤니티,블로그 만들기(#1)-프로젝트 생성 및 톰캣 설정,인코딩 설정 (0) | 2019.11.17 |