본문 바로가기

Dev/[Java]

[Spring] 5. Database Connection Pool (DBCP)써보기, MyBatis Spring

반응형

 

 

springbeans.xml 에서 저 p라는 namespace를 체크하면..

기존 아래와 같이

<bean id="" class''>

<property name="" value=""/>

<property name="" value=""/>

</bean>

 

이렇게 쓰던걸...

<bean id = "" class="" p:url="" p:username="" p:password = "" p:driverClassName = ""/>

 

이렇게 쓸 수 있다.

 

자 이제 MyBatis Spring을 쓸 것이다.

 

기존 MyBatis는 sqlMapConfig.xml파일에 이렇게 적어줬었따..

	<!--  DataSource 설정 -->
	<!--  나중에 Spring 연동하면 이부분은 안한다. -->
	<!--  db.properties 에 있는 정보들을 아래와같이 넣어준다. -->
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${db.driver}"/> <!-- 런타임에 이부분 치환됨 -->
				<property name="url" value="${db.url}"/>
				<property name="username" value="${db.username}"/>
				<property name="password" value="${db.password}"/>
			</dataSource>
		</environment>
	</environments>
	

MyBatis Spring는 springbeans.xml에 넣어줄것이다.

 

 

 

values.properties 에 지난번에 MyBatis할 때 썼었던 DB설정값(DB.properties)들을 가져와 넣어준다

 

#db.driver=oracle.jdbc.OracleDriver
#db.url=jdbc:oracle:thin:@127.0.0.1:1521:xe
#db.username=scott
#db.password=tiger

db.driver=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://127.0.0.1:3306/java_db?useUnicode=true&charaterEncoding=utf-8&useSSL=false&serverTimezone=UTC
db.username=scott
db.password=tiger

 

 

이후 Springbeans.xml에 아래와 같이 넣어줌

DataSource를 Bean화 시켜주는것이다.

	<!-- Aphache DBCP BasicDatasource 클래스를 Bean으로 등록 -->
	<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" 
	p:driverClassName="${db.driver}" 
	p:url="${db.url}" 
	p:username="${db.username}"
	p:password="${db.passeord}" />

 

 

자 이제 그리고,, 

Mybatis에서 있었던,, SqlMapConfig.xml 파일과, XXXMapper.xml 파일을 가져온다.

 

SqlMapConfig.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>
	<!-- VO객체를 설정한다..(클래스 이름이 뭔지 알려주는거지.) -->
	<!-- jdbc.user.vo.UserVO 이걸 짧게 쓰기 위해 Alias를 준다.alias="User" -->
	<typeAliases>
		<typeAlias alias="Book" type="myspring.user.vo.UserVO"/>
	</typeAliases>
</configuration>

 

 

이걸 Bean에다가 등록해준다..

springbeans.xml

	<!--  SqlSessionFactoryBean 클래스를 Bean으로 등록 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<property name="configLocation" value="classpath:config/SqlMapConfig.xml"/>
		<property name="mapperLocations">
			<list>
				<value>classpath:config/UserMapper.xml</value>
			</list>
		</property>
	</bean>

 

그리고 SqlSessionTemplate 도 추가해준다.

여기서 주의해야 할 점은 SqlSessionTemplate는 기본 생성자가 없기 때문에

아래와 같이 constructor-arg를 해줘야한다.

	<!--  SqlSessionTemplate -->
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg ref="sqlSessionFactory" />
	</bean>

 

 

이후 쿼리문 유닛테스트로 날려보자...

 

package myspring.user.test;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import myspring.user.vo.UserVO;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:config/springbeans.xml")
public class DataSourceTest {
	@Autowired
	DataSource dataSource;
	
	@Autowired
	SqlSessionFactory factory;
	
	@Autowired
	SqlSession session;
	
	@Test
	public void sql() {
		UserVO user = session.selectOne("userNS.selectUserByUserid", "dooly");
		System.out.println(user);
		
	}
	
	
	
	@Test @Ignore
	public void ds() {
		System.out.println(factory.getClass().getName());
		
		try {
			Connection con = dataSource.getConnection();
			System.out.println(con);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

 

 

잘 된다....

 

 

 

 

메이븐오류로 조금 헤맸다.

메이븐 설정이다.

 

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>MySpringMVC</groupId>
	<artifactId>MySpringMVC</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<build>
		<sourceDirectory>src</sourceDirectory>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.8.0</version>
				<configuration>
					<release>11</release>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-war-plugin</artifactId>
				<version>3.2.1</version>
				<configuration>
					<warSourceDirectory>WebContent</warSourceDirectory>
				</configuration>
			</plugin>
		</plugins>
	</build>
	<dependencies>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>5.2.12.RELEASE</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/junit/junit -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.13.1</version>
			<!-- <scope>test</scope> -->
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>5.2.12.RELEASE</version>
			<!-- <scope>test</scope> -->
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client -->
		<dependency>
			<groupId>org.mariadb.jdbc</groupId>
			<artifactId>mariadb-java-client</artifactId>
			<version>2.7.1</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>5.2.12.RELEASE</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-dbcp2</artifactId>
			<version>2.8.0</version>
		</dependency>


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

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

		<!--https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.22</version>
		</dependency>
	</dependencies>
</project>

 

 

 

 

 

반응형