Spring_MySQL,JDBC,MyBatis연동(xml세팅)

Ina Kim·2021년 3월 3일
0

Spring

목록 보기
1/2

MySQL설치하기

https://dev.mysql.com/downloads/

로그인 하지 않고 No thanks, just start my download. 클릭 후 다운로드

USER 생성하기

Add Acount 클릭 후 Login Name과 Password 설정 Schema Privileges탭에서 Add Entry로 Schema 선택하고 Select ALL 클릭 후 Apply Home에서 생성한 User계정으로 Connection하기

MySQL JDBC,MyBatis 연동하기

프로젝트 생성 후 pom.xml 세팅

  • 자바버전 1.8 <source>1.8</source> <target>1.8</target>
  • 스프링버전 5.3.3 <org.springframework-version>5.3.3</org.springframework-version>
  • log4j 1.2.17 <version>1.2.17</version>
  • junit 4.12 <version>4.12</version>
  • spring-test
		<!-- spring test -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
  • jdbc, mysql, HikariCP, mybatis, mybatis-spring, lomboc
		<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.18</version>
			<scope>provided</scope>
		</dependency>

		<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.23</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
		<dependency>
			<groupId>com.zaxxer</groupId>
			<artifactId>HikariCP</artifactId>
			<version>3.4.5</version>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.5.6</version>
		</dependency>

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

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

1. JDBC 연결 확인

JDBC Test

드라이버 네임 : "com.mysql.cj.jdbc.Driver"
url : "jdbc:mysql://localhost:3306/dclass?serverTimezone=UTC"
테스트 코드는 Java와 JDBC 드라이버 만으로 구현해서 먼저테스트 해야한다.

package org.zerock.dao;

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

import org.junit.Test;

import lombok.extern.log4j.Log4j;

@Log4j
public class JDBCTest {

	@Test
	public void testConnection() throws Exception{
		
		//드라이버로드(드라이버네임)
		Class.forName("com.mysql.cj.jdbc.Driver");
		
		log.info("------연결확인--------");
		
		String url = "jdbc:mysql://localhost:3306/dclass?serverTimezone=UTC";
		String username = "js";
		String password = "js";
		
		Connection con = DriverManager.getConnection(url,username,password);
		
		log.info(con);
		con.close();
		
	}
}

2. 커넥션 풀 설정(HikariCP 세팅)

2가지 세팅방법이 있다. (xml세팅/Java config세팅)

xml 세팅

	<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
		<!-- <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property> 
			<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:XE"></property> -->

		<property name="driverClassName"
			value="com.mysql.cj.jdbc.Driver"></property>
		<property name="jdbcUrl"
			value="jdbc:mysql://localhost:3306/dclass?serverTimezone=UTC"></property>

		<property name="username" value="js"></property>
		<property name="password" value="js"></property>
	</bean>

	<!-- HikariCP configuration -->
	<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"
		destroy-method="close">
		<constructor-arg ref="hikariConfig" />
	</bean>

root-context.xml 코드를 작성하고 driverClassName,jdbcUrl,username,password를 변경한다.

DataSource test

package org.zerock.dao;

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

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class DataSourceTests {
	
	//주입
	@Autowired
	DataSource ds;
	
	@Test
	public void testConn() throws Exception{
		
		Connection con = ds.getConnection();
		log.info(con);
		con.close();
	}
	
}

3. Mybatis와 연동 확인

root-context.xml 코드 추가

<?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:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
	xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
		http://www.springframework.org/schema/beans http://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">
 <!-- mybatis SqlSessionFactoryBean -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

SQLSessionFactory는 내부적으로 SQLSession이라는 것을 만들어 내는 존재인데 , 개발에서는 SQLSession을 통해서 Connection을 생성하거나 원하는 SQL을 전달하고 결과를 리턴받는 구조이다.

SqlSessionFactory test

@Autowired
	SqlSessionFactory sqlSessionFactory;
	
	@Test
	public void testConn2() throws Exception{
		SqlSession session = sqlSessionFactory.openSession();
		log.info(session);
		session.close();
	}

테스트 후 root-context.xml에서 ctrl + space bar 눌렀을때 <mybatis-spring:scan base-package=""/> 나오면 세팅 완성

4. Mapper 만들기

SQL을 처리할 설정을 분리하고 자동으로 처리되는 방식을 이용하는것이 편하기 때문에 Mapper라는 존재를 작성해준다.

1. MapperInterface +어노테이션 이용해서 현재시간 출력하기

root-context.xml에서 <mybatis-spring:scan base-package="org.zerock.mapper"/> 추가 후 org.zerock.mapper 경로의 패키지를 생성한다. TimeMapper 인터페이스를 생성한다.
현재시간을 가져오는 @Select("select now()")를 넣어준다.

TimeMapperTest (MapperInterface +어노테이션을 이용한 getTime)

현재 시간이 출력되는것을 확인한다.
(bean을 생성하지 않았지만 매우 간단하게 개발이 가능하다!)

2. xml 이용해서 현재시간 출력하기

MapperInterface에 xml을 이용하기 위한 getTime2메서드를 선언한다.
src/main/resources에 org/zerock/mapper 파일을 만들고 TimeMapper.xml파일을 생성해준다.
getTime2라는 id를 가지는 쿼리문을 작성한다. (현재시간을 가져오는 select now())

<?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="org.zerock.mapper.TimeMapper"> <!--namespace경로 알맞게 수정-->

	<select id="getTime2" resultType="string">
	
		 <![CDATA[
   		 select now()
   		 ]]>

	</select>
</mapper>

TimeMapperTest (xml을 이용한 getTime2)

	@Autowired
	SqlSessionFactory sqlSessionFactory;
    
    @Test
	public void testTime2() { //매퍼xml로
		log.info(timeMapper.getTime2());
	}
  

현재 시간이 출력되는것을 확인한다.
MyBatis를 이용해서 SQL을 처리할 때 어노테이션을 이용하는 방식이 압도적으로 편리하지만, SQL이 복잡하거나 길어지는 경우에는 어노테이션 보다는 XML을 이용하는 방식을 더 선호한다. MyBatis-Spring의 경우 Mapper인터페이스와 XML을 동시에 이용할 수 있다.

5. HomeController에 주입하고 확인

HomeController 에 TimeMapper 주입

package org.zerock.controller;

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

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;
import org.zerock.mapper.TimeMapper;

/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	@Autowired //안하면 매퍼를 찾지 못한다.
	TimeMapper timeMapper;
	
	/**
	 * Simply selects the home view to render by returning its name.
	 */
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		logger.info("Welcome home! The client locale is {}.", locale);
		
		String getTime = timeMapper.getTime();
		model.addAttribute("time",getTime);
		
		return "home";
	}
	
}

home.jsp에 getTime 밀어넣고 서버 실행



현재시간 출력 확인

profile
기록하는것을 좋아합니다

2개의 댓글

comment-user-thumbnail
2022년 3월 14일

잘 보고 갑니다!

1개의 답글