본문 바로가기

스프링 프레임워크/Spring+Oracle+MyBatis 게시판 프로젝트

[Spring+Oracle+MyBatis]2. 프로젝트의 JDBC 연결

[Spring+Oracle+Mybatis 게시판 만들기 두번째 시간]

  1. 첫번째 시간에 JDBC드라이버를 정상적으로 추가했다. 그리고 sql developer를 통해 접속을 DB 접속을 만들고, 프로젝트를 위한 새로운 계정까지 만들어줬다면, 테스트코드를 작성해줘야한다.
public class JDBCTests {

    private static final Logger logger = LoggerFactory.getLogger(JDBCTests.class);

    static {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");

        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }

    @Test
    public void testConnection() {
        try {
            Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "BOOK_EX", "book");
            logger.info(con.toString());
        } catch (Exception e) {
            // TODO: handle exception
            fail(e.getMessage());
        }
    }
}

데이터베이스 연결이 가능하면 연결된 Connection객체가 출력된다.

  1. 일반적으로 여러 사용자의 요청을 동시에 처리해야하는 웹 애플리케이션의 경우 데이터베이스의 연결을 이용할 때Connection Pool을 이용한다. Java에서는 DataSource라는 인터페이스를 통해서 커넥션 풀을 사용한다. 즉, DataSource를 통해 매번 DB와 연결하는 방식이 아닌, 미리 연결을 맺어주고 반환하는 구조를 이용해서 성능을 향상시킨다. 커넥션 풀은 여러종류가 있지만 여기선 HikariCP를 이용하여 MyBatis설정도 함께 진행한다.

    [pom.xml에 추가되는 부분]

    <!-- HikariCP 관련-->
    <dependency>
         <groupId>com.zaxxer</groupId>
         <artifactId>HikariCP</artifactId>
         <version>2.7.4</version>
    </dependency>

    [mybatis-config.xml파일(mybatis설정파일) 추가]

MyBatis는 SQL Mapping 프레임워크로 별도의 설정파일을 가질 수 있음.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
  
<configuration>

</configuration>

[Mapper파일 저장 경로 추가]

xml로 작성되는 mapper파일의 경로를 분리해서 만들어줌



[root-context.xml에 추가되는 부분]

<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
    <property name="jdbcUrl" value="jdbc:log4jdbc:oracle:thin:@localhost:1521:orcl" />
     <property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy" />
     <property name="username" value="BOOK_EX" />
    <property name="password" value="book" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource"></property>
	<property name="configLocation" value="classpath:/mybatis-config.xml"></property>
	<property name="mapperLocations" value="classpath:/org/wjheo/mapper/*.xml"></property>
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
    <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory">
    </constructor-arg>
</bean>

 

  1. dataSource, sqlSession 테스트코드를 작성해준다.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
public class DataSourceTests {

	private static final Logger logger = LoggerFactory.getLogger(DataSourceTests.class);

	@Inject
	private DataSource dataSource;

	@Inject
	private SqlSessionFactory sqlSessionFactory;

	@Test
	public void testConnection() {

		try (Connection con = dataSource.getConnection()) {
			logger.info(con.toString());

		} catch (Exception e) {
			fail(e.getMessage());
		}

	}

	@Test
	public void testMyBatis() {

		SqlSession session = sqlSessionFactory.openSession();
		Connection con = session.getConnection();

		logger.info("=== sesseion : " + session.toString());
		logger.info("=== con : " + con.toString());

	}

}

스프링에 bean으로 등록된 dataSource를 이용해서 Connection을 제대로 처리하면 내부적으로 hikariCP가 시작되고 종료되는걸 확인할 수 있다.

sqlSession도 잘 만들어지는 걸 확인할 수 있다.

 

[다음시간내용]
부트스트랩 이용 화면 메인화면 구성
게시판 CRUD