가자공부하러!

4. Spring Boot Oracle DB 연동(JSP, MyBatis) 본문

공부/Spring Boot

4. Spring Boot Oracle DB 연동(JSP, MyBatis)

오피스엑소더스 2019. 7. 15. 21:16


3차 시도 ( 성공 )


참고사이트 : https://www.youtube.com/watch?v=3tWkcJOI-uo

결과 : 성공

5_JSP_oracleDBConnectTestWithMybatis.zip


결과 : 프로젝트는 잘 작동하지만 DB값을 받아오지 못하는 상태

- DAO쪽에 문제가 있는 듯

- @Select 공부 필요 (참고 : https://daitso.kbhub.co.kr/44499/)


* 중요 : dependency 확인 필수

  > JSP : tomcat-embed-jasper, javax-inject, jstl


0. 개발 환경

  > jdk 8(1.8)

  > sts3 (:: Spring Boot :: (v2.1.6.))

  > oracle 11g


1. 프로젝트 생성

  > spring starter project

- project name : 4_oracleDBConnectTestWithMybatis

- artifact : oracleTest4

- package : com.example.mybatisTest

- boot version : 2.1.6(강의:2.1.2)

- dependencies

- SQL : MySQL Driver, JDBC API, MyBatis Framework

- Template Engines : ThymeLeaf

- Web : Spring Web Starter (00:04:55)


2. 디렉토리 구조

  > pom.xml 확인

- 숨어있는 설정이 꽤 있다.

  > src/main/java

- src/main/java/com/example/mybatisTest : 자동으로 메인메서드가 생성된 클래스가 있는 경로(시작클래스)

- Run 해보자! -> Spring Boot App -> 세팅이 완료되지 않아서 오류가 발생한다.

- Reason: Failed to determine a suitable driver class

- Tomcat이 내장되어 있음을 확이할 수 있다.

- 기존 실행중이던 톰캣은 종료시켜야 한다.

  > src/main/resources/static

- js, images, css 등 리소스가 들어감

  > src/main/resources/templates

- JSP를 대체하는 template들이 들어감

  > [설정파일] src/main/resources/application.properties


3. Thyme leaf?

  > Spring Boot는 JSP 대신 template을 사용하는 것을 권장함.

  > Thyme leaf는 template의 일종이며 JSP를 완전히 대체할 수 있음.

  > JSP를 사용하기 위한 추가 작업이 필요


4. JSP를 먼저 시작해봅니다.

  > JSP를 사용하기 위한 추가 작업

- src/main 하위에 디렉토리 추가

- src/main/webapp

- src/main/webapp/WEB-INF

- src/main/webapp/WEB-INF/views

- application.properties 설정

- pom.xml에서 thymeleaf 라이브러리 주석 처리


5. oracle DB 연동을 위한 사전 작업

  > properties 아래에, dependencies 위에 repositories 추가

- maven저장소에 잘 안올라옴... 오라클ㅆ

- maven 표준 저장소 외에 oracle dependency를 다운로드 할 수 있는 경로를 추가한 것

  > dependencies 수정

- javax.inject

- spring-boot-starter-thymeleaf

- spring-boot-devtools : java source가 변경되면 auto restart가 안되는 boot의 단점을 잡아줌(가능하게끔)

- tomcat-embed-jasper : tomcat에서 JSP를 사용할 수 있게끔 해주는lib

- JSTL

- ojdbc6

- spring-boot-starter-jdbc

- mybatis : 3.5.0

- mybatis-spring : mybatis와 spring을 연결해서 사용할 수 있게끔 해주는 lib

- mybatis-spring-boot-starter

- mysql-connector-java

- spring-boot-starter-web

- spring-boot-starter-test

  > application.properties (#이 주석이고, 파일 우클릭-properties->encoding을 UTF-8로 바꿔주면 한글주석 가능)

#db connection(oracle) - 연결정보
spring.datesource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:this:@localhost:1521/xe
spring.datasource.username=hr
spring.datasource.password=1234
#http port set
server.port=18086
#view resolver(템플릿 대신 JSP 사용할 경우)
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
server.servlet.jsp.init-parameters.development=true
#custom error page
server.error.whitelabel.enabled=false


6. 시작 클래스

  > Application.java

- mapper 설정 (방법 2 사용)

- 방법1 : Bean 어노테이션을 추가한 sqlSessionFactory 메소드를 정의하고 src/main/resources/mapper.xml에 따라 설정을 하는 방법

- 방법2 : Spring Boot Application에 Bean 어노테이션을 추가한 SqlSessionFactory ~ SqlSessionTemplate ~ SqlSession 작성

- SqlSessionFactory를 만들고, SqlSessionFactory가  SqlSessionTemplate을 만들고, SqlSessionTemplate이 SqlSession을 만드는 절차


7. 컨트롤러 작성

  > src/main/java/com.example.mybatisTest.controller.HelloController.java

  > ModelAndView 타입을 매개변수로 받고 추가 설정(setViewName, addObjec)을 해준 후 리턴

- setViewName : 뷰(페이지)의 이름을 설정

- addObject : ModelAndView 객체에 데이터 저장

- return : 데이터 전달(화면 출력)


8. 뷰 작성

  > hello.jsp


9. 현재까지 상태 확인 (Run)

  > 실행 성공

- localhost:포트 -> 스프링 부트 애플리케이션


10. DB준비 - 방명록 페이지 DB 생성 및 설정

  > CREATE TABLE GUESTBOOK

  > CREATE SEQUENCE GUESTBOOK_SEQ

  > INSERT INTO GUESTBOOK


11. Model 작성 (DTO, DAO, Service)

  > DTO : com.example.mybatisTest.model.dto.GuestbookDTO.java

- 변수 선언 : DB TABLE의 컬럼명과 동일하게 작성해야 함

- getter/setter 작성

  > DAO : com.example.mybatisTest.model.dao.GuestbookDAO.interface

- interface를 호출할 때 interface의 메소드에 sql어노테이션이 선언되어 있으면 해당 sql이 실행됨

- Spring Boot Application에 MapperScan 경로를 설정해줬기 때문에 인식 가능

  > Service : com.example.mybatisTest.service.GuestbookService.java

- Service.impl : com.example.mybatisTest.service.GuestbookServiceImpl.java

- @Service를 통해 Bean으로 등록


12. Contoller 작성 : com.example.mybatisTest.controller.GuestbookController

  > @Controller를 통해 Controller Bean으로 등록

  > @Inject로 Service 등록

  > @RequestMapping으로 요청신호 받음

  > Service에서 List 받아옴

  > ModelAndView 설정(setViewName, addObject(list))

  > ModelAndView return


13. Thymeleaf 템플릿 활성화

  > application.properties JSP설정 주석처리, thymeleaf 설정 주석 해제

  > pom.xml thymeleaf 주석 해제

  > html작성 (src/main/templates)

- 작성한 html은 최종 결과물이 아니고 한번 가공해서 보여줌

- xml문법을 따름

- 태그 잘 설정해줘야 함(단독태그 슬래시 등)


14. 정적 요소 적용(css, js)

  > src/main/resources/static/css, js/파일

  > html에 적용

- css : <link rel="stylesheet" type="text/css" th:href="@{/css/my.css}">

- js :

  > include header : src/main/resoutces/templates/include 경로에 header 작성





2차 시도


참고사이트 : https://offbyone.tistory.com/18

참고사이트 : https://nemew.tistory.com/16


0. 개발 환경

  > jdk 8(1.8)

  > sts3

  > oracle 11g


1. 프로젝트 생성...

실패



1차 시도


참고사이트 : https://mainia.tistory.com/5634

0. 개발 환경

  > jdk 8(1.8)

  > sts3

  > oracle 11g


1. 프로젝트 생성

  > Project Name : oracleDBConnectTestWithMybatis

  > spring starter project

  > maven

  > dependencies

- Spring Web Starter, Spring REST Docs, MySQL Driver, MyBatis Framework, Lombok

- tomcat-embed-jasper

  > application.properties

- port : 18084

- db :

- spring.datasource.url=jdbc:mysql://localhost/hr/hr

  > 여기까지 하고 임시 Controller 생성해서 작업완료 확인(시간찍어보기)

  > DB연결이 안된다?

- Failed to load class of driverClassName com.mysql.cj.jdbc.Driver 처럼 뜨지?
- application properties에 cj.을 지워봅시다 (com.mysql.jdbc.Driver)

- src/main/webapp/WEB-INF/lib에 ojdbc를 추가합시다


2. MyBatis 연동 설정

  > DatabaseConfiguration.java

- 위에서 미리 성정한 datasource를 실제로 사용하기 위한 코드 작성

- Mapper나 DAO 레벨에서 쿼리xml을 인식할 수 있도록 위치를 지정

  > DAO 작성

  > query.xml 작성

  > 실행 오류

- UnsatisfiedDependencyException

- DatabaseConfiguration.java에 classpath:부분을 classpath*:로 변경

- Run 성공

- [WARN] No MyBatis mapper was found in '[com.mybatisTest]' package. Please check your configuration.


실패







Comments