# Mybatis Mapper XML 파일
- SQL 문을 저장하는 존재를 매핑파일이라고 함
- JDBC 코드에 비하면 코드가 95% 감소
- Mybatis는 SQL 작성에 집중할 수 있도록 만들어짐
# XML Mapper 작성
DAO 클래스가 작성되면 이를 사용하는 SQL문 작성이 필요
- XML로 작성된 Mapper의 위치 결정
- XML Mapper 파일을 작성하고 필요한 DTD 추가(템플릿 팡리 사용)
- SQL 작성
# Select
- Mybatis에서 가장 많이 사용하는 엘레멘트
- 어플리케이션은 데이털르 수정하는 기능보다 데이터 조회를 주로 함
- Mybatis는 데이터 조회하는 기능에 집중함
<select id="selectPerson" parameterType="int" resultType="hashmap">
SELECT * FROM PERSON WHERE ID = #{id}
</select>
- 위 쿼리 이름은 selectPerson 파라미터는 int이고 결과 데이터는 HashMap에 저장됨
// JDBC 코드와 유사함, 마이바티스 코드는 아님
String selectPerson = "SELECT * FROM PERSON WHERE ID =?";
PreparedStatement ps = conn.prepareStatement(selectPerson);
ps.setInt(1,id);
- 여러가지 속성들
<select
id="selectPerson"
parameterType="int"
parameterMap="deprecated"
resultType="hahsmap"
flushCache="false"
useCache="true"
timeout="10000"
fetchSize="256"
statementType="PREPARED"
resultSetType="FORWARD_ONLY">
- Insert, update, delete 설정 (간단함)
<insert id="insertAuthor">
insert into Author (id, username, password, email, bio)
values (#{id}, #{username}, #{password}, #{email}, #{bio})
</insert>
<update id="updateAuthor"
update Author
set usernmae = #{username}
,password = #{password}
,email = #{email}
,bio= #{bio}
where id= #{id}
</update>
<delete id="deleteAuthor">
delete from Author
where id = #{id}
</delete>
- SQL 문 다른 구문에서 재사용 가능한 SQL 구문을 정의할 수 있음
<sql id="userColumns"> id,username,password </sql>
<select id=..>
select <include refid="userColumns">
...
</select>
# Parameters
- 쿼리의 파라미터
- 전달되는 객체에 따라 파라미터의 타입이 결정된다.
# ResultMap
- Mybatis에서 가장 중요하고 강력한 요소
- DB에서 데이터를 가져올 때 작성되는 JDBC 코드의 대부분을 줄여주는 역할
<select id="selectUsers" resultMap="UserMap">
select user_id, user_name, user_pw
from users
where id=#{id}
</select>
<resultMap id="userResultMap" type="User">
<id property ="id column="user_id"/>
<result property="username" column=""user_name"/>
<result property="hashedPassword" column=""user_password"/>
</resultMap>
# Mybatis 로깅:: log4jdbc-log4j2
- Mybatis의 로그를 보다 자세히 확인 가능하게 해줌(Log4jdbc-log4js 라이브러리 의존성 추가)
- 데이터 소스 변경(JDBC 드라이버 클래스 변경, url log4jdbc 단어 추가, log4jdbc.log4j2.properties 파일 추가)
# 실습
insert 추가
article-mapper.xml 수정 - hello-web/src/main/resources/mappers
<?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="mappers.article-mapper">
<insert id="insertArticle"
parameterType="kr.co.acomp.hello.vo.Article">
insert into (article_id, author, title, content)
values (#{articleId}, #{author}, #{title}, #{content})
</insert>
</mapper>
select 추가
article-mapper.xml 수정 - hello-web/src/main/resources/mappers
<?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="mappers.article-mapper">
...
<select id="selectArticle"
resultType="kr.co.acomp.hello.vo.Article"
parameterType="string">
select article_id as articleId,
author,
title,
content
from article
where article_id = #{articleId}
</select>
</mapper>
ArticleDAO 수정
package kr.co.acomp.hello.dao;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import kr.co.acomp.hello.vo.Article;
@Repository // Repository Annotation
public class ArticleDAO {
@Autowired
SqlSession sqlSession;
public void insertArticle(Article article) {
// id 이름을 입력하여 insert 실행
sqlSession.insert(
"mappers.article-mapper.insertArticle", article);
}
public Article selectArticleById(String articleId) {
return sqlSession.selectOne(
"mappers.article-mapper.selectArticleById", articleId);
}
}
'Archived(Programming) > Spring #2(기초)' 카테고리의 다른 글
AOP(Aspect Oriented Programming) (0) | 2020.03.17 |
---|---|
Dynamic SQL (0) | 2020.03.17 |
Spring Mybatis (0) | 2020.03.15 |
Context 분리와 전략 (0) | 2020.03.13 |
Spring Data Access 기술과 DataSource (0) | 2020.03.13 |