DB Connection pool(DBCP)
1. pooling
자주 쓰는 객체를 미리 여러개 만들어 필요할 때마다 사용하고 반납하는 방식입니다.
객체를 모아둔 것을 객체 풀(pool)이라고 합니다.
2. DBCP
사용이 끝난 DB 커넥션 객체는 다른 작업에서 사용할 수 있도록 풀에 반납합니다.
각 요청(insert, update 등)에 대해 별도의 커넥션 객체를 사용합니다.
메모리에 가비지(garbage)가 생성되지 않고 속도가 빨라집니다.
* 가비지 : 메모리에 남아있는 사용하지 않는 객체
3. DataSource
mybatis-spring
pom.xml에 모듈과 라이브러리를 추가합니다.
spring-jdbc, dbcp, spring-test, mybatis, mybatis-spring
spring-jdbc
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
commons-dbcp2
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.1.1</version>
</dependency>
spring-test
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
mybatis
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
mybatis-spring
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
member.java(dto 클래스)
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Member {
private int custNo;
private String custName;
private String phone;
private String address;
private Date joinDate;
private String grade;
private String city;
}
mybatis-config.xml(mybatis 환경설정 파일)
typeAlias 설정 <typeAlias>
사용할 클래스에 대한 별칭을 지정합니다. (패키지명.클래스명 대신에 사용)
type 속성 : 패키지명.클래스명
alias 속성 : 별칭
<configuration>
<typeAliases>
<typeAlias type="day3.dto.Member" alias="Member"/>
<typeAlias type="day3.dto.Money" alias="Money"/>
</typeAliases>
</configuration>
applicationContext.xml (빈 설정 파일)
[Namespaces]탭에서 context와 mybatis-spring을 체크합니다.
<context : component-scan>
패키지를 스캔하여 @Component를 찾아 해당 클래스로 bean을 생성합니다.
<context:component-scan base-package="day3"/>
1. db.properties 위치 설정
<context : property-placeholder>
properties 파일의 위치를 설정합니다.
<context:property-placeholder location="classpath:META-INF/mybatis/db.properties"/>
* properties 파일
프로퍼티 이름 앞에 반드시 db.을 써야합니다.
db.driver = oracle.jdbc.driver.OracleDriver
db.url = jdbc:oracle:thin:@//localhost:1521/xe
db.username = idev
db.password = 1234
2. dataSource 빈 생성 정의
dataSource 객체는 데이터베이스와의 연결을 담당합니다. (jdbc의 커넥션을 처리)
properties 파일에 있는 프로퍼티들을 불러옵니다.
<bean id="datasource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="${db.driver}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
</bean>
3. mybatis-spring 설정
1) sqlSessionFactoryBean 빈 생성
sqlSessionFactoryBean 빈은 sqlSessionFactory(DB와의 연결과 SQL을 실행하는 객체)를 생성하는 객체입니다.
프로퍼티 dataSource : dataSource 빈을 참조합니다.
프로퍼티 mapperLocations : 맵퍼 파일 경로를 가져옵니다. 여러 개일 경우 리스트의 값들로 가져옵니다.
프로퍼티 configLocation : mybatis 설정 파일의 경로를 가져옵니다. (typeAlias 설정)
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="datasource"/>
<property name="mapperLocations">
<list><!-- ArrayList와 같은 컬렉션이 프로퍼티 값으로 참조됩니다. -->
<value>classpath:META-INF/mybatis/member.xml</value>
<value>classpath:META-INF/mybatis/money.xml</value>
</list>
</property>
<!-- alias 설정 후 추가-->
<property name="configLocation" value="classpath:META-INF/mybatis/mybatis-config.xml"/>
</bean>
2) sqlSessionTemplate 빈 생성
생성자로 sqlSessionFactoryBean 빈을 참조합니다.
<bean class="org.mybatis.spring.SqlSessionTemplate" id="sqlSessionTemplate">
<constructor-arg ref="sqlSessionFactoryBean"/>
</bean>
4. mybatis-spring 인터페이스 위치 설정
<mybatis-spring : scan>
mybatis-spring은 맵퍼 파일(XML 파일)과 연결되는 인터페이스를 사용합니다.
그 인터페이스의 패키지를 알려줘야 합니다.
<mybatis-spring:scan base-package="day3.mapper"/>
member.xml(맵퍼 파일)
mybatis-spring에서는 <mapper> 태그의 namespace 속성을 반드시 지정해줘야 합니다.
패키지명.인터페이스명으로 설정합니다.
<?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="day3.mapper.MemberTblMapper">
<insert id="insert" parameterType="Member">
INSERT INTO MEMBER_TBL_02
(custno,custname,phone,address,joindate,grade,city)
VALUES (#{custNo}, #{custName}, #{phone}, #{address},sysdate, #{grade}, #{city})
</insert>
<select id="selectAll" resultType="Member"> //별칭(typeAlias) 사용
select * from member_tbl_02
</select>
</mapper>
MemberTblMapper 인터페이스
member.xml 매퍼 파일과 연관되는 인터페이스입니다.
추상 메소드는 매퍼 파일의 id로 작성합니다.
public interface MemberTblMapper {
void insert(Member member);
List<Member> selectAll();
}
SpringApp 클래스(실행)
sqlSessionTemplate 빈을 가져와 데이터베이스와 연결합니다.
mybatis-spring은 인터페이스를 이용하여 자동으로 DB 컬럼과
Member 클래스를 연결하는 mapper bean 객체를 생성합니다.
bean 이름은 인터페이스 이름과 동일하고 첫 글자만 소문자입니다.
public class SpringApp {
@Autowired
MemberTblMapper dao;
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext
("classpath:META-INF/spring/applicationContext.xml");
//데이터베이스 연결이 되는지 확인
SqlSessionTemplate sqlSession =
(SqlSessionTemplate) context.getBean("sqlSessionTemplate");
System.out.println(sqlSession); //null 아닌 값으로 출력이 되면 연결 성공
//MemberTblMapper은 인터페이스지만 mybatis-spring은 인터페이스를 이용하여
//자동으로 데이터베이스 컬럼과 Member 클래스를 연결하는 mapper bean 객체를 생성합니다.
//bean 이름은 인터페이스 이름과 동일하고 첫글자만 소문자
MemberTblMapper mapper
= (MemberTblMapper) context.getBean("memberTblMapper");
List<Member> list = mapper.selectAll();
System.out.println(list);
실행 결과
'수업 일지 > Spring' 카테고리의 다른 글
65일차 - [Spring] Model/@ModelAttribute/@SessionAttribute (0) | 2022.04.11 |
---|---|
64일차 - [Spring] 서블릿/MVC 패턴 (0) | 2022.04.08 |
63일차 - [Spring] spring 트랜잭션/빌더 패턴/JUnit 테스트 케이스 (0) | 2022.04.07 |
61일차 - [Spring] 스프링 Bean 등록(어노테이션) (0) | 2022.04.05 |
60일차 - [Spring] 스프링 설치/스프링 Bean 등록(XML) (0) | 2022.04.04 |
댓글