헬린코린이

[Spring Framework] myBatis 본문

Programming/Spring Framework

[Spring Framework] myBatis

HCD 2023. 3. 24. 23:16

myBatis란 웹 애플리케이션을 개발할 때 가장 많이 사용되는

SQL 매퍼 프레임워크이다.

myBatis를 사용하지 않고 직접 JDBC를 이용할 경우

개발자가 반복적으로 작성해야 할 코드가 많고, 서비스 로직 코드와 쿼리를 분리하기 어렵습니다.

또한 커넥션 풀의 설정 등 개발자가 신경 써야 할 부분이 많아 여러 가지 어려움이 있습니다.

따라서 JDBC를 이용해서 직접 개발하기 보다는 마이바티스와 같은 프레임워크를 사용하는 게 일반적입니다.

 

특징으로는

복잡한 쿼리나 다이나믹한 쿼리에 강합니다.

반대로 비슷한 쿼리는 남발하게 되는 단점이 있습니다.

프로그램 코드와 SQL 쿼리의 분리로 코드의 간결성 및 유지보수성이 향상됩니다.

 

마이바티스를 사용하기 위해서는

우선. jar을 넣어줘야 해서

pom.xml에 dependency를 추가해 줍니다.

<!-- Mybatis -->
      <dependency>
            <groupId>org.mybatis</groupId>
             <artifactId>mybatis</artifactId>
             <version>3.3.1</version>
      </dependency>   
      <dependency>
            <groupId>org.mybatis</groupId>
             <artifactId>mybatis-spring</artifactId>
             <version>1.2.4</version>
      </dependency>

추가를 해줬다면

이제 파일을 만들어볼 텐데요

두 가지 파일이 있을 건데

MyBatis XML Mapper파일은 SQL문을 작성하는 곳이고

MyBatis Generator Configuration File은 설정을 작성하는 곳입니다.

 

board-mapping.xml 보여드리겠습니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatBis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="BoardDAO">

   <insert id="insertBoard">
      INSERT INTO BOARD2(BTITLE, BCONTENT, BCATE, BID) VALUES (#{bTitle},#{bContent},#{bCate},#{bId})
   </insert>

   <update id="updateBoard">
      UPDATE BOARD2 SET BTITLE=#{bTitle},BCONTENT=#{bContent},BCATE=#{bCate} WHERE BNUM=#{bNum}
   </update>
   
   <update id="updateBoard_hits">
      UPDATE BOARD2 SET BHITS=BHITS+1 WHERE BNUM=#{bNum}
   </update>
   
   <update id="updateBoard_blind">
      UPDATE BOARD2 SET BLIND=TRUE WHERE BNUM=#{bNum}
   </update>
   
   <update id="updateBoard_blind_member">
      UPDATE BOARD2 SET BLIND=TRUE WHERE BID=#{bId};
   </update>
   
   <!--다이내믹 SQL(동적 SQL) -->
	1. Mybatis에서 제공하는 기능
	2. SQL의 “재사용성”을 향상
	3. SQL의 “유연성”을 향상
   
   <delete id="deleteBoard">
      DELETE 
      FROM BOARD2 
      WHERE 1=1
      <if test="bId==null">
       AND BNUM=#{bNum}
      </if>
      <if test="bId!=null">
         AND BID=#{bId}
      </if>
   </delete>
   
</mapper>

sql-map-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>
	<!--1.  별칭(Alias) 설정 -->
	<typeAliases>
	<typeAlias type="com.spring.biz.board.BoardVO"  alias="board"/>
	</typeAliases>
<!-- 2.  SQL Mapper 설정 -->
<mappers>
	<mapper resource="mappings/board-mapping.xml"/>
</mappers>


</configuration>

이렇게 작성하고 다오클래스에 mybatis를 의존성 주입 해줍니다.

package com.cos.jwtex01.board;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository("boardDAO")
public class BoardDAO {

	@Autowired
	private SqlSessionTemplate mybatis;

	public boolean insertBoard(BoardVO vo) {
		mybatis.insert("BoardDAO.insertBoard", vo);
		return true;
	}

	public boolean updateBoard(BoardVO vo) {
		int res = 0;
		if (vo.getbTitle() == null) {
			res=mybatis.update("BoardDAO.updateBoard_hits", vo);
		} else {
			res=mybatis.update("BoardDAO.updateBoard", vo);
		}
		if (res < 1) {
			return false;
		}
		return true;
	}

	public boolean updateBoardBlind(BoardVO vo) {
		int res = 0;
		if(vo.getbId() == null) {
			res=mybatis.update("BoardDAO.updateBoard_blind", vo);
		} else {
			res=mybatis.update("BoardDAO.updateBoard_blind_member", vo);
		}
		if(res < 1) {
			return false;
		}
		return true;
	}

	public boolean deleteBoard(BoardVO vo) {
		int res=mybatis.delete("BoardDAO.deleteBoard", vo);
		if(res<1) {
			return false;
		}
		return true;
	}

}

applicationContext.xml 파일에 설정을 해줘야 합니다.

	<!-- Mybatis -->
   <!-- Factory 패턴 + dataSource 연결 -->
   <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
      <property name="configLocation" value="classpath:sql-map-config.xml" />
      <property name="dataSource" ref="dataSource" />
   </bean>
   <bean class="org.mybatis.spring.SqlSessionTemplate">
      <constructor-arg ref="sqlSession" />
   </bean>

 

Comments