[Spring] mybatis사용법

haram·2023년 6월 7일
0

스프링에서 DB를 연결하기 위해 다음과 같은 방법 사용

  1. SqlMapper/Mybatis
  • sql문과 자바코드를 설정 파일로 분리하여 코드의 수정이 일어나지 않게 함
  1. JPA/Hibernate
  • DB테이블을 객체로 구성하여 sql문 작성없이 DB쿼리 가능

이번 포스팅에서는 spring에서 mybatis를 사용하여 mysql과 연결하는 과정을 작성한다.

Spring에서 파일을 읽어오지 못하는 경우

  • Spring에서 Resources파일(ex: Java, xml, jsp등등)을 찾기 위해서는 해당 파일이 속하는 경로가 등록 되어 있어야 함
  • 등록 방법 : Build Path -> configure Build Path -> 추가를 원하는 파일 경로 add
  • 확인 : Java Resources에 추가한 파일 경로가 추가되어 있어야 함

1. pom.xml에 모듈 추가

  • mybatis-spring : SqlSessionFactory, SqlSession 빈을 사용하기 위한 모듈
  • mysql-connector-java : mysql Driver를 사용하기 위한 모듈

    해당 모듈 버전과 mysql버전을 일치 시켜야 함

  • spring-jdbc : DriverManagerDataSource를 사용하기 위한 모듈

 <!-- DB연결 -->
    <dependency> 
        <groupId>org.mybatis</groupId> 
        <artifactId>mybatis-spring</artifactId> 
        <version>1.2.4</version> 
    </dependency> 
    
    <dependency> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-jdbc</artifactId> 
        <version>5.3.22</version> 
    </dependency> 
    
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.30</version>
    </dependency>

2. root-context.xml설정

  • dataSource, SqlSessionFactory, SqlSession 빈 등록
  • component-scan을 통해 dao에 SqlSession주입

    driverClassName : "com.mysql.jdbc.Driver"는 이전 버전에서 사용하던 드라이버명 최신 버전은 "com.mysql.cj.jdbc.Driver"와 같이 사용함
    url : “& amp;useSSL=false”를 사용하여야 SSL인증 오류를 막을 수 있음

    <context:component-scan base-package="com.spring.test"/>
	
	<!-- mysql접속 정보객체 -->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
		<property name="url" value="jdbc:mysql://localhost:3306/test_db?serverTimezone=Asia/Seoul&amp;useSSL=false"></property> 
		<property name="username" value="root"/>
		<property name="password" value="1111"/>
	</bean>
	
	<!-- mysql세션생성 객체 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<property name="configLocation" value="WEB-INF/resources/mybatis-config.xml" /> <!-- mybatis 설정파일 등록 -->
	</bean>
	
	<!-- mysql세션 객체 -->
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg ref="sqlSessionFactory" />
	</bean>

3. mybatis-config.xml 설정

  • typeAlias태그를 통해 사용할 DTO에 alias이름을 붙임
  • mapper태그를 통해 sql문이 작성된 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>
	<typeAliases>
		<typeAlias type="com.spring.test.TestDTO" alias="user"/> <!-- DTO객체에 alias이름 설정 -->
	</typeAliases>
	
	<mappers>
		<mapper resource="WEB-INF/resources/mapper/testmapper.xml" /> <!-- User관련 쿼리 파일 등록-->
	</mappers>
</configuration>

4. mapper.xml설정 - sql문 작성 파일

  • Namespace를 이용하여 해당 mapper파일에 이름을 붙임
  • select태그안에 sql문을 작성하고 해당 sql문을 지칭 할 id와 결과를 받을 Type을 설정
<?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="UserMapper"> <!-- Repository와 연동을 위해 사용될 namespace -->
	
	<select id="SelectUser" resultType="user"> 
		SELECT *
		FROM user
	</select>
</mapper>

5. dao에서 SqlSession객체를 사용한 db접근

mapper.xml에 지정된 namespace와 sql문의 id를 통해 쿼리를 수행한다

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class TestDAO {
	
	@Autowired
	SqlSession session;
	
	public List<TestDTO> selectUser(){
		return session.selectList("UserMapper.SelectUser");
	}
}

0개의 댓글