본문 바로가기
강의

Spring Lec 01

by IT새내기IM 2023. 4. 27.

■ ② Mysql 연결 담당 - DataSource 설정 ( root-context.xml - Namespaces 수정 )

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.6</version>
</dependency>

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

<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${org.springframework-version}</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>${org.springframework-version}</version>
</dependency>

mybatis추가


■ WAS 없이 컨트롤러 테스트 ( pom.xml 수정 )

. pom.xml

 

<!-- Servlet -->

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>servlet-api</artifactId>

<version>2.5</version>

<scope>provided</scope>

</dependency>

 

위의 기존 코드를 아래와 같이 수정

 

<!-- Servlet -->

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>javax.servlet-api</artifactId>

<version>4.0.0</version>

</dependency>

 

== 설명 ==

WAS 없이 컨트롤러 테스트 하기

스프링 MVC가 특별하게 느껴지는 이유 중 하나는 spring-test 모듈을 통해서 별도의 WAS 구동 없이도 컨트롤러를 테스트하는 작업이 가능하기 때문이다.

 

spring-test 를 사용해서 실행할 때 가능하면 WAS의 Servlet 스펙 버젼을 일치시켜서 테스트 하는 것이 좋다.

 

이클립스에서 버젼 확인

- 서버 : <%=application.getServerInfo() %><br>

- 서블릿 : <%= application.getMajorVersion() %>.<%= application.getMinorVersion() %>  //4.0 <br>

- JSP : <%= JspFactory.getDefaultFactory().getEngineInfo().getSpecificationVersion() %>

 


 

① 4가지 항목 체크 확인 



 source 탭 선택후 아래 코드 삽입 ,저장 

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:jdbc="http://www.springframework.org/schema/jdbc"

xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"

xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd

http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd

http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

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

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>

<property name="url" value="jdbc:mysql://localhost:3306/spring"></property>

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

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

</bean>

bean( 객체 생성할때태그임)

==== 설명 ====

스프링과 MyBatis를 같이 사용하는 경우에는 주로 스프링의 설정으로 JDBC 연결을 처리하는 경우가 많다.

DataSource는 JDBC의 커넥션을 처리하는 기능을 가지고 있기 때문에 데이터베이스와 연동 작업에 반드시 필요하다. 


 

▲ ③ DataSourceTest.java 테스트

package org.zerock.controller;

import java.sql.Connection;
import javax.inject.Inject;
import javax.sql.DataSource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

//아래 두개의 에노테이션은 현재 테스트 코드를 실행할 때 스프링이 로딩되도록 하는 부분

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

public class DataSourceTest {

	//@Inject >> 범용:자바에서 지원, 연결방식:타입에 맞춰서 연결
	//스프링이 생성해서 주입처리된다.
	@Inject
	private DataSource ds;

	@Test  // JUnit 테스트
	public void testConection() throws Exception{
		try {
			Connection con = ds.getConnection();
			System.out.println(con); //객체 주소값 출력
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
}

Ctrl+space ( 해당사항만 import)  , Ctrl+shift+o ( 전체 import)

asdfsadfsadf


■ Mybatis 연결 ( root-context.xml 추가 )

<!-- 추가 구문 -->

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

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

</bean>

//Mybtis  Mysql 연동 작업

//Mybatis 와 스프링 연동 작업에서의 핵심은 Connecton을 생성하고, 처리하는 SQLSessionFactroy의 존재

//SQLSessionFactroy는 데이터베이스와의 연결과 SQL의 실행에 대한 모든 것을 가진 가장 중요한 객체

//스프링을 이용할 때는 SQLSessionFactroy를 생성해 주는 특별한 객체를 설정해 주는데 SqlSessionFactoryBean 클래스 사용

//추가설명

// MyBatis 에서 가장 핵심적인 객체는 SQLSession 이라는 존재와 SQLSessionFactroy 입니다.

// SQLSessionFactroy 의 이름에서 보듯이 내부적으로 SQLSession 이라는 것을 만들어 내는 존재.

// SQLSession 을 통해서 Connection 을 생성하거나 원하는 SQL 을 전달하고, 결과를 리턴 받는 구조로 작성한다.

// 패키지명을 보면 MyBatis 의 패키지가 아니라 스프링과 연동 작업을 처리하는 mybatis.spring 라이브러리의 클래스임을 알 수 있습니다.


■ mybatis-config.xml 생성

. 프로젝트 > src/main/resources > mybatis-config.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>
</configuration>

== 설명 ==

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

이를 이용하면 스프링의 설정과 별도로 사용하는 모든 Mybatis의 설정 기능을 활용할 수 있다.

지금 당장은 아니지만 나중을 위해서라도 Mybatis의 설정 파일을 하나 추가해 주는 것이 편리하다.


■ root-context.xml 수정

	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource"></property>
	</bean>	

	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
		<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
	</bean>
    
    <!-- sql 실제 구문부분 추가 -->
		
	<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:mappers/**/*Mapper.xml"></property>
	</bean>

// 추가 한다.

// 스프링이 동작할 때 mybatis-config.xml 파일이 같이 동작하도록 설정해 주는 작업이다.


▶ MybatisTest.java 테스트

package org.zerock.controller;


import java.sql.Connection;
import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/spring/**/root-context.xml"})
public class MybatisTest {

	@Inject
	private SqlSessionFactory sqlFactory;


@Test
	public void testFactory() {
		System.out.println(sqlFactory);
	}


@Test
	public void testSession() throws Exception{
		try{
			SqlSession session = sqlFactory.openSession();
			Connection con = session.getConnection();

			System.out.println(session); 
			System.out.println(con);

		}catch(Exception e) {
			e.printStackTrace();
		}
	}
}
== 설명 ==
testSession() ​에서는 실제 데이터베이스와의 연결을 담당하는 SqlSession을 생성하는 부분 
스프링 + Mybatis + Mysql 최종 연결 테스트

 

'강의' 카테고리의 다른 글

Spring Lec03  (0) 2023.04.28
Spring Lec02  (0) 2023.04.27
0306 빅데이터  (0) 2023.03.06
0229 mysql JOIN,GROUP by  (0) 2023.03.03
0228 AJAX , Category  (0) 2023.03.02

댓글