jsp에서는 db와 자바가 연결되었는지 확인하기 위해서는
반드시 DAO를 먼저 생성하고
서버를 돌려서 db와 접속하는 로직을 이용해서
콘솔창에 뜨는 메시지를 보고 연결여부를 확인했었습니다.
그러나 테스트 코드를 작성하면, 서버 작동 없이도 확인할 수 있습니다.
1.Pom.xml에서 junit을 찾아 버전 4.7-> 4.12로 변경하기
2. Mvnrepository에서 spring=test 검색해 스프링 버전과 동일하게 세팅
복사 붙여넣기
롬복의 Log4j기능을 이용한 로깅을 위해 클래스명 위에 @Log4j입력
Class.forName = 너가 연결하는 DB는 오라클이다.
테스트 코드는 @Test가 붙은 메서드를 메인메서드처럼 간주합니다.
(Oracle 11g버전기준은 jdbc:oracle:thin:@localhost:1521:XE
Oracle 18c버전기준은 jdbc:oracle:thin:@localhost:1521:XEPDB1) -DB주소 설정
mytest
mytest - DB내 계정 설정
@Test코드 작성
실행 해보면
우클릭 run as / Junit Test 실행
초록불이 나오면 db연결이 잘된겁니다.
(빨간불은 오류)
커넥션 풀은 DAO가 하나인 경우 접속자가 여럿 몰렷을 때 하나의 DAO가 모든 요청을 처리할 수 없어
지연이 발생하거나 서버가 터지는 것을 방지하기 위해
DAO를 요청량에 따라 가변적으로 생성하여
많은 요청도 여러 개의DAO러 대응 할수 있도록 도와줌
스프링에서는 Hikari-cp를 씀
Mvnrepository 에서 Hikari-cp를 복사해서 붙여줍니다.
root-context.xml 내부에 bean설정을 합니다.
hikariCP에 접속정보를 입력한 다음
커넥션풀을 담당하는 DataSource 객체에 집어 넣어줍니다
com.ict.dao / 우클릭 new / class /OracleConnectionPoolTest 생성
커넥션풀 연결은 @RunWitch어노테이션과
빈 컨테이너 내부에 생성된 요소를 클래스로 가져오는 @ContextConfiguration("경로")가 같이 적어야 합니다.
커넥션 풀을 하기 위해 필요한 요소 3개
데이터 소스라는 타입이 있는데
데이터 소스를 맞춰서 오토와이어로 주입
file:src/main/webapp/WEB-INF/spring/root-context.xml 여기 주소에
DataSource 만들었던걸 여기에 @Autowired 이용해서 여기에 껴달라
(실행했을때 녹색이 나오면 성공)
마이바티스는?
자바 코드 내에 SQL 구문을 String 형태로 작성해서 쿼리문을 완성시켜 전달하는 방식이었습니다.
이 방식의 최대 단점은 자바 코드와 SQl 구문이라는 이질적인 두 개의 구문이 하나의 로직에 섞어서 가독성을 채니는 문제가 있었고 이를 해결하기 위해 자바 로직과 SQl 구문을 분리할 목적으로 마이바티스를 사용합니다.
마이바티스 세팅
Mvnrepository 에서 mybatis-spring , Mybatis를 복사해서 붙여줍니다.
Mybatis-spring이 스프링의 실팽문을 받아 mybatis에 전달하는 역할을 합니다.
Mvnrepository 에서 Spring-tx, spring-jdbc를 5.0.7버전에 맞게 세팅
데이터소스를 입력받은 sqlSessionFactory를 만들어 줍니다.
root-context.xml
테스트 코드는 아까 썻던 MySQLConnectionPoolTest.java를 재활용합니다.
위와 같이 SqlSessionFactory를 이용해 마이바티스에 명령이 들어가는지 체크합니다.
@Autowired 새로 선언하고 (빈컨테이너에 있는걸 가지고온것)
새로 작성합니다.
샐행후 콘솔창에 ibatis가 나와야 맞음
추가해주고 다시 돌려보면
둘다 나왔습니다 이 말은 둘다 실행됐다는 뜻 입니다.
테스트 수행시 @Test가 붙은 메서드 하나하나를 전부 실행함 그래서 보통 하나의 테스트가 끝나면 주석처리해서 언제든 실행은 가능하지만
현재는 실행이 안 되게 조치함
src/main/java 우클릭 new package com.ict.mapper 생성
com.ict.mapper / 우클릭 new / interpace / TimeMapper 생성
-> 마이바디스는 메서드 선언을 특이하게 인터페이스로 만듦
선언된 메서드의 구현은 xml파일로 진행
= 겟타임을 호출하면 db에 이 쿼리문을 날려라 SELECT SYSDATE from dual
Root-context.xml 하단의 namespace탭으로 가 mybatis-spring을 체크 합니다.
그리고 내부에는 아까 작성한 com.ict.mapper 패키지를 스캔하도록 합니다.
source로 와서 <mybatis-spring:scan base-package="com.ict.mapper"/>
작성해줍니다.
테스트 코드 작성을 위해 src/test/java 하위에 com.ict.persistence를 생성하고
테스트 코드를 작성합니다 .
com.ict.persistence / 우클릭 new / interpace / TimeMapperTests 생성
실행하면
시간이 나옵니다.