ss__jae2
타닥타닥 IT
ss__jae2
전체 방문자
오늘
어제

Github

  • 타닥타닥 IT (179)
    • 웹개발 (86)
      • JAVA (23)
      • DBMS (6)
      • HTML (9)
      • CSS (7)
      • JavaScript (12)
      • JSP (14)
      • Spring (15)
    • FrontEnd (63)
      • HTML (5)
      • CSS (12)
      • JavaScript (16)
      • React.js (14)
      • Node.js (16)
    • API (5)
    • SQLD (21)
      • SQLD (1)
      • 1과목 데이터 모델링의 이해 (11)
      • 2과목 SQL 기본 및 활용 (9)
    • CS Study (4)
      • 네트워크 (4)

공지사항

최근 댓글

최근 글

반응형
hELLO · Designed By 정상우.
ss__jae2

타닥타닥 IT

웹개발/Spring

[Spring] 스프링 프레임워크에서 DB 연결

2022. 7. 1. 18:11
반응형

1. JDBC로 직접 연결

package com.koreait.persistence;

import java.sql.Connection;
import java.sql.DriverManager;

import org.junit.Test;

import lombok.extern.log4j.Log4j;

@Log4j
public class JDBCTests {
	// static 블럭 : 클래스 로딩시 딱 한번만 수행되는 영역, 프로젝트 빌드시 가장 먼저 수행되는 영역이다.
	static {
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			System.out.println(e);
		}
	}
	
	@Test
	public void connectionTest() {
		// try(Statement) : 소괄호 안에 close를 필요로 하는 인스턴스를 작성하게 되면
		// try문이 끝났을 때 자동으로 close()를 실행해준다.
		try(
				Connection conn = DriverManager.getConnection(
						"jdbc:mysql://localhost:3306/web0315",
						"root",
						"1234"
				)
		) {
			log.info(conn);
		} catch (Exception e) {
			log.warn(e);
		}
	}
}
  • 스프링이 관리해야할 것이 없고 그냥 이 파일에서만 사용하면 되므로 아무런 설정을 할 필요가 없다.
  • static 블럭 : 클래스 로딩시 딱 한번만 수행되는 영역으로 프로젝트 빌드시 가장 먼저 수행되는 영역이다.
  • try ~ catch문에서 try() 소괄호 안에 close를 필요로 하는 인스턴스를 작성하게 되면 try문이 끝났을 때 자동으로 close()가 되며 그 괄호 안의 것이 성공을 하면 try문이 실행되고 아니면 catch문이 실행된다.

2. DBCP로 연결

https://tadaktadak-it.tistory.com/94

 

[JSP] DBCP(Database Connection Pool)

1. DBCP(Database Connection Pool) - 원칙은 항상 데이터베이스를 열어주면(Connection) 무조건 닫아줘야 한다.(conn.close()) - 사용자가 한명이 아니라 여러명이기 때문에 연결이 엄청 많아지기 때문에 부하..

tadaktadak-it.tistory.com

  • DBCP로 DB를 연결하기 위해 DataSource를 사용하였다.
  • 스프링 프레임워크에서도 역시 hikari객체를 이용해서 DataSource를 만들어서 DBCP를 사용한다.
// root-context.xml에 추가

<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
	<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
	<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/web0315"></property>
	<property name="username" value="root"/>
	<property name="password" value="1234"/>
</bean>
	
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
	<constructor-arg ref="hikariConfig"/>
</bean>
  • 실행을 하게 되면 root-context.xml을 들려서 bean객체를 만들어야 하므로 위 코드를 root-context.xml에 추가하게 되면 hikari 객체를 이용해 DataSource를 객체로 사용할 수 있게 된다.
package com.koreait.persistence;

import static org.junit.Assert.fail;

import java.sql.Connection;

import javax.sql.DataSource;

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 lombok.Setter;
import lombok.extern.log4j.Log4j;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")

@Log4j
public class DataSourceTests {
	// DBCP를 사용할 떄는 필요한 설정들을 context.xml에 작성했는데
	// Spring이 관리하기 때문에 root-context.xml에 작성
	
	// dataSource를 주입해줘야 하기 때문에 Spring 필요
	@Setter(onMethod_ = @Autowired)
	private DataSource dataSource;
	
	@Test
	public void connectionTest() {
		try(
			Connection conn = dataSource.getConnection();
		){
			log.info(conn);
		} catch (Exception e) {
			fail(e.getMessage());
		}
	}
}
  • DataSource 객체를 주입하기 위해 스프링이 필요하기 때문에 @RunWith()와 @ContextConfiguration을 설정해줘야 한다.
  • 그리고 의존성 주입이 필요하므로 @Setter도 설정해줘야 한다.

3. MyBatis로 연결

https://tadaktadak-it.tistory.com/98

 

[JSP] MyBatis

1. MyBatis - 모델(객체)과 DB(테이블)의 매개체 역할의 프레임워크 - ORM(Object Relational Mapping) - Java 소스코드 안에 SQL문을 작성하면 코드가 길어지고 섞여 있어서 유지보수 및 분업이 어려움 - MyBatis..

tadaktadak-it.tistory.com

  • MyBatis는 pom.xml에 미리 라이브러리를 다운로드를 해줘야 하며 MyBatis도 역시 hikari 객체를 이용해서 생성한 DataSource를 이용해서 SqlSessionFactory를 생성해서 사용한다.
// root-context.xml에 추가

// hikari 객체
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
	<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
	<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/web0315"></property>
	<property name="username" value="root"/>
	<property name="password" value="1234"/>
</bean>
	
// DataSource 객체
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
	<constructor-arg ref="hikariConfig"/>
</bean>

// SqlSessionFactory 객체
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource"/>
</bean>
  • 위와 같이 DataSource를 이용해서 SqlSessionFactory객체를 bean으로 root-context.xml에 추가해준다.
package com.koreait.persistence;

import static org.junit.Assert.fail;

import java.sql.Connection;

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 lombok.Setter;
import lombok.extern.log4j.Log4j;

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class MyBatisTests {
	@Setter(onMethod_ = @Autowired)
	private SqlSessionFactory factory;
	
	@Test
	public void connectionTest() {
		
		try(
			SqlSession sqlsession = factory.openSession(true);
			Connection conn = sqlsession.getConnection();
		) {
			log.info("SqlSession : " + sqlsession);
			log.info("Connection : " + conn);
		}
		catch (Exception e) {
			fail(e.getMessage());
		}
	}
}
  • Mybatis를 이용해 connection을 생성하기 위해서는 스프링을 이용해 주입을 해줘야 하기 때문에 @RunWith()와 @ContextConfiguration을 설정해줘야 한다.
반응형
저작자표시 (새창열림)

'웹개발 > Spring' 카테고리의 다른 글

[Spring] 스프링 구동 순서/과정, MVC 구조, Front-Controller 패턴  (2) 2022.07.03
[Spring] 스프링 프레임워크에서 MyBatis 사용  (0) 2022.07.03
[Spring] 의존성 주입 테스트, 테스트 환경  (0) 2022.07.01
[Spring] Lombok 라이브러리  (0) 2022.07.01
[Spring] 스프링 프레임워크에서의 프로젝트  (0) 2022.07.01
    '웹개발/Spring' 카테고리의 다른 글
    • [Spring] 스프링 구동 순서/과정, MVC 구조, Front-Controller 패턴
    • [Spring] 스프링 프레임워크에서 MyBatis 사용
    • [Spring] 의존성 주입 테스트, 테스트 환경
    • [Spring] Lombok 라이브러리
    ss__jae2
    ss__jae2

    티스토리툴바