connectorJ
Maven Repository에서 다운
MySQL Connector Java » 8.0.32
https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.32
src/main/resources
<!--
property는 하나만 설정할꺼예요!
외부파일을 이용해서 데이터베이스 접속정보를 가져올꺼예요!
외부파일을 하나 만들꺼구요. => driver.properties 파일을 만들꺼예요!
-->
<properties resource="./driver.properties"/>
Spring에서 사용하기 위해 properties 삭제해줘요 (다른 설정 사용할 꺼에요)
settings는 그냥 사용할 꺼에요
<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정보 삭제
<?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>
연결 정보가 있어야 해요
연결 정보는 별도의 property파일로 작성할 겁니다
경로
/src/main/resources/config/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 -> SqlSessionFactory -> SqlSession
모두 Bean으로 등록하는 작업을 할 꺼에요
Bean으로 등록해야 하니 xml 파일을 만들꺼에요
Bean으로 읽는 친구는 원래 Root-context.xml 파일이 읽지만, 관리를 쉽게 하기 위해 spring에 만들어 줄게요
src/main/webapp/WEB-INF/spring
잘 만들어 진것을 볼 수 있어요
web.xml에서 root-context.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파일도 읽을수 있게 설정을 바꿔 줘요
<?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
<?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
sample11.vo
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;
}
<list>
<value>classpath:mappers/BookMapper.xml</value>
</list>
mapper 만들었으니 mapper 설정 추가 해주기