SPRING

SPRING 설정 (XML)

Adev 2023. 2. 4. 00:01

1. SPRING 기본 설정

SPRING 기본설정 (XML, JAVA 공통)

 

 

2. 오라클 db 연동

먼저 오라클과 SQLDeveloper를 설치한다.

 


2.1. JDBC연결

1) pom.xml에 오라클jdbc 라이브러리 추가

<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>21.1.0.0</version>
</dependency>

 

+ JDBC 드라이버를 프로젝트 경로에 포함되도록 설정

Java Build Path - add external library - sql developer - product - lib - ojdbc jar 파일

 

 

2.2. 커넥션풀 설정

1) pom.xml에 HikariCP 라이브러리 추가

<!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>2.7.4</version>
</dependency>


2) DataSource 설정

 

root-contect.xml에 아래 코드 추가

<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:XE"></property>
<property name="username" value="book_ex"></property>
<property name="password" value="book_ex"></property>
</bean>
<!-- HikariCP configuration -->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<constructor-arg ref="hikariConfig" />
</bean>

 

 

 


3. mybatis와 스프링 연동

 

3.1. mybatis

: SQL mapping 프레임워크이다. (ORM Framework)

기존의 SQL을 그대로 활용할 수 있고, 진입장벽이 낮다. JDBC 코드의 복잡한 작업을 줄인다.

 


1) pom.xml에 라이브러리 추가

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.6</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.3.2</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${org.springframework-version}</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${org.springframework-version}</version>
</dependency>

 

2) SQLSessionFactory 설정 
: 내부적으로 SQLSession을 만들어내고 이를 통해 Connection을 생성하거나 SQL을 전달하고 결과를 리턴 받는 구조로 작성한다.

 

root-context.xm에 SqlSessionFactory 등록

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

 

 

3.2. 스프링 연동

: MyBatis의 Mapper는 SQL과 그에 대한 처리를 지정한다.
: Mapper interface(@Select("쿼리문"))만 사용하는 방법과 Mapper interface(메소드선언)+XML(쿼리문작성)을 함께 쓰는 방법이 있다.

 

1)  Mapper 인터페이스만 사용

src/main/java - mapper 패키지 생성 - 인터페이스 생성 - 어노테이션 및 쿼리문 작성

package com.toy.mapper;

import org.apache.ibatis.annotations.Select;

public interface TimeMapper {

@Select("SELECT sysdate FROM dual")
public String getTime();
}

 

  • Mapper 인식 설정

: Mybatis가 동작할 때 자동으로 해당 패키지를 인식해 Mapper를 인식하도록 한다.

 

root-context.xml -> Namespaces탭 -> beans, context, mybatis-spring 체크 -> root-context.xml에 아래 코드 추가

<mybatis-spring:scan base-package="org.zerock.mapper"/>

<!-- <mybatis-spring:scan>태그 base-pakage속성 : 해당 패키지의 모든 Mybatis 관련 어노테이션 처리 -->

 

2) Mapper 인터페이스와 XML 매퍼와 같이 쓰기

: SQL이 복잡할 경우 어노테이션보다 XML을 이용하는 방식이 선호된다. 

: Mapper 인터페이스에 메소드를 선언하고, XML에서 SQL을 처리한다.

 

2.1) Mapper 인터페이스 - 메소드 선언

package com.toy.mapper;

import org.apache.ibatis.annotations.Select;

public interface TimeMapper {

public String getTime2();
}


2.2) XML - SQL처리

: Mapper 인터페이스의 이름과 XML의 <mapper> 태그 namespace 속성값이 같아야 한다.

Mapper인터페이스와 동일한 이름의 namespace가 존재하면 둘을 병합처리한다.

 

Mapper 인터페이스가 위치한 곳 또는 src/main/resources - 인터페이스 폴더명 생성(상위 폴더부터 각각 만들기. com폴더 -> toy폴더 -> mapper폴더) - XML파일 생성 - myBatis 태그를 추가 - <mapper> 태그안에 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"> 
<mapper namespace="com.toy.mapper.TimeMapper"> 
<select id="getTime2" resultType="string">
SELECT sysdate FROM dual
</select>
</mapper>

 

 

3) log4jdbc-log4j2 설정

: JDBC의 PreparedStatement에 사용된 '?'가 어떤 값으로 처리됐는지 확인한다.

쿼리를 더 자세하게 SQL log로 보여준다.


3.1) pom.xml에 라이브러리 추가

<!-- 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>


3.2) log4jdbc.log4j2.properties (src/main/resources 아래에 추가)

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator

 

3.3) root-context.xml의 hikariConfig 수정 (JDBC드라이버와 URL 변경)

<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">

<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>
<property name="jdbcUrl" value="jdbc:log4jdbc:oracle:thin:@localhost:1521:XE"></property>

<property name="username" value="book_ex"></property>
<property name="password" value="book_ex"></property>

   

4.4) 로그 경로 및 레벨 확인

 

src/test/resources - log4j.xml 

	<!-- Application Loggers -->
	<logger name="com.toy">
		<level value="info" />
	</logger>

 

 


4. 추가

 

+ UTF-8 필터 (브라우저 한글 문제 발생 시) 

: web.xml에 <filter> 추가

  <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>
      <servlet-name>appServlet</servlet-name>
    </filter-mapping>

 

 

+ 파일 업로드 commons-fileupload라이브러리 (servlet2.5) (servlet3.0, tomcat7.0이상은 필요X)


 1) pom.xml에 dependency 추가

<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.3</version>
</dependency>


 2) servlet-context.xml 설정 추가

(id값 multipartResolver, 인코딩, 업로드 크기, 파일 크기, 파일 업로드될 경로, 메모리상 최대 크기 설정)

<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  <beans:property name="defaultEncoding" value="utf-8"></beans:property>
  <!-- 1024 * 1024 * 10 bytes 10MB -->
  <beans:property name="maxUploadSize" value="104857560"></beans:property>
  <!-- 1024 * 1024 * 2 bytes 2MB -->
  <beans:property name="maxUploadSizePerFile" value="2097152"></beans:property>
  <beans:property name="uploadTempDir" value="file:/C:/upload/tmp"></beans:property>
  <beans:property name="maxInMemorySize" value="10485756"></beans:property>
</beans:bean>

 

ex)

	@GetMapping("/exUploadForm")
	public void exUploadForm() {
		log.info("/exUpload...");
	}
	
    //name = files로 여러 파일을 다중 업로드했기때문에 MultipartFile타입 배열로 처리한다. 
    //예시에는 없지만 추가로 byte[]처리를 해야 업로드가 완료된다
	@GetMapping("exUploadPost")
	public void exUploadPost(ArrayList<MultipartFile> files) {
		
		files.forEach(file -> {
			log.info("--");
			log.info("name:" + file.getOriginalFilename());
			log.info("size:" + file.getSize());
		});
	}

'SPRING' 카테고리의 다른 글

SPRING 테스트 코드 작성  (0) 2023.02.07
SPRING 설정 (JAVA Configuration)  (0) 2023.02.06
SPRING 파일 업로드 다운로드  (0) 2023.01.17
SPRING 페이징 처리 (pagination)  (0) 2022.11.30
SPRING 로딩 구조, 어노테이션  (0) 2022.11.25