Spring 데이터베이스 연결 테스트

Back-End/Spring 2019. 5. 29. 11:14
728x90
반응형

Spring 와 데이터베이스 연결


cmd 실행


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
32
33
34
35
36
Microsoft Windows [Version 10.0.17134.765]
(c) 2018 Microsoft Corporation. All rights reserved.
 
C:\Users\user>sqlplus //관리자 계정으로 접속함
 
SQL*Plus: Release 11.2.0.2.0 Production on 화 5월 28 16:09:26 2019
Copyright (c) 19822014, Oracle.  All rights reserved.
 
Enter user-name: system //아이디와 비밀번호 입력함
Enter password:        
 
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
 
 
SQL> create tablespace spring //테이블 스페이스 생성 : 데이터베이스 오브젝트 내 실제 데이터를 저장하는 공간
  2  datafile 'd:/spring.dbf' size 50m //d: 드라이브 루트로만 하기 c: 드라이브 루트는 보안이 걸려있어서 실행이 되지 않는다.
  3  autoextend on                     //50메가씩 용량이 꽉차면 10메가씩 자동증가되서 무제한 증가 
  4  next 10m
  5  maxsize unlimited; 
 
Tablespace created.
 
SQL> create user spring identified by 1234  //아이디는 spring로 하고 비밀번호는 1234로 하는 사용자 계정 생성
  2  default tablespace spring;             //이 사용자가 사용하는 기본 테이블 스페이스는 spring로 설정한다.
 
User created.
 
 
SQL> grant connect,resource,dba to spring;  //이 사용자한테 스프링 테이블스페이스에 대한 접속 권한, 리소스 사용권한, 관리권한을 준다
 
Grant succeeded.
 
Colored by Color Scripter
cs
 
cs


Oracle SQL Developer 실행 후 + 버튼을 눌러 아까 만든 스프링이라는 계정을 등록함








































2. src/test/java/OracleConnectionTest.java
데이터베이스 연결을 테스트하기 위한 테스트 케이스 작성
@Test 코드에서 에러가 발생할 경우 Add JUnit 4 library to the build path를 클릭하여 라이브러리를 추가해야함
테스트하는 클래스의 이름은 보통 클래스 이름 옆에 Test를 덧붙인다.

테스트 케이스 클래스 생성



HomeControllerTest 내부


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.example.spring01;
 
import static org.junit.Assert.*;
 
import org.junit.Test;
 
//HomeController를 테스트하기 위한 클래스
public class HomeControllerTest {
 
    @Test //test 어노테이션이 붙어야 테스트를 할 수 있다.
//testHome() 메서드 안에 fail("Not yet implemented"); 가 들어가 있으면 바로 강제로 자동 오류를 발생시키는 코드이다.
    public void testHome() {
        //메인메소드가 없지만 JUnit프로그램이 테스트를 자동화하는 툴이라 자동으로 실행시킨다.
        System.out.println("home test"); //테스트 완료를 확인하기 위해 println을 작성함
    }
}
cs










































































JUnit 테스트가 되지 않을 때 프로젝트 우클릭 -> properties -> java bulid path -> JUnit 라이브러리 추가하고 버전은 4로 하기






spring01 프로젝트 안에 OracleConectionTest.java (오라클 연결 테스트) 파일 생성 및 연결 코드 작성



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
32
33
34
35
36
package com.example.spring01;
import java.sql.Connection;
import java.sql.DriverManager;
 
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
public class OracleConnectionTest {
    //로깅 처리를 위한 코드
    private static final Logger logger =
    LoggerFactory.getLogger(OracleConnectionTest.class);
    
    private static final String DRIVER ="oracle.jdbc.driver.OracleDriver";
    private static final String URL = "jdbc:oracle:thin:@localhost:1521/xe";
    private static final String USER = "spring";
    private static final String PW = "1234";
    
    @Test //JUnit가 테스트 하는 코드
    public void testConnection() throws Exception{
        Class.forName(DRIVER);
        //try ~ with 문 (java 버전이 1.7 이상이 되야 에러가 나지 않는다)(finally 절이 필요 없음)
        //try 옆에 ()안에 커넥션이 들어있기 때문에 con.clo
        try (Connection conn = DriverManager.getConnection(URL, USER, PW)) 
        {
            System.out.println("오라클에 연결되었습니다.");
            logger.info("오라클에 연결되었습니다.");
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
 
cs



root-context 파일에 들어가서 데이터베이스에 접속할 아이디와 비밀번호를 작성함



root-context.xml 중 일부

1
2
3
4
5
6
7
8
9
10
<bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <!-- 드라이버 클래스 이름이 변경됨 -->
        <property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>
        <!-- 연결문자열에 log4jdbc가 추가됨 -->
        <property name="url"
            value="jdbc:log4jdbc:oracle:thin:@localhost:1521:xe" />
        <property name="username" value="spring" /><!--접속 아이디-->
        <property name="password" value="1234" /><!--접속 비밀번호-->
</bean>
cs


src/test/java/MybatisTest.java

자바 코드에 데이터베이스 연결 문자열 등의 중요한 정보를 직접 입력하는 것은 보안상 안전하지 않음.



mybatis 관련 bean


SqlSessionTemplate : SqlSession 객체 생성

SqlSessionFactoryBean : SqlSessionTemplate 객체 생성

DriverManagerDataSource : DB연동 클래스



src/test/java -> com.example.spring01 -> MybatisTest.java 파일 생성하고 아래 코드 작성


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package com.example.spring01;
 
import javax.inject.Inject;
 
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
// JUnit 4.0으로 현재 클래스를 실행시킴
@RunWith(SpringJUnit4ClassRunner.class)
// mybatis에서 참조하는 설정파일의 위치를 알려줌
@ContextConfiguration(locations = { 
        //sql 세션 Factory가 이미 root-context파일 안에 있다.
        "file:src/main/webapp/WEB-INF/spring/root-context.xml" })
public class MybatisTest {
    // 로깅 처리를 위한 코드
    private static final Logger logger = 
            LoggerFactory.getLogger(MybatisTest.class);
 
    //@Autowired
    @Inject // 의존관계 주입(스프링에서 객체를 생성하여 전달)
    //객체를 생성하였기 때문에 곧바로 객체를 사용할 수가 있다.
    private SqlSessionFactory sqlFactory;
 
    // JUnit이 테스트하는 코드
    @Test
    public void testFactory() {
        // System.out.println("sqlFactory:" + sqlFactory);
        logger.info("sqlFactory:" + sqlFactory);
    }
 
    @Test
    public void testSession() {
        // mybatis 실행을 위한 SqlSession 객체 생성
        try (SqlSession sqlSession = sqlFactory.openSession()) {
            // System.out.println("sqlSession:" + sqlSession);
            // System.out.println("mybatis 연결 성공");
            logger.info("sqlSession:" + sqlSession);
            logger.info("mybatis 연결 성공");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
 
cs



















728x90
반응형

'Back-End > Spring' 카테고리의 다른 글

Spring를 이용한 회원정보관리  (0) 2019.05.31
Controller와 View의 연결 방법  (0) 2019.05.29
spring 로킹툴  (0) 2019.05.28
표준 프레임워크 오픈 커뮤니티  (0) 2019.05.28
스프링의 실행 과정, 스프링의 특징  (0) 2019.05.28
: