INTRO
[Spring boot] spring boot + mariaDB 연동하기[JSP사용] - 1편
틀린 부분이 보인다면 댓글을 주시길 바란다.
1. spring boot 프로젝트 생성 |
--> 우선 스프링부트 프로젝트를 생성한다.
--> 프로젝트 이름은 Test_App2로 하고,
--> Gradle Project 로 생성할 것이다.
--> Java version은 11이다.
--> 추가적으로 package 이름을 헷갈리지 않게 하기위해 com.gg로 만들었다.
-->종속성은 다음과 같이 4개를 추가한다.
--> 완료된 모습
2. MariaDB 설정하기 |
--> MariaDB 설치와 테이블 생성(Create)은 아래 포스팅을 참고한다.
--> 설치
-->테이블 생성
-->user 테이블을 생성하고, 데이터를 몇개 추가해준다.
3. application.properties 파일 수정 |
--> 다음과 같이 DB 접속에 관련된 정보들을
--> 자동 생성된 파일인 application.properties에 적어준다.
--> 주의깊게 볼 점은,
--> url에서 localhost:3306뒤에 /test1이라고 적은 것이다.
--> 데이터베이스 이름을 적어준다. 아까 생성한 test1을 적었다.
application.properties
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/test1
spring.datasource.username=root
spring.datasource.password=root
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
-->위 4줄은 MariaDB 를 사용하기 위한 접속 정보이다.
-->아래 2줄은 기존 Spring에선 View Resolver라 불렀던 내용으로,
JSP파일을 사용하기 위해 접두어, 접미어를 설정하는 것이다.
추후 저 경로에 .jsp파일이 저장 될 것이다.
--> 여기까지 진행한 뒤 프로젝트를 실행해본다.
--> 정상 실행된다면 Boot Dashboard에 서버가 정상적으로 올라왔다는 표시가 나타난다.
(localhost:8080은 접속은 되나 아직 아무것도 있지 않아 404 error가 뜬다.)
--> 만약 아래와 같은 오류가 Console 창에 뜬다면, 오타가 없는지 잘 살펴본다.
--> DB 접속에 관련된 '종속성'을 프로젝트 생성할 때 추가했으나, application.properties에 정의되어있지 않다는 내용의 오류다.
--> 이외에도 여기까지 실행이 되지 않으면 프로젝트를 삭제하고 다시 만들어 차근차근 따라해 본다.
4. Gradle 종속성(Dependency)추가 |
--> 최초 프로젝트 생성 후 아무것도 추가하지 않았다면 다음과 같은 화면일것이다.
build.gradle
--> 여기에 Lombok을 사용하기 위한 아래 종속성을 추가한다.
compileOnly 'org.projectlombok:lombok'
Lombok설치에 관련된 내용은 아래 포스팅을 참고한다.
--> Spring boot의 내장 Tomcat에서는 jsp를 기본 지원 하지 않는다고한다.
따라서 jsp를 사용하기 위한 아래 종속성을 추가한다.
implementation 'javax.servlet:jstl'
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
--> 추가 한 뒤의 모습
--> 이후 프로젝트 우클릭 -> gradle ->refresh gradle project 를 해준다.
--> 여기까지 하고 또 실행해본다. 계속 실행해보는 이유는 어디서 오류가 났는지 쉽게 찾기 위함이다.
6. Mapper만들기 |
--> com.config라는 패키지를 하나 만들고, 그 안에 UserMapper.xml이라는 xml파일을 만들어준다.
--> 이 Mapper는 DB에 날릴 쿼리문을 정의하는 곳이다.
--> Mybatis가 있기 때문에 이 Mapper를 통해서 DB에 접근이 가능한것이다.
--> 아래와 같이 Mapper를 만들어준다.
--> 주의깊게 볼 점은,
--> namespace에는 파일 이름을 적어준다.
--> id에는 나중에 DAO에서 사용할 함수명(메서드명)을 적어준다.
--> resultType에는 원래 com.gg.dto.UserDTO 와 같이 적어주어야 하지만, Spring 의 @Alias 어노테이션을 사용할 것이므로, "User"만 적어주면 된다.
UserMapper.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="UserMapper">
<select id="userList" resultType="User">
SELECT * from user;
</select>
</mapper>
--> 이후 application.properties파일에 매퍼의 경로와 DTO의 경로를 적어준다.
application.properties
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
mybatis.type-aliases-package=com.gg.dto
mybatis.mapper-locations=com/config/*Mapper.xml
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
7. Package추가(dto,dao,service,controller) |
-->패키지 4개를 생성해준다.
주의할 점은, 최초 생성된 root package인 com.gg패키지의 하위 패키지로 생성해야 한다는 점이다.
-->1. dto(VO)를 만든다.
--> 주의깊게 볼 점은,
--> Mapper에 DTO를 쉽게 알리기 위해 @Alias 어노테이션을 사용하였다는 점.
--> lombok을 사용하여 @getter, setter, tostring을 사용했다는 점.
--> 기본 생성자를 포함한 생성자들을 만든 점.
package com.gg.dto;
import org.apache.ibatis.type.Alias;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Alias("user")
@Getter
@Setter
@ToString
public class UserDTO {
int id;
String name;
String gender;
String city;
public UserDTO() {}
public UserDTO(int id, String name, String gender, String city) {
super();
this.id = id;
this.name = name;
this.gender = gender;
this.city = city;
}
public UserDTO(String name) {
super();
this.name = name;
}
}
--> 2. (@Repository) DAO interface와 impl(Class)를 만든다.
--> 이 DAO가 실질적으로 DB를 사용해 데이터를 조회/수정/삽입/삭제 등을 한다.
--> Data Access Object의 약자이다.
--> 주의깊게 볼 점은,
--> interface를 만들고, 추상 메서드를 만든다.
--> 이 메서드 명은 Mapper의 id와 같아야 한다.
--> class를 만들고, 추상 메서드를 구현한다.
--> 이 메서드 명도 Mapper의 id와 같아야 한다.
--> 또한 이 구현 class에는 @Repository 어노테이션을 넣어줘야한다.
UserDAO.java(Interface)
package com.gg.dao;
import java.util.List;
import org.mybatis.spring.SqlSessionTemplate;
import com.gg.dto.UserDTO;
public interface UserDAO {
public abstract List<UserDTO> userList(SqlSessionTemplate session);
}
UserDAOImpl.java
package com.gg.dao;
import java.util.List;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Repository;
import com.gg.dto.UserDTO;
@Repository
public class UserDAOImpl implements UserDAO{
@Override
public List<UserDTO> userList(SqlSessionTemplate session) {
return session.selectList("UserMapper.userList");
}
}
--> 3. (@Service)Service interface와 impl(Class)를 만든다.
--> 이 Service에서 DAO를 접근한다.
--> 그리고 실질적인 비즈니스 로직을 여기서 구현한다.
--> 주의깊게 볼 점은,
--> interface를 만들고, 추상 메서드를 만든다.
--> 이 메서드 명은 Mapper의 id와 같아야 한다.
--> class를 만들고, 추상 메서드를 구현한다.
--> 이 메서드 명도 Mapper의 id와 같아야 한다.
--> 또한 이 구현 class에는 @Service 어노테이션을 넣어줘야한다.
UserService.java
package com.gg.service;
import java.util.List;
import com.gg.dto.UserDTO;
public interface UserService {
public abstract List<UserDTO> userList();
}
UserServiceImpl.java
package com.gg.service;
import java.util.List;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.gg.dao.UserDAO;
import com.gg.dto.UserDTO;
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserDAO dao;
@Autowired
SqlSessionTemplate session;
@Override
public List<UserDTO> userList() {
return dao.userList(session);
}
}
--> 4. (@Controller) Controller를 만든다.
--> 이 Controller에서 Service에 접근한다.
--> 주의깊게 볼 점은,
--> @Controller어노테이션을 넣어줘야 한다는 것이다.
package com.gg.controller;
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.gg.dto.UserDTO;
import com.gg.service.UserService;
@Controller
public class UserController {
@Autowired
UserService service;
@RequestMapping("/")
public ModelAndView SelectAllFromUser() {
ModelAndView mav = new ModelAndView("test");
List<UserDTO> userList = service.userList();
mav.addObject("list",userList);
return mav;
}
}
8. JSP파일 만들기 |
--> 아래와 같은 경로에 test.jsp파일을 만들어준다.
--> 주의해야 할 점은, main-> webapp-> WEB-INF -> views(또는 jsp)이런 경로를 꼭 맞춰줘야 한다.
--> 이렇게 하면 controller에서 test.jsp를 참조할것이다.
test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>View Test Page</title>
</head>
<body>
<h2>Hello!</h2>
<div>JSP List Test</div>
<c:forEach var="item" items="${list}" varStatus="idx">
${idx.index} Hello! ${item.name} <br />
</c:forEach>
</body>
</html>
9. 실행해보기 |
--> 이제 모든 준비가 끝났다. 실행해본다.
--> 정상적으로 뜨는 것을 확인할 수 있다.
--> 다음과 같은 에러가 뜰 수 있다.
--> 아래 포스팅을 참고하면 된다.
마무리
초보의 입장에서 spring boot + mariaDB (jsp사용) 프로젝트를 만들어봤다.
틀린 부분, 문의사항 등이 있는 경우 댓글에 남겨주시면 수정하도록 하겠다.
-퍼가실 때는 출처를 꼭 같이 적어서 올려주세요!
'Dev > [Java]' 카테고리의 다른 글
[Spring-Mybatis]Mapped Statements collection does not contain value for 에러 (0) | 2021.03.24 |
---|---|
[lombok] lombok 설치해보기 (0) | 2021.03.22 |
log4j 사용 방법 (0) | 2021.02.08 |
lombok 설치 방법 + Gradle MariaDB설치 (0) | 2021.02.08 |
[Spring Boot] JSP로 붙여보기 (0) | 2021.02.04 |