스프링 프레임웍에서 MyBatis, Oracle 사용하기

프로그래밍/스프링프레임워크 2018. 4. 1. 21:30
반응형

Spring4 + MyBatis + Oracle 을 연동해 봅니다. 앞에서 만들었던 샘플 프로젝트 ( "Spring MVC 샘플 프로젝트 버전3 에서 버전 4로 마이그레이션 하기" ) 를 사용합니다.

 

1. 먼저 설치한 Oracle 데이터베이스에 유저를 추가하고 테스트용 테이블 을 생성합니다.  SYSTEM 계정으로 들어가서 다음 명령으로 사용자를 추가합니다. 아이디와 비밀번호는 xeuser 입니다.

 

GRANT CONNECT, RESOURCE TO xeuser IDENTIFIED BY xeuser;

 

Oracle 테스트 계정 추가


 

 

SQL Developer 에서 명령 실행은 실행하고자 하는 쿼리를 블럭으로 선택한 후 F9 또는 Ctrl+Enter 입니다.

이제 생성된 계정으로 들어가서 테스트용 테이블을 생성합니다.

 

테스트용 테이블 생성 및 데이터 입력


 

CREATE TABLE TB_BOARD (
   NUM        NUMBER(10)    NOT NULL,
   NAME       VARCHAR2(20)  NOT NULL,
   TITLE      VARCHAR2(100) NOT NULL,
   CONTENT    CLOB          NULL,
   READ_COUNT NUMBER(10)    DEFAULT 0 NOT NULL,
   WRITE_DATE DATE          NOT NULL
);
ALTER TABLE TB_BOARD ADD CONSTRAINT PK_BOARD PRIMARY KEY (NUM);
INSERT INTO TB_BOARD VALUES (1, '홍길동','게시물 작성', '글 내용', 0, SYSDATE);
SELECT * FROM TB_BOARD;

ALTER TABLE TB_BOARD DROP CONSTRAINT PK_BOARD;
DROP TABLE TB_BOARD;

 

SQL Developer 에서 스크립트 실행은 F5 입니다. 아래의 DROP 명령은 삭제할 때 만 사용합니다.^^


 

2. pom.xml 파일에 필요한 의존성을 추가합니다. 추가 후 프로젝트에 마우스 오른쪽 키를 클릭하여 Maven -> Update Project 를  실행합니다.


<!-- 오라클 JDBC 드라이버를 가져오기 위해 리포지토리를 추가합니다. -->

<repositories>
  <repository>
   <id>oracle</id>
   <url>http://maven.jahia.org/maven2</url>
  </repository>
</repositories>


<!-- 스프링에서 JDBC 를 사용하기 위한 라이브러리 입니다. -->
<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>


<!-- 오라클 JDBC 드라이버 -->
<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc6</artifactId>
    <version>12.1.0.2</version>
</dependency>


<!-- MyBatis 라이브러리 -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.1</version>
</dependency>

<!-- 마이바티스와 스프링 연동을 위한 라이브러리 -->

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.3.0</version>
</dependency>


필요한 라이브러리가 있을 경우 http://search.maven.org 등에 들어가서 검색을 해서 찾아서 넣으면 됩니다.

 

메이븐 레포지토리 화면


 

 


3. root-context.xml 파일에 데이터베이스 연결 설정, MyBatis 설정, Transaction 을 추가 한다. 스프링 루트 컨텍스트 입니다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:tx="http://www.springframework.org/schema/tx"
 xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">

    <!-- 데이터베이스 연결 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:xe" />
        <property name="username" value="xeuser"/>
        <property name="password" value="xeuser"/>
    </bean>

    <!-- SqlSession  -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />

        <!-- MyBatis 설정 파일의 위치를 지정합니다. -->
        <property name="configLocation" value="classpath:/mybatis-config.xml" />

        <!-- SQL 파일의 위치를 지정합니다. -->
        <property name="mapperLocations" value="classpath:/sqlmap/*.xml" />
    </bean>

    <!-- SqlSession -->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
        <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
    </bean>

    <!-- 지정된 베이스 패키지에서 DAO(Mapper) 를  검색하여 등록합니다.
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
         <property name="basePackage" value="com.tistory.pentode.service.dao" />
    </bean>

    <!-- 트랜잭션 매니저 bean 을 등록합니다. -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

     <!-- 아노테이션 기반의 트랜잭션을 사용합니다. -->
     <tx:annotation-driven transaction-manager="transactionManager"/>

</beans>

 

위에서 beans, tx 등의 네임스페이스가 사용되었습니다. 파일 상단에 xmlns 로 지정 되는 부분입니다. 파일 내부에서 사용되는 태그의 네임페이스가 지정되어야 합니다. eclipse 의 에디터로 설정파일을 열면 하단의 네임스페이스 탭에서 필요한 네임스페이스를 선택하여 쉽게 추가할 수 있습니다.

 

beans 네임스페이스


 

 


4. 웹 컨텍스트를 설정합니다.

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:beans="http://www.springframework.org/schema/beans"
 xmlns:context="http://www.springframework.org/schema/context"
 xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

 <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->

 <!-- Enables the Spring MVC @Controller programming model -->
 <annotation-driven />

 <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
 <resources mapping="/resources/**" location="/resources/" />

 <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
 <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <beans:property name="prefix" value="/WEB-INF/views/" />
  <beans:property name="suffix" value=".jsp" />
 </beans:bean>

 <context:component-scan base-package="com.tistory.pentode" />

</beans:beans>

 

위에서 두개의 컨텍스트를 설정했습니다. Root 컨텍스트와 Web 컨텍스트 입니다. 스프링 컨텍스트는 빈을 관리한다고 생각하면 되겠습니다. Root 가 최상위가 되고 그 하위 컨텍스트로 Web 컨텍스트가 만들어집니다. 웹 컨텍스트는 여러개 만들 수 있습니다. Servlet-Dispatcher 를 여러개 설정하면 됩니다.

 

같은 레벨의 컨텍스트 사이에서는 상대방의 Bean  에 접근을 할 수가 없지만 상위 컨텍스트의 Bean 에는 접근이 가능합니다. 즉 Root 컨텍스트는 모든 하위 컨텍스트에서 공유가 되는겁니다. 그래서 보통 공통으로 사용할 필요가 있는 데이터베이스 연결, 서비스, DAO 등을 Root 컨텍스트에서 설정하고, 웹 컨텍스트에서만 사용되는 Controller 는 각각의 웹 컨텍스트에서 설정하는 식으로 많이 사용됩니다.


root-context.xml 과 servlet-context.xml 파일에서 보면 각각 <bean/> 태그와 <beans:beans/> 태그가 사용되고 있다는 것을 알 수 있습니다. 둘의 기능적 차이는 없습니다. 완전히 같은 것 입니다. 그런데 표기 방법이 달라지는 것은 디폴트 네임스페이스 때문입니다.

 

최상위 요소 <beans 바로 뒤에 나오는 xmlns= 로 바로 시작하는 네임스페이스가 디폴트 네임 스페이스 입니다. 디폴트 이외에는 xmlns:beans= 처럼 네임스페이스를 적어야 합니다. 디폴트 네임스페이스는 본문에 태그를 적을때 네임스페이스를 빼고 적어도 됩니다.


<beans xmlns="http://www.springframework.org/schema/beans"

          ....... />

   <!-- 기본 네임스페이스가 beans 이므로 바로 쓸 수 있습니다. -->

   <bean ....> </bean>

</beans>

 

<beans:beans xmlns="http://www.springframework.org/schema/mvc"

                ....  />

    <!-- 기본 네임스페이스가 mvc 이므로 bean 앞에 네임스페이스를 적어야 합니다. -->

    <beans:bean ...> </beans:bean>

</beans:beans>

 


5. 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>

    <!-- 여러가지 기본 옵션을 지정합니다. -->
    <settings>
          <!-- 오라클 필드 속성이 READ_COUNT 처럼 언더 스코어가 있을 때 VO 의 readCount 처럼 카멜 케이스로 변환 되게 합니다. -->
          <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <typeAliases>
          <typeAlias alias="boardVO" type="com.tistory.pentode.vo.BoardVO"/>
    </typeAliases>

</configuration>

6. Tb_Board_SQL.xml SQL 맵핑 파일을 만듭니다.

<?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">

<!-- 맵핑될 DAO 인터페이스의 Full name 을 줍니다. -->
<mapper namespace="com.tistory.pentode.service.dao.BoardDAO">

<!-- id 속성은 DAO 의 메소드와 같아야 한다. 여기의 boardVO 는 mybatis-confg.xml 에 Alias 되어 있습니다. -->
 <select id="selectBoardList" resultType="boardVO">
  SELECT NUM
       , NAME
       , TITLE
       , CONTENT
       , READ_COUNT
       , WRITE_DATE
       FROM TB_BOARD
   ORDER BY NUM DESC
 </select>

</mapper>

 

7. VO 클래스를 만듭니다. 일부만 적었습니다. getter/setter 는 이클립스 Source 메뉴에서 Generate Getters and Setters 기능으로 자동으로 만들 수 있습니다. toString() 메소드도 자동으로 추가할 수 있습니다.

package com.tistory.pentode.vo;

import java.sql.Date;

public class BoardVO {
    private Integer num;
    private String name;
    private String title;
    private String content;
    private Integer readCount;
    private Date writeDate;

 

8. DAO 인터페이스를 만듭니다.

package com.tistory.pentode.service.dao;

import java.util.List;
import com.tistory.pentode.vo.BoardVO;

public interface BoardDAO {
     List selectBoardList() throws Exception;
}

 

9. 서비스 인터페이스를 만듭니다.

package com.tistory.pentode.service;

import java.util.List;
import com.tistory.pentode.vo.BoardVO;

public interface BoardService {
     List selectBoardList() throws Exception;
}

 

10. 서비스 구현 클래스를 만듭니다.

package com.tistory.pentode.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.tistory.pentode.service.BoardService;
import com.tistory.pentode.service.dao.BoardDAO;
import com.tistory.pentode.vo.BoardVO;

@Service("boardService")
public class BoardServiceImpl implements BoardService {

     @Autowired
     private BoardDAO boardMapper;

     @Override
     @Transactional
     public List selectBoardList() throws Exception {
         return boardMapper.selectBoardList();
     }

}

 

11. 컨트롤러에 Request를 추가합니다.

@Resource(name = "boardService")
private BoardService boardService;

@RequestMapping(value = "/boardList.do")
public String boardList(Model model) throws Exception {

    List list = boardService.selectBoardList();

    logger.info(list.toString());

    model.addAttribute("list", list);

    return "boardList";
}

 

12. 뷰페이지를 만듭니다.

<%@ page contentType="text/html; charset=euc-kr" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page session="false" %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-kr"/> <title>Home</title> </head> <body> <h1>Board List</h1> <table border="1"> <thead> <tr> <th>번호</th> <th>이름</th> <th>제목</th> <th>조회</th> <th>작성일</th> </tr> </thead> <tbody> <c:forEach var="item" items="${list}"> <tr> <td>${item.num}</td> <td>${item.name}</td> <td>${item.title}</td> <td>${item.readCount}</td> <td>${item.writeDate}</td> </tr> </c:forEach> </tbody> </table> </body> </html>

 

13. 결과를 확인해 봅니다.

 

결과 화면

 

스프링에 마이바티스 오라클 연동을 해 보았습니다. 이제 간단한 프로그램을 만들기 위한 기본이 어느정도 된것 같습니다.


 

※ 전체소스

srping_mybatis.zip


- 글 등록 기능 추가한 소스 입니다.

srping_mybatis_insert.zip


반응형

댓글을 달아 주세요

  • zozokjs 2018.06.01 18:01  댓글주소  수정/삭제  댓글쓰기

    메이븐 repository 사이트를 보면
    http://search.maven.org/#search%7Cga%7C1%7C
    이런 곳도 있고

    https://mvnrepository.com/
    이런 곳도 있는데

    본문에 말씀하신 곳이 사람들이 더 자주 사용하는 편인지 알 수 있을까요..?

    • pentode 2018.06.01 18:49 신고  댓글주소  수정/삭제

      방문해주셔서 감사합니다. 필요한 라이브러리 검색에는 http://search.maven.org/ 와 https://mvnrepository.com/ 둘 다 많이 사용을 합니다. 어느곳이 더 많이 사용되는지는 잘 모르겠습니다. 공식 사이트는 http://search.maven.org/ 인것 같은데, 사용하기 편한곳은 https://mvnrepository.com 인것 같습니다.

  • 김군호 2019.03.05 20:03  댓글주소  수정/삭제  댓글쓰기

    잘 보았습니다.

  • 질문입니다 2019.04.04 17:20  댓글주소  수정/삭제  댓글쓰기

    올려주신 파일로 바로 실습중인데요, 마지막 부문에서 http://localhost:8080/pentode/boardList.do로 호출하면
    HTTP 상태 404 – 찾을 수 없음
    타입 상태 보고
    메시지 /pentode/boardList.do
    설명 Origin 서버가 대상 리소스를 위한 현재의 representation을 찾지 못했거나, 그것이 존재하는지를 밝히려 하지 않습니다.
    Apache Tomcat/9.0.17

    404 메세지가 발생하네요. 호출방법이 잘못된건가요? 톰캣 Web Modules에서는 path가 pentode로 잘 잡혀있습니다..

    • pentode 2019.04.04 23:20 신고  댓글주소  수정/삭제

      컨텍스트 패스가 /pentode이고, 컨트롤러의 요청맵핑이 @RequestMapping(value = "/boardList.do") 이라면 결과가 제대로 보여야 합니다.

      HTTP응답코드가 404 Not Found가 나온다면 요청한 자원을 찾을 수 없는 경우이고, 정적데이터가 아닌 동적 페이지일 경우 발생할 수 있는 경우가 많이 있습니다. 이클립스로 실행했으면 Console에 오류가 뜨지 않는지 확인하는게 우선 입니다. 오류가 발생할 수 있는 경우를 생각해보면

      1. URL에 오타가 난경우.^^
      2. 설정등의 오류로 Tomcat 시작시 스프링 시작이 실패한 경우 - 이 경우는 스프링에 대한 요청은 모두 404가 나올 것입니다.
      3. 컨트롤러 메소드에서 return 되는 뷰명에 오타가 있다던가해서 틀린 경우

      등이 있을 수 있겠습니다. Console을 주의해서 확인해 보세요.

  • messi 2019.04.09 15:43  댓글주소  수정/삭제  댓글쓰기

    정말 좋은 글 감사드립니다. 아주 친절하고 자세하게 나와있어서 이해하기 너무 좋았습니다.

  • hellow 2019.06.28 11:26  댓글주소  수정/삭제  댓글쓰기

    4.번
    오타 아닌가요?..

    servlet-context 인데 웹 콘텍스트라고

    • pentode 2019.06.28 20:48 신고  댓글주소  수정/삭제

      스프링프레임웍은 서블릿 컨텍스트 상에서 실행되는 프로그램입니다.

      이 스프링은 자체적으로 컨텍스트를 가지는데, 하나의 컨텍스트로 구성을 할 수도 있고, 계층구조를 가지는 여러개의 컨텍스트로 구성을 할 수도 있습니다.

      이 예제에서는 스프링의 자체 컨텍스트를 서비스를 가지는 루트 컨텍스트와 콘트롤러를 가지는 하위 웹 컨텍스트로 두 개로 나눠서 구성하고 있습니다.

      이렇게 구성하는 이유는 상위의 루트 컨텍스트에서 공통적으로 사용되는 빈들을 정의하고, 하위 컨텍스트에서는 주로 웹상에서 루트 컨텍스트의 공용 빈을 사용하도록 함으로써 여러개의 웹 컨텍스트를 가지는 유연성을 줄 수 있으면서 자원을 효율적으로 사용할 수 있기 때문입니다.

      위에서 루트 컨텍스트의 설정파일이 root-context.xml 이고 웹 컨텍스트의 설정파일이 servlet-context.xml 파일 입니다.

  • dd 2019.07.04 02:15  댓글주소  수정/삭제  댓글쓰기

    정말 감사합니다. 막막했는데 ... 이거 보고 챡챡 하니까 챡챡해결이 됐어요 !! ㅠㅠㅠ

  • 감사합니다 2019.10.25 13:15  댓글주소  수정/삭제  댓글쓰기

    엄청 도움됬어요 감사합니다!!

  • 신입개발자 2019.12.30 17:06  댓글주소  수정/삭제  댓글쓰기

    실습파일 중 글 등록 기능을 추가한 소스파일을 보고 공부중입니다.
    HomeController.java 파일에서 81번째 줄 boardService.insertBoard(boardVO); 에서
    The method insertBoard(BoardVO) is undefined for the type BoardService 라는 에러와
    BoardServiceImpl.java 파일에서 25번째 줄 public void insertBoard(BoardVO boardVO) { boardMapper.insertBoard(boardVO); }에서
    The method insertBoard(BoardVO) of type BoardServiceImpl must override or implement a supertype method라는 에러가 발생했는데 원인을 알 수 있을까요..?

    • pentode 2019.12.31 08:47 신고  댓글주소  수정/삭제

      안녕하세요. BoardService.java 파일내에 insertBoard(BoardVO baordVO) 메소드가 정의되어 있는지 확인하세요. 혹시 서비스에 인터페이스 정의없이 Impl 에만 구현을 작성하신게 아닌가 합니다.

  • Lee 2020.01.17 15:46  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 설명해주신대로 실습도중에 오류가 생겼는데 아무리 찾아봐도 혼자서 해결을 못하겠어 댓글 남겨봅니다 ㅠㅠ

    실습하는중에 홈컨트롤러로 하면 실행되고 제가만든 컨트롤러로하면 실행이 안되는데 왜 그런건가요?
    에러 500이면 서버 오류인건가요?

    경로문제라는데 뭐가 문제인지... 에러문구는 밑에 쓰겠습니다. 도와주시면 감사하겠습니다.

    * 좋은 글 감사합니다.


    심각: 경로 [/ex01]의 컨텍스트 내의 서블릿 [appServlet]을(를) 위한 Servlet.service() 호출이, 근본 원인(root cause)과 함께, 예외 [Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.com.ex01.member.dao.MemberDao.selectMember]을(를) 발생시켰습니다.
    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.com.ex01.member.dao.MemberDao.selectMember

    • pentode 2020.01.17 23:53 신고  댓글주소  수정/삭제

      500이면 서버 오류 입니다. 즉 서버측 프로그램이 실행중 오류가 발생하였다는 것입니다. 보내준 스택트레이스에 나온 오류인 Invalid bound statement (not found) 는 DAO를 찾지 못한게 아닌 생각됩니다.

      이 예제에서는 root-contextxml 파일내에 DAO를 찾는 베이스 패키지를 com.tistory.pentode.service.dao 로 지정하고 있습니다.

      질문하신분이 추가한 dao는 com.com.ex012.member.dao 패키지 내에 있어서 DAO를 찾지 못한게 아닌가 생각됩니다.

      베이스 패키지에 package를 추가해 주시면 될것 같습니다.

      성공하기 바랄께요. 새해 복 많이 받으세요.^^

  • 처음 2020.02.22 19:36  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 스프링을 혼자 공부를 해보려고 하는 학생입니다.
    궁금한 점이 올려주신 파일 srping_mybatis.zip을 다운받아서 실행을 해보고 싶은데 설명1 부분에 sqldeverloper부분을 제가 잘 이해를 하지 못해서 다운만 받아놓고 정작 실행은 못 시켜봤네요..ㅜㅜ sqldeverloper을 첨 써봐서 어렵네요 ㅜㅜ sqldeverloper를 생략하곤 실행이 불가능 하겠죠..? ㅎㅎ

    • pentode 2020.02.22 23:03 신고  댓글주소  수정/삭제

      sqldeveloper가 중요한것이 아닙니다. 데이터베이스가 중요한것이죠. Oracle 데이터베이스에 접근해서 사용하기 위한 툴 중하나가 sqldeveloper입니다.

      질문하신 내용으로 봐서 데이터베이스 사용에 익숙지 않은걸로 보입니다. 이 예제를 테스트 해보려면 Oracle데이터베이스를 테이블을 만들고 데이트를 입력하고, 조회 하는 기본적인 기능을 사용할 수 있어야 합니다.

      데이터베이스 사용법도 공부를하셔야 할 것 같습니다.

      테스트용 Oracle 데이터베이스와 sqldeveloper사용법은 "https://offbyone.tistory.com/13" 글을 참조해보세요.

      성공하시기 바랄께요.^^

  • 김성민 2020.03.02 00:49  댓글주소  수정/삭제  댓글쓰기

    디비에서 셀렉트한 결과가 나오지 않는데 디비와 커넥션 된 정보가 다른건지 테이블내용이 나오지않는데 왜그런겅까요..?

    • pentode 2020.03.08 23:25 신고  댓글주소  수정/삭제

      데이터베이스 연결정보는 자신이 열결하고자 하는 데이터베이스에 맞게 변경해야 합니다.

      연결정보도 맡고 연결도 된다면 테이블에 데이터가 있는지 확인해 보세요.

      혹시 데이터를 입력은 클라이언트 툴을 사용했는데, 커밋을 안했는지 확인도 해보세요.

      성공하시길 바랄께요.

  • 처음 2020.03.05 01:01  댓글주소  수정/삭제  댓글쓰기

    2번쨰 파일을 다운받아서 실행을 하니 500페이지가 뜹니다.
    그리고 아래 오류 글이 뜨는데 혼자서 해결을 못하겠네요 ㅜㅜㅠ
    뭐가문제일까요..?

    예외

    org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
    ### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Listener refused the connection with the following error:
    ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
    )
    ### The error may exist in file [C:\ekpro\project\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\srping_mybatis\WEB-INF\classes\sqlmap\Tb_Board_SQL.xml]
    ### The error may involve com.tistory.pentode.service.dao.BoardDAO.selectBoardList
    ### The error occurred while executing a query
    ### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Listener refused the connection with the following error:
    ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
    )
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

    • pentode 2020.03.08 23:28 신고  댓글주소  수정/삭제

      설정의 데이터베이스 연결정보가 자신이 연결하고자 하는 데이터베이스의 연결정보와 일치하는지, 데이터베이스가 실행되어 있는지 확인하세요.

      에러내용은 SID를 찾을 수 없다는 내용이네요.

      ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

      성공하길 바랄께요.