https://dev.mysql.com/downloads/
로그인 하지 않고 No thanks, just start my download. 클릭 후 다운로드
Add Acount 클릭 후 Login Name과 Password 설정 Schema Privileges탭에서 Add Entry로 Schema 선택하고 Select ALL 클릭 후 Apply Home에서 생성한 User계정으로 Connection하기
<source>1.8</source> <target>1.8</target>
<org.springframework-version>5.3.3</org.springframework-version>
<version>1.2.17</version>
<version>4.12</version>
<!-- spring test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- 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 연결 확인
드라이버 네임 : "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세팅)
<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를 변경한다.
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와 연동 확인
<?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을 전달하고 결과를 리턴받는 구조이다.
@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라는 존재를 작성해준다.
root-context.xml에서 <mybatis-spring:scan base-package="org.zerock.mapper"/> 추가 후 org.zerock.mapper 경로의 패키지를 생성한다. TimeMapper 인터페이스를 생성한다.
현재시간을 가져오는 @Select("select now()")
를 넣어준다.
현재 시간이 출력되는것을 확인한다.
(bean을 생성하지 않았지만 매우 간단하게 개발이 가능하다!)
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>
@Autowired
SqlSessionFactory sqlSessionFactory;
@Test
public void testTime2() { //매퍼xml로
log.info(timeMapper.getTime2());
}
현재 시간이 출력되는것을 확인한다.
MyBatis를 이용해서 SQL을 처리할 때 어노테이션을 이용하는 방식이 압도적으로 편리하지만, SQL이 복잡하거나 길어지는 경우에는 어노테이션 보다는 XML을 이용하는 방식을 더 선호한다. MyBatis-Spring의 경우 Mapper인터페이스와 XML을 동시에 이용할 수 있다.
5. HomeController에 주입하고 확인
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";
}
}
현재시간 출력 확인
잘 보고 갑니다!