MyBatis란?
객체 지향 언어인 자바의 관계형 데이터베이스 프로그래밍을 좀 더 쉽게 할 수 있게 도와 주는 개발 프레임 워크로서 JDBC를 통해 데이터베이스에 엑세스하는 작업을 캡슐화하고 일반 SQL 쿼리, 저장 프로 시저 및 고급 매핑을 지원하며 모든 JDBC 코드 및 매개 변수의 중복작업을 제거한다. Mybatis에서는 프로그램에 있는 SQL쿼리들을 한 구성파일에 구성하여 프로그램 코드와 SQL을 분리할 수 있는 장점을 가지고 있다.
MyBatis 특징
복잡한 쿼리나 다이나믹한 쿼리에 강하다 -> 반대로 비슷한 쿼리는 남발하게 되는 단점이 있다.
프로그램 코드와 SQL 쿼리의 분리로 코드의 간결성 및 유지보수성 향상
resultType, resultClass등 Vo를 사용하지 않고 조회결과를 사용자 정의 DTO, MAP 등으로 맵핑하여 사용 할 수 있다.
빠른 개발이 가능하여 생산성이 향상된다.
MyBatis 설치 및 설정
Market place에서 'mybatis' 검색
MyBatis Generator와 MyBatipse 를 둘 다 install 한다.
추가 설치나 허용 관련 창이 나오면 전부 허용하고 설치
pom.xml에 추가
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.ibatis</groupId>
<artifactId>ibatis-core</artifactId>
<version>3.0</version>
</dependency>
src/main/resource 하위에 mappings 폴더 생성
해당 폴더안에 XML 파일을 만들어 SQL문을 작성하여 관리(MyBatis XML Mapper 파일)
<?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="BoardDAO">
<resultMap type="board" id="boardResult">
<id property="bid" column="BID"/>
<result property="title" column="TITLE" />
<result property="writer" column="WRITER" />
<result property="content" column="CONTENT" />
</resultMap>
<insert id="insertBoard">
INSERT INTO BOARD(BID,TITLE,WRITER,CONTENT) VALUES((SELECT NVL(MAX(BID),0)+1 FROM BOARD),#{title},#{writer},#{content})
</insert>
<update id="updateBoard">
UPDATE BOARD SET TITLE=#{title}, WRITER=#{writer} WHERE BID=#{bid}
</update>
<delete id="deleteBoard">
<![CDATA[]
DELETE BOARD WHERE BID=#{bid}
]]>
</delete>
<select id="selectOneBoard" resultType="board">
SELECT * FROM BOARD WHERE BID=#{bid}
</select>
<select id="selectAllBoard" resultMap="boardResult">
SELECT * FROM BOARD
WHERE TITLE LIKE '%'||#{searchContent}||'%'
ORDER BY BID DESC
</select>
</mapper>
JDBC를 이용하여 자바코드로 작성할때에는 칼럼명=? 의 형식으로 SQL문을 작성하였으나,
MyBatis는 칼럼명=#{vo의 멤버변수} 의 형태로 작성한다.
selectOne 또는 All과 같이 결과값이 있는 SQL문은 resultType 또는 resultMap 속성을 추가하여 값을 반환한다.
resultMap은 JOIN을 이용하여 칼럼을 다른 값으로 받아야하는 경우 같이 특정 칼럼에 특정 멤버변수의 값을 넣기 위해서
따로 맵핑할때 사용한다.
Spring에 연동하지 않고 사용하기
테스트를 위하여 Spring에 연동없이 사용하기 위해서 추가적인 XML파일이 필요하다.
mapping 파일은 MyBatis XML Mapper 파일을 이용하였으나
해당 설정 파일은 MyBatis Generator Configuration File을 사용한다.
<?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>
<!-- DB연동정보 파일과 연결 -->
<properties resource="db.properties" />
<!-- 별칭(Alias) 설정 -->
<typeAliases>
<typeAlias type="com.kim.biz.board.BoardVO" alias="board"/>
</typeAliases>
<!-- DataSource 설정 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!-- SQL MAPPER 파일 연결 -->
<mappers>
<mapper resource="mappings/board-mapping.xml" />
</mappers>
</configuration>
위의 코드와 같이 설정 파일을 작성한다.
<configuration> 태그 특성상 내부의 태그들의 순서가 바뀌면 안된다.
DataSource 설정을 위한 DB의 정보를 src/main/resource 하위에 기본 File로 관리한다.
이렇게 MyBatis 사용을 위한 설정이 끝났다.
위의 Mybatis 설정 XML 파일은 Spring 연동 없이 단순 테스트를 위한 파일이며 Spring 연동 후에는 쓰이지 않을 예정이다.
단순하게 동작하는것을 확인하기위해 클래스를 만들어 main문에서 vo를 set하여 사용하면 된다.
MyBatis 동작 확인을 위하여 직접 vo에 set하여 값을 넣어준 모습이다.
selectAll의 WHERE절이 LIKE로 이루어져 있으며 그 값은 searchContent의 값으로 결정 되기에 set 해주었다.
3번의 실행 결과, 해당 값이 3번 insert되어 forEach문을 통해 총 3개의 데이터가 출력되는것을 확인하며 MyBatis가
잘 동작하는것을 확인할 수 있다.
'Mybatis' 카테고리의 다른 글
[Mybatis]Mybatis JOIN문 처리 (0) | 2022.10.07 |
---|
댓글