본문 바로가기

개발

2. SPRING DB연결 및 log4sql

이번 포스팅의 목표는 db연결 및 log4sql을 통한 sql query 출력입니다. 

접속 DB는 mysql을 기준으로 합니다.(Oracle도 크게 다르지 않습니다.)


앞서서 기본 화면 까지 호출되었다는 가정하에 진행합니다. 


1. pom.xml 에 db관련 라이브러리 추가.

   <!-- DB -->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.36</version>

</dependency>

<dependency>

<groupId>commons-dbcp</groupId>

<artifactId>commons-dbcp</artifactId>

<version>1.4</version>

</dependency>


<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis</artifactId>

<version>3.0.6</version>

</dependency>

<dependency>

 <groupId>org.mybatis</groupId>

 <artifactId>mybatis-spring</artifactId>

 <version>1.0.2</version>

</dependency>


2. 프로젝트 우클릭 Run As -> Maven Install


3. src/main/resources 폴더에 conf 폴더 생성 후 db.properties 파일을 생성 후 아래와 같이 작성

(빨간색 부분은 본인 설정에 맞게 설정하시면 됩니다)

db.driverClassName=com.mysql.jdbc.Driver

db.url=jdbc:mysql://127.0.0.1:3306/스키마

db.username=아이디

db.password=패스워드


3. mysql 접속 후 테이블 생성 후 샘플데이터 insert

create table member(

id_no INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,

login_id VARCHAR(20) NOT NULL,

login_pw CHAR(64)  NOT NULL

);


insert into member (login_id, login_pw) 

values ('admin', password('admin1234'));


4. src/main/resources 폴더에 sql 폴더 생성 후 member.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="member">

<select id="getMember" resultType="hashMap">

    select * from MEMBER

  </select>

</mapper>  


5. src/main/webapp/WEB-INF/spring/root-context.xml 파일에 db관련 설정사항 추가

<!-- Root Context: defines shared resources visible to all other web components -->

<!-- db setting -->

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

<property name="locations">

<list>

<value>classpath:conf/db.properties</value>

</list>

</property>

</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

   <property name="driverClassName" value="${db.driverClassName}"/>

   <property name="url" value="${db.url}"/>

   <property name="username" value="${db.username}"/>

   <property name="password" value="${db.password}"/>

  </bean>

 

  <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

 <property name="dataSource" ref="dataSource" />

 <property name="mapperLocations" value="classpath:sql/*.xml" />

</bean>

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">

 <constructor-arg index="0" ref="sqlSessionFactory" />

</bean>


6. HomeController.java 파일에 해당 컨트롤러 쿼리 조회문 추가 후 데이터를 제데로 불러오는지 확인.

1개의 데이터를 insert했으니, 총 결과건수 1나오면 정상

package com.dparts.com;


import java.util.List;

import java.util.Locale;


import org.apache.ibatis.session.SqlSession;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;


/**

 * Handles requests for the application home page.

 */

@Controller

public class HomeController {

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

@Autowired

private SqlSession sqlSession; 

/**

* Simply selects the home view to render by returning its name.

*/

@RequestMapping(value = "/", method = RequestMethod.GET)

public String home(Locale locale, Model model) {

List list = sqlSession.selectList("getMember");

logger.info("ListCount = {}.", list.size());

return "home";

}

}


--> 결과..

INFO : com.dparts.com.HomeController - ListCount= 1.


7.정상적으로 db접속 후 조회 해오는걸 확인했으니, log4sql을 사용해 쿼리 로그를 확인한다. 

-> log4sql란 jdbc를 이용하여 DB에 동작하는 쿼리로그를 찍어주는 라이브러리. 

    http://log4sql.sourceforge.net/ 사이트에서 다운받을수 있다. 

   사용법이 매우 간단하나 가급적이면 개발서버에서만 적용하고 실제 운영서버에서는 사용하지 않는것을 권장.


src/main/webapp/WEB-INF/lib 폴더를 생성 후 다운받은 log4sql.jar 파일을 추가한다. 

3번에서 작성했던 db.properties에서 아래와 같이 변경 후 WAS를 재기동

db.driverClassName=com.mysql.jdbc.Driver 

를 아래와 같이 변경

db.driverClassName=core.log.jdbc.driver.MysqlDriver


6번 동작을 다시한번 해보면 console창에 쿼리가 나오는것을 확인할 수 있다. 

결과 >>

[2015-08-02 15:36:40] [DEBUG]『org.apache.ibatis.executor.statement.RoutingStatementHandler:query(55)』 Elapsed Time [0:00:00.000]


    select

        * 

    from

        MEMBER



[2015-08-02 15:36:40] [DEBUG]『org.apache.ibatis.executor.statement.PreparedStatementHandler:query(40)』 Elapsed Time [0:00:00.000]


    select

        * 

    from

        MEMBER

Query Result[]: -1row


INFO : com.dparts.com.HomeController - ListCount = 1.



그런데 select쿼리에 경우 두번씩 나온다.. 이건 나중에 해결하도록 하고.. 

여기까지 했으면 기본적인 DB접속 및 쿼리 조회까지 완료