1. SPRING 기본 설정
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 |