안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
DB 계정 및 테이블 생성
-- (관리자계정) spring2 일반계정 생성
alter session set "_oracle_script" = true;
create user spring2
IDENTIFIED by 비밀번호
default tablespace users;
alter user spring2 quota unlimited on users;
grant connect, resource to spring2;
-- (spring 계정)
-- dev 테이블 생성
create table dev(
no number,
name varchar2(100) not null,
career number not null,
email varchar2(200) not null,
gender char(1),
lang varchar2(100) not null,
created_at date default sysdate,
constraint pk_dev_no primary key(no),
constraint ck_dev_gender check(gender in ('M', 'F'))
);
create sequence seq_dev_no;
DB 접속을 위한 설정
#6. spring-jdbc, mybatis, dbcp, ojdbc8
pom.xml
<!-- #6. spring-jdbc, mybatis, dbcp, ojdbc8 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!-- Database Connection Pool -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>21.1.0.0</version>
</dependency>
Database Connection Pool (DBCP)
- 웹 컨테이너(WAS)가 실행되면서 일정량의 Connection 객체를 미리 만들어서 pool에 저장했다가, 클라이언트 요청이 오면 Connection 객체를 빌려주고 해당 객체의 임무가 완료되면 다시 Connection 객체를 반납 받아서 pool에 저장하는 프로그래밍 기법
datasource.properties
###################################################
# datasource.properties
###################################################
datasource.driverClassName = oracle.jdbc.OracleDriver
datasource.url = jdbc:oracle:thin:@localhost:1521:xe
datasource.username = spring2
datasource.password = 비밀번호
두 레벨 이상으로 작성해줘야 하므로, datasource.~으로 작성해주었습니다.
#6.1. datasource 빈 등록
root-context.xml
<!-- #6.1 datasource 빈 등록 -->
<!-- properties 파일을 읽어오는 태그 -->
<context:property-placeholder location="classpath:datasource.properties"/>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${datasource.driverClassName}"></property>
<property name="url" value="${datasource.url}"></property>
<property name="username" value="${datasource.username}"></property>
<property name="password" value="${datasource.password}"></property>
</bean>
properties 파일을 읽어오기 위해 context namespace가 필요하며, 추가해주었습니다.
#6.2 mybatis SqlSessionFactoryBean, SqlSessionTemplate 빈 등록
root-context.xml
<!-- #6.2 mybatis SqlSessionFactoryBean, SqlSessionTemplate 빈 등록 -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:mapper/**/*-mapper.xml" />
<property name="configLocation" value="classpath:mybatis-config.xml" />
</bean>
<!-- SqlSession 구현체. Dao구현클래스에 DI되어 실행됨 -->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFacotryBean" index="0"/>
</bean>
sqlSessionFactoryBean 하위에 dataSource property에서 name="dataSource"는 SqlSessionFactoryBean의 setDataSource 메소드를 의미하며, ref="dataSource"는 위에서 등록해놓은 BasicDataSource 빈의 id값을 의미합니다.
또한 mapperLocations의 value에서 "classpath*:mapper/**/*-mapper.xml"는
classpath*: → 복수 개의 파일
mapper/**/*-mapper.xml → mapper 하위의 어느 폴더이든 무슨무슨 -mapper.xml로 끝나는 파일 의미
반면에, configLocation의 value에서 "classpath:mybatis-config.xml"은 해당 파일 단 하나를 의미합니다.
SqlSessionTemplate은 SqlSession 인터페이스의 구현체로 추후 Dao 구현클래스에 DI되어 실행됩니다.
생성자로 sqlSessionFactoryBean을 받아 생성됩니다.
demo-mapper.xml
<?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="demo">
</mapper>
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--
자식 태그는 다음 순서로 작성할 것!
properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?,
environments?, databaseIdProvider?, mappers?
-->
<settings>
<setting name="jdbcTypeForNull" value="NULL"/> <!-- null 데이터 전달 시 그대로 null로 대입 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<typeAliases>
<package name="com.ce.spring2"/> <!-- 해당 패키지 하위에 있는 클래스들을 소문자로 변환하여 별칭등록 -->
</typeAliases>
</configuration>
'Java > Spring' 카테고리의 다른 글
Spring) Dev 목록 가져오기 (0) | 2022.08.18 |
---|---|
Spring) DB 등록 - 개발자 정보 등록 (StringTypeHandler) (0) | 2022.08.18 |
Spring) 사용자 입력 값 처리 (3) - Command 객체 (0) | 2022.08.17 |
Spring) 사용자 입력 값 처리 (2) - @RequestParam (0) | 2022.08.17 |
Spring) 사용자 입력 값 처리 (1) - HttpServletRequest (0) | 2022.08.17 |