Spring-Day10

JUNHO YEOM·2023년 3월 3일
0

Spring

목록 보기
14/14

Spring-MyBatis 연동하기

Dependency

  • MyBatis 3.5.9
  • MyBatis-Spring (스프링, MyBatis 연동 모듈)
  • Spring - JDBC 5.3.22 version
  • MySQL connector/J (MySQL DB 연결)

pom.xml에 dependency 추가 해주기

connectorJ
Maven Repository에서 다운
MySQL Connector Java » 8.0.32
https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.32


1. sql-config파일 세팅

src/main/resources

<!-- 
        property는 하나만 설정할꺼예요!
        외부파일을 이용해서 데이터베이스 접속정보를 가져올꺼예요!
        외부파일을 하나 만들꺼구요. => driver.properties 파일을 만들꺼예요!
     -->
	<properties resource="./driver.properties"/>

Spring에서 사용하기 위해 properties 삭제해줘요 (다른 설정 사용할 꺼에요)
settings는 그냥 사용할 꺼에요

settings 변경

기존 mybatis-config.xml

	<settings>
	 	<setting name="jdbcTypeForNull" value="NULL"/>
	 	<!-- Data가 없을경우 NULL로 처리할 꺼예요! -->
	 </settings>

	<settings>
	  <!-- Data가 없을경우 NULL로 처리할 꺼예요! -->	
    <setting name="jdbcTypeForNull" value="NULL"/>
      <!-- Log4J와 Mybatis를 연동해서 Query 문과 실행 결과를 log로 출력해요! -->
      <setting name="LogImpl" value="LOG4J2"/>
	</settings>

typeAlias 설정 삭제
연결 정보 삭제
mapper정보 삭제

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>


	<!-- MyBatis에 대한 기본 세팅정보가 나와요! MyBatis가 동작하는 기본적인 방식에 대한 세팅정보가 있어요! -->
	<settings>
		<!-- Data가 없을경우 NULL로 처리할 꺼예요! -->
		<setting name="jdbcTypeForNull" value="NULL" />
		<!-- Log4J와 Mybatis를 연동해서 Query 문과 실행 결과를 log로 출력해요! -->
		<setting name="LogImpl" value="LOG4J2" />
	</settings>


	<!-- 별명지정하는게 나와요! 타이핑 줄이기위해서 사용해요! -->
	<!-- <typeAliases>
		<typeAlias type="vo.Book" alias="Book" />
	</typeAliases> -->

</configuration>

2. DataCource 설정

연결 정보가 있어야 해요
연결 정보는 별도의 property파일로 작성할 겁니다

경로

/src/main/resources/config/database.properties

database.properties

db.driverClassName=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/spring?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&autoReconnect=true
db.username=root
db.password=test1234

DataSource를 Bean으로 등록

DataSource -> SqlSessionFactory -> SqlSession

모두 Bean으로 등록하는 작업을 할 꺼에요

Bean으로 등록해야 하니 xml 파일을 만들꺼에요
Bean으로 읽는 친구는 원래 Root-context.xml 파일이 읽지만, 관리를 쉽게 하기 위해 spring에 만들어 줄게요

src/main/webapp/WEB-INF/spring

이름 설정 하기

설정 체크

잘 만들어 진것을 볼 수 있어요


web.xml에서 root-context.xml의 설정을 확인할 수 있어요

web.xml

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/root-context.xml</param-value>
	</context-param>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/*-context.xml</param-value>
	</context-param>

*와일드 카드 문자를 사용해서 우리가 방금 만든 datasource-context.xml파일도 읽을수 있게 설정을 바꿔 줘요


datasource-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"
	xsi:schemaLocation="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">

<!-- src/main/resources 경로는 classpath에 포함됩니다. 
        location경로의 파일을 property파일로 불러와 사용하겠다는 설정입니다. -->
   <context:property-placeholder
      location="classpath:config/database.properties" />

   <!-- dataSource를 Bean으로 등록합니다. 
        dataSource는 connection에 필요한 정보가지고 있습니다. -->
   <bean id="dataSource"
      class="org.springframework.jdbc.datasource.DriverManagerDataSource">
      <property name="driverClassName" value="${db.driverClassName}" />
      <property name="url" value="${db.url}" />
      <property name="username" value="${db.username}" />
      <property name="password" value="${db.password}" />
   </bean>

   <!-- sqlSessionFactory를 Bean으로 등록합니다. 
        SqlSessionFactory는 SqlSession을 만들기 위한 정보들을 가지고 있습니다. 
        mapper를 생성하면 list에 추가해야 합니다. -->
   <bean id="sqlSessionFactory"
      class="org.mybatis.spring.SqlSessionFactoryBean">
      <property name="dataSource" ref="dataSource" />
      <property name="configLocation"
         value="classpath:mybatis-config.xml" />
      <property name="mapperLocations">
         <list>
            <value></value>
         </list>
      </property>
   </bean>

   <!-- sqlSession를 Bean으로 등록합니다. 기존의 sqlSession은 Thread-Sage하지 않습니다. 
             그래서 Bean으로 등록해서 사용하면 Transaction처리에 문제가 발생할 수 있지만 
             여기서는 Thread-Safe한 SqlSessionTemplate 클래스를 사용합니다. -->
   <bean id="sqlSession"
      class="org.mybatis.spring.SqlSessionTemplate">
      <constructor-arg ref="sqlSessionFactory" />
   </bean>
</beans>

spring에는 sqlSession을 singlton으로 사용해도 괜찮아요 Spring이 Thread-safe한 환경을 조성해 주기 때문이에요

sql mapper 만들기
src/main/resources/mappers

BookMappers.xml

BookMappers.xml

<?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="myBook">

	<select id="countBooks" resultType="int">
		select count(*) from book
	</select>

	<!-- resultMap의 일반적인 사용법 -->
	<resultMap id="result"
		type="my.spring.springweb.sample12.vo.Book">
		<result property="bookIsbn" column="bisbn" jdbcType="VARCHAR"
			javaType="String" />
		<result property="bookTitle" column="btitle" jdbcType="VARCHAR"
			javaType="String" />
		<result property="bookAuthor" column="bauthor" />
		<result property="bookPrice" column="bprice" />
	</resultMap>

	<select id="selectAll" resultMap="result">
       <![CDATA[   
         SELECT bisbn, btitle, bauthor, bprice
         FROM book         
      ]]>
	</select>

	<select id="selectBookByKeyword" parameterType="String"
		resultMap="result">
       <![CDATA[   
         SELECT bisbn, btitle, bauthor, bprice
         FROM book         
         WHERE btitle LIKE CONCAT('%', #{Keyword}, '%')
      ]]>
	</select>

</mapper>

sample11, vo 만들기

sample11
sample11.vo

Book.java

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Book {
	private String bookisbn;
	private String bookTitle;
	private String bookAuthor;
	private int bookPrice;
}

datasource-context.xml

<list>
	<value>classpath:mappers/BookMapper.xml</value>
</list>

mapper 만들었으니 mapper 설정 추가 해주기

0개의 댓글