본문 바로가기
ㆍSpring & JSP

[spring/스프링] pom.xml 부터 DB디비/테스트 세팅

by 매이슨 2021. 9. 9.

mysql 기준

				
	<!-- Servlet -->
	<!-- <dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>servlet-api</artifactId>
		<version>2.5</version>
		<scope>provided</scope>
	</dependency> -->
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>javax.servlet-api</artifactId>
		<version>3.1.0</version>
	</dependency>
	<dependency>
		<groupId>javax.servlet.jsp</groupId>
		<artifactId>jsp-api</artifactId>
		<version>2.1</version>
		<scope>provided</scope>
	</dependency>
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>jstl</artifactId>
		<version>1.2</version>
	</dependency>

	<!-- Test -->
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.12</version>
		<scope>test</scope>
	</dependency>        
	<!-- 외부 라이브러리 추가 -->
	<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
	<dependency>
	    <groupId>mysql</groupId>
	    <artifactId>mysql-connector-java</artifactId>
	    <version>8.0.16</version>
	</dependency>
	
	<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
	<dependency>
	    <groupId>org.mybatis</groupId>
	    <artifactId>mybatis</artifactId>
	    <version>3.4.1</version>
	</dependency>
	
	<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
	<dependency>
	    <groupId>org.mybatis</groupId>
	    <artifactId>mybatis-spring</artifactId>
	    <version>1.3.0</version>
	</dependency>
		
	<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-jdbc</artifactId>
	    <version>${org.springframework-version}</version>
	</dependency>
			
	<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-test</artifactId>
	    <version>${org.springframework-version}</version>
	</dependency>
	
	<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
	<dependency>
	    <groupId>com.fasterxml.jackson.core</groupId>
	    <artifactId>jackson-databind</artifactId>
	    <version>2.8.4</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4 -->
	<dependency>
	    <groupId>org.bgee.log4jdbc-log4j2</groupId>
	    <artifactId>log4jdbc-log4j2-jdbc4</artifactId>
	    <version>1.16</version>
	</dependency>
		
	<!-- 외부 라이브러리 추가 -->

▲▲▲ 편집/추가 부분

 

- src/main/resources 폴더에 아래파일 복사
  * mybatis-config.xml
  * log4jdbc.log4j2.properties
  * logback.xml

- src/main/webapp.../ spring/root-context.xml
  * namespace탭 -aop,beans,context,jdbc,mvc,mybatis 체크설정
  * namespace내 체크설정후 source탭으로 돌아오면 체크설정된 여러가지 url들이 설정되어있음
  * source탭 아래 추가 코드

	<!-- 디비연결 정보 처리객체(bean)(DataSource) -->	
	<bean id="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		
		<property name="driverClassName" 
				value="com.mysql.cj.jdbc.Driver"/>
		<property name="url" 
				value="jdbc:mysql://localhost:3306/springdb?useSSL=false&amp;serverTimezone=Asia/Seoul"/>
		<property name="username" value="root"/>
		<property name="password" value="1234"/>
		
	</bean>
	<!-- 디비연결 정보 처리객체(bean)(DataSource) -->

-log4jdbc 연결 root-context

<property name="driverClassName" 
	value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"/>	
<property name="url" 
	value="jdbc:log4jdbc:mysql://localhost:3306/springdb?useSSL=false&amp;serverTimezone=Asia/Seoul"/>

-driver 와 url만 변경// 변경후 콘솔창 확인

중간 INFO jdbc.connection 과 jdbc.audit 가 추가되었다 !

▼▼▼▼▼통코드

<hide/>

<?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:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:jdbc="http://www.springframework.org/schema/jdbc"
	xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
		http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">
	
	<!-- Root Context: defines shared resources visible to all other web components -->
	
	<!-- 디비연결 정보 처리객체(bean) -->
	<bean id="dataSource" 
		  class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		
	 <!--      <property name="driverClassName" 
	      			value="com.mysql.cj.jdbc.Driver"/>
	      <property name="url" 
	      value="jdbc:mysql://localhost:3306/springdb?useSSL=false&amp;serverTimezone=Asia/Seoul"/>
 -->	      
	    <property name="driverClassName" 
	      			value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"/>	      			
        <property name="url" 
	      value="jdbc:log4jdbc:mysql://localhost:3306/springdb?useSSL=false&amp;serverTimezone=Asia/Seoul"/>
	      
	      <property name="username" value="root"/>
	      <property name="password" value="1234"/>
	
	</bean>	
	<!-- 디비연결 정보 처리객체(bean) -->
	
	<!-- sqlSessionFactory 객체 : 디비연결, mybatis설정, mapper설정  -->
	<bean id="sqlSessionFactory"
	class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<property name="configLocation" 
				  value="classpath:/mybatis-config.xml"></property>
		<property name="mapperLocations" value="classpath:mappers/**/*Mapper.xml"></property>
	</bean>
	<!-- sqlSessionFactory 객체 : 디비연결, mybatis설정, mapper설정  -->
	
	<!-- sqlSession 객체 : 디비연결, 자원해제  -->
	<bean id="sqlSession"	
		  class="org.mybatis.spring.SqlSessionTemplate"
		  destroy-method="clearCache">
  		<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
  	</bean>
	<!-- sqlSession 객체 : 디비연결, 자원해제  -->
	
	<!-- 디비처리, 서비스처리 사용 연결-->
	<context:component-scan base-package="com.itwillbs.persistence" />
	<context:component-scan base-package="com.itwillbs.service" />
	<!-- 디비처리, 서비스처리 사용 연결-->
		
</beans>

sqlSessionFactory / sqlSession / service / persistence 연결추가


package com.mason.controller;

import java.sql.Connection;

import javax.inject.Inject;
import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(
		locations = {"file:src/main/webapp/WEB-INF/spring/root-context.xml"}
		)
public class DataSourceTest {
	
	@Inject
	private DataSource ds;
	
	//@Inject
	@Autowired
	private SqlSession sqlSession;
	
	@Test
	public void testDS() throws Exception{
		System.out.println("디비 연결객체  : "+ds);
		Connection con = ds.getConnection();
		System.out.println(" 디비 연결 정보 : "+con);
	}
	
	@Test
	public void testSession() throws Exception {
		System.out.println("\n"+sqlSession+"\n");
	}
	

}

- 디비연결확인 ** 중요
- src/test/java -패키지 - DataSourceTest.java 생성후 class 어노테이션 @Runwith

안될시 pom.xml junit 아무버전으로 변경 저장 // 다시 원래 버전으로 변경 저장
그래도 안되면 maven update(치트키인듯 ㅋㅋ 맨날 이거해야함... 계속 하면 우울해지는 우울버튼)
그그그래래래도도도 안되면 C:\Users\사용자\.m2\repository 아래폴더 걍 지우고 다시 켜서 업데이트
사용자명은 영어가 좋음


- java 버전 확인 및 변경
* properties - java Compiler, project Facets
* Deployment Assembly 에서 Maven Dependencies 확인.. 없으면 add해서 'Java Build Path Entries'에서추가


- web.xml 한글처리

	<!-- 한글처리 필터등록 -->

	<filter>
		<filter-name>encoding</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>

	<filter-mapping>
		<filter-name>encoding</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<!-- 한글처리 필터등록 -->

- src/test/java - 패키지 생성(DataSourceTest.java와 같은패키지) -*DAOTest.java (*Asterisk)

<hide/>
package com.mason.controller;

import javax.inject.Inject;

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;

import com.itwillbs.domain.BoardVO;
import com.itwillbs.persistence.BoardDAO;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(
		locations = {"file:src/main/webapp/WEB-INF/spring/root-context.xml"}
		)
public class BoardDAOTest {
	
	//DAO 객체 생성(의존주입)
	@Inject
	private BoardDAO bdao;
	
	//로그
	private static final  Logger logger =
			LoggerFactory.getLogger(BoardDAOTest.class);
	
	//@Test
	public void daoTest() throws Exception {
		logger.info("\n@@@@@\n"+bdao+"\n@@@@@");
	}
	
	//게시판 글쓰기 테스트
	//@Test
	public void createTest() throws Exception {
		logger.info("게시판 글쓰기 시작");
		
		BoardVO inputVO  = new BoardVO();
		
		inputVO.setTitle("1번 글테스트");
		inputVO.setContent("내용123123");
		inputVO.setWriter("관리자");
		
		//DAO동작 호출
		bdao.create(inputVO);
		
		logger.info("게시판 글쓰기 끝");
	}
	
	//@Test
	public void readTest() throws Exception{
		int bno = 1;
		BoardVO bvo = bdao.read(bno); 
		logger.info("\n#####\n"+bvo+"\n#####");
	}
	
	//게시판 정보수정(특정글)
	@Test
	public void updateTest() throws Exception{
	
		BoardVO bvo = new BoardVO();
		bvo.setContent("내용수정123123");
		//bdao.update(1); 
	}

	//게시판 글 삭제(특정글)
	@Test
	public void deleteTest() throws Exception{
	
		//BoardVO bvo = bdao.delete(1); 
	}
}

- @Inject 대신 @Autowired를 써봤다.
- '@Test' 어노테이션을 주석처리하면 실행시 테스트 안되니 적절히 사용


콘트롤러 쪽만 잘 제어한다면 이제 스프링도 고도화 싸움인것같다.
여전히 재밌다. 다행이다.


끝인가?일단저장 !