기본 설정 프로젝트를 만들고 이 프로젝트를 복사해서 활용할 것
- log4j 정리
## 마이바티스 모듈 추가
- mybatis
- mybatis-spring 2.x.x
## 마이바티스 설정
- 설정 파일 : com.jafa.config.RootConfig
- @MapperScan 매퍼 인터페이스 패키지 설정
- SqlSessionFactoryBean
- DataSource빈 전달
- mapperLocation : classpath:mappers/**/*Mapper.xml
- SqlSessionTemplate
- SqlSessionFactory : SqlSessionFactoryBean.getObject()로 부터 얻는다.
- SqlSessionFactory빈 생성자 주입
## 매퍼 인터페이스 및 매퍼XML 작성
- 매퍼인터페이스 : com.jafa.repository.TestRepository
- 매퍼 파일 : classpath:mappers/TestMapper.xml
- 테스트 케이스 : com.jafa.mybatis.testMapperTest
## log4j 설정
- 모듈 추가
log4j
slf4j-log4j12
jcl-over-slf4j
spring-core : exclude (commons-logging)
- 로그 설정 파일 : classpath:log4j.xml
## log4jdbc-log4j2 설정
- 모듈 추가
- log4jdbc-log4j2-jdbc4.1
- RootConfig에서 DataSource 재설정
- log4jdbc-log4jdbc.log4j2.properties
- log4j.xml 로그레벨 조정
- 디펜던시 : pom.xml
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.22.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.22.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.22.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
<version>10.1.4</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<!-- 마이바티스 시작 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.7</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.11</version>
</dependency>
<!-- 마이바티스 끝 -->
<!-- log4j 시작 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>2.0.6</version>
</dependency> <!-- 타입과 스코프 삭제함 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>2.0.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.22.RELEASE</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
<version>1.16</version>
</dependency>
<!-- log4j 끝 -->
</dependencies>
pom.xml 파일 <build></build> 부분에 있는 <configuration> 의 <release>가 16으로 되어있다면 11로 바꿀것
바꾸고 메이븐 업데이트 실행하고 ( JavaSE-11 ) 확인할것
- src/main/java
- com.jafa.config 패키지 RootConfig, ServletConfig, WebConfig 클래스 생성
- RootConfig
package com.jafa.config;
import java.io.IOException;
import org.apache.tomcat.jdbc.pool.DataSource;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
@Configuration
@MapperScan("com.jafa.repository")
public class RootConfig {
@Bean
public DataSource dataSource() {
DataSource dataSource = new DataSource();
dataSource.setDriverClassName("net.sf.log4jdbc.sql.jdbcapi.DriverSpy");
dataSource.setUrl("jdbc:log4jdbc:oracle:thin:@localhost:1521:XE");
dataSource.setUsername("springdb");
dataSource.setPassword("1234");
return dataSource;
}
@Bean
public SqlSessionFactoryBean sqlSessionFactoryBean() throws IOException {
SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
factory.setDataSource(dataSource());
factory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath:mappers/**/*Mapper.xml"));
return factory;
}
@Bean
public SqlSessionTemplate sqlSessionTemplate() throws IOException, Exception {
return new SqlSessionTemplate(sqlSessionFactoryBean().getObject());
}
}
- ServletConfig
package com.jafa.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
@EnableWebMvc
@ComponentScan("com.jafa")
public class ServletConfig implements WebMvcConfigurer {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/views/", ".jsp");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**")
.addResourceLocations("/resources/");
}
}
- WebConfig
package com.jafa.config;
import javax.servlet.Filter;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] {RootConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] {ServletConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[] {"/"};
}
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("utf-8");
filter.setForceEncoding(true);
return new Filter[] {filter};
}
}
- 모든 경로 폴더부터 만들기
- src/main/resources/mapper 폴더 만들기
- 테스트 코드를 위한 경로 지정
src/test/안에 java폴더, resources 폴더 생성
- 경로 폴더를 만든 뒤 메이븐 업데이트를 해준다.
업데이트를 하고 나면 각각 경로가 나타난다
- src/main/resources안에 log4j.xml 와 log4jdbc.log4j2.properties 파일 넣기
- log4j.xml
주석으로 표시한 태그들은 필요시 풀면 됨.
콘솔창에 표시할 태그들만 활성화 하기
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- Appenders -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p: %c - %m%n" />
</layout>
</appender>
<!-- Application Loggers -->
<logger name="com.jafa" >
<level value="info" />
</logger>
<!-- 3rdparty Loggers -->
<!-- <logger name="org.springframework.core">
<level value="info" />
</logger>
<logger name="org.springframework.beans">
<level value="info" />
</logger>
<logger name="org.springframework.context">
<level value="info" />
</logger>
<logger name="org.springframework.web">
<level value="info" />
</logger> -->
<!-- 마이바티스 로그 레벨 설정 -->
<!-- <logger name="jdbc.audit">
<level value="warn" />
</logger>
<logger name="jdbc.resultset">
<level value="warn" />
</logger>
<logger name="jdbc.connection">
<level value="warn" />
</logger> -->
<logger name="jdbc.sqltiming">
<level value="warn" />
</logger>
<logger name="jdbc.sqlonly">
<level value="info" />
</logger>
<logger name="jdbc.resultsettable">
<level value="info" />
</logger>
<!-- Root Logger -->
<root>
<priority value="warn" />
<appender-ref ref="console" />
</root>
</log4j:configuration>
- log4jdbc.log4j2.properties
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
- 메인 화면 나타내기
- src/main/java
- com.jafa.controller 패키지 HomeController 클래스 생성
- HomeController
package com.jafa.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "index";
}
}
컨트롤러 만들었다면 메인화면.jsp를 준비한다.
return에 들어간 "index"와 이름을 같게 해준다.
index.jsp
- src/main/webapp/WEB-INF/views/index.jsp 생성
- index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>메인화면</h1>
</body>
</html>
만든후 프로젝트에서 우클릭 Run As -> Run on Server로 실행하기
브라우저에 출력되면 됨
만약 CSS, JS, image 등을 넣고 싶으면
src/main/webapp/resources/ css, js, image 폴더를 만들어 안에 넣으면 됨.
- 테스트 케이스
- src/main/java
- com.jafa.repository 패키지 TestRepository 클래스 생성
- TestRepository
package com.jafa.repository;
import java.util.Date;
public interface TestRepository {
Date getCurrentDate();
}
- src/test/java
- com.jafa 패키지 AppTest JUnit4 생성
- AppTest
package com.jafa;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import com.jafa.config.RootConfig;
import com.jafa.config.ServletConfig;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {RootConfig.class, ServletConfig.class})
@WebAppConfiguration
public class AppTest {
}
- src/test/java
- com.jafa.config 패키지 RootConfigTest JUnit4 생성
- RootConfigTest
- JUnit 생성하고 extends AppTest 잊지말것.
package com.jafa.config;
import static org.junit.Assert.assertNotNull;
import java.sql.SQLException;
import org.apache.tomcat.jdbc.pool.DataSource;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import com.jafa.AppTest;
public class RootConfigTest extends AppTest {
@Autowired
DataSource dataSource;
@Test
public void dataSourceTest() throws SQLException {
assertNotNull(dataSource);
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String now = jdbcTemplate.queryForObject(
"select sysdate from dual", String.class);
System.out.println(now);
}
}
- src/test/java
- com.jafa.repository패키지 TestRepositoryTest JUnit4 생성
- TestRepositoryTest
package com.jafa.repository;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import com.jafa.AppTest;
public class TestRepositoryTest extends AppTest {
@Autowired
TestRepository testRepository;
@Test
public void test() {
System.out.println(testRepository.getCurrentDate());
}
}
- src/main/resources/mappers/TestMapper.xml XML파일 생성
기본 틀은 ( https://mybatis.org/mybatis-3/ko/getting-started.html )
매핑된 SQL 구문 살펴보기 란에서 복사해서 수정하기
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jafa.repository.TestRepository">
<select id="getCurrentDate" resultType="java.util.Date">
select sysdate from dual
</select>
</mapper>
- mapper namespace는 클래스가 있는 패키지와 클래스명을 쓴다
- select id에는 namespace에서 입력한 클래스에 있는 메소드명을 적는다
- resultType에는 완전한 클래스 이름을 넣는다.
TestRepositoryTest 에서 JUnit 으로 실행
통과 되고 콘솔에 잘 찍히면 됨
'학습 > SPRING' 카테고리의 다른 글
13. 스프링 - Paging (0) | 2022.12.30 |
---|---|
07. 스프링 - 의존 자동 주입 (0) | 2022.12.22 |
06. 스프링 - 두 개 이상의 설정 파일 사용하기 (0) | 2022.12.21 |
04. 스프링 DI : 생성자 방식 (0) | 2022.12.21 |
03. 스프링 DI - 애노테이션 방식, XML 방식 (0) | 2022.12.19 |
댓글