JavaConfig mariadb 연결

  • pom.xml
  • pom.xml에서 mariadb 라이브러리 추가
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>3.4.2</version>
</dependency>

<!-- mybatis-spring -->
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis-spring</artifactId>
	<version>1.3.1</version>
</dependency>

<dependency>
	<groupId>org.mariadb.jdbc</groupId>
	<artifactId>mariadb-java-client</artifactId>
	<version>2.3.0</version>
</dependency>

JDBC 연결

  • JDBC는 어떤 DB 드라이버든 동일한 코드로 제어할 수 있다.
  • myBatis에 비해 같은 코드 반복이 많고 복잡하다(select 직접 처리) 직접 연결을 열고 닫아줘야 한다
  • 많은 사용자들이 db에 원활하게 접속할 수 있게 db 커넥션풀을 미리 만들어놔야 한다.
  • getConnection(“jdbc:mariadb://접속ip:포트번호/데이터베이스이름”, id, 비밀번호)
  • 아래 코드가 실패하면 비밀번호, db 존재 확인 그 외 1.권한 확인 2. 포트번호 확인 2. 방화벽 확인(ping test)
  • 나는 포트가 올라가있음에도 다른 포트번호와 겹쳐서 그런지(mysql?) mariadb에 접속하지 못했다. 그 후 mariadb 포트번호를 변경하고 접속할 수 있었다.
import static org.junit.Assert.fail;

import java.sql.Connection;
import java.sql.DriverManager;
import org.junit.Test;
import lombok.extern.log4j.Log4j;

@Log4j
public class mysqlDBTest {

	@Test
	public void testConnection() throws ClassNotFoundException {	
		 Class.forName("org.mariadb.jdbc.Driver");
	    try (Connection con = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3310/test", "test", "1234"))
		{
			System.out.println(con);
		} catch (Exception e) {
			fail(e.getMessage());
		}
	}
}

MyBatis

  • SqlSessionFactory는 DataSource를 참고하여 db와 mybatis를 연결시킴
  • JDBC에서는 DB에 접근할 때마다 Session을 가져와서 사용했지만 Spring에서는 bean에 올려두고 mapper를 이용해서 접근
  • @Mapper, @Service 어노테이션을 이용하면 스프링 빈으로 주입받아 사용 가능설명
  • 자동으로 연결과 종료를 수행한다

  • pom.xml ~~~
org.mybatis mybatis 3.4.6 org.mybatis mybatis-spring 1.3.2 org.springframework spring-tx ${org.springframework-version} org.springframework spring-jdbc 3.0.3.RELEASE

- 아래는 접속을 확인하기 위해서 유닛테스트를 하기 위해 Connection 직접 호출
- RootConfig.java

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.datasource.DriverManagerDataSource;

@Configuration @ComponentScan(basePackages= {“base.toy.vo”}) public class RootConfig {

@Bean
public DataSource dataSource(){
	DriverManagerDataSource dataSource = new DriverManagerDataSource();
	dataSource.setDriverClassName("org.mariadb.jdbc.Driver");
	dataSource.setUrl("jdbc:mariadb://localhost:3310/test");
	dataSource.setUsername("test");
	dataSource.setPassword("1234");
	
	return dataSource;
}

  @Bean
  public SqlSessionFactory sqlSessionFactory() throws Exception {
    SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
    sqlSessionFactory.setDataSource(dataSource());
    return (SqlSessionFactory) sqlSessionFactory.getObject();
  }

}


- test.java

package base.toy.project;

import static org.junit.Assert.*;

import java.sql.Connection;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; 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 base.toy.config.RootConfig; import lombok.Setter; import lombok.extern.log4j.Log4j;

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = {RootConfig.class}) @Log4j public class test {

  @Setter(onMethod_ = { @Autowired })
  private SqlSessionFactory sqlSessionFactory;

  @Test
  public void testMyBatis() {

    try (SqlSession session = sqlSessionFactory.openSession();
       Connection con = session.getConnection();) {
      log.info(con);
      

    } catch (Exception e) {
    	log.info("실패"+e.getMessage());
      fail(e.getMessage());
    }

  } } ~~~

커넥션 풀

  • 여러명의 사용자를 동시에 처리해야하므로 커넥션 풀을 사용해 미리 접속을 만들어두는 것이 좋다.
  • HikariCP 사용
  • pom.xml
<dependency>
	<groupId>com.zaxxer</groupId>
	<artifactId>HikariCP</artifactId>
	<version>2.7.4</version>
</dependency>
  • DataSource가 HikariConfig를 사용하는 것으로 변경
  • SqlSession Connect 시 성공
@Bean
public DataSource dataSource(){
	  HikariConfig hikariConfig = new HikariConfig();
	  hikariConfig.setDriverClassName("org.mariadb.jdbc.Driver");
	  hikariConfig.setJdbcUrl("jdbc:mariadb://localhost:3310/test");
	  hikariConfig.setUsername("test");
	  hikariConfig.setPassword("1234");
	
	  HikariDataSource dataSource = new HikariDataSource(hikariConfig);
	return dataSource;
}