헬린코린이
[Spring Framework] myBatis 본문
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