- JDBC를 통해 데이터베이스에 액세스하는 작업을 캡슐화하고 일반 SQL쿼리, 저장 프로시저 및 고급 매핑을 지원
- 모든 JDBC 코드 및 매개 변수의 중복작업을 제거
- MyBatis는 기존 JDBC방식과 달리 SQL문을 XML 파일에 작성함으로써 코드가 줄어들고 SQL문만 따로 관리하기 때문에 수정이 편해진다.
소스파일에 config.xml
파일을 생성하여 공식 문서의 configuration
코드를 붙여넣는다. driver, url, username, password
부분을 개인 설정에 따라 변경한다.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "https://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <mappers> // sql문을 관리하는 리소스 파일의 url을 추가하는 부분 <mapper resource="org/mybatis/example/BlogMapper.xml" /> </mappers> </configuration>
MyBatis 폴더 내의 jar
파일을 lib
에 추가하고 Build Path
한다.
config.xml
파일을 리소스로 해서 커넥션을 생성하는 세션팩토리를 리턴하는 자바 클래스를 준비한다.
- SqlMapConfig.java
public class SqlMapConfig { // static 변수 factory private static SqlSessionFactory factory; // 클래스 초기화 블럭(클래스가 처음 로딩될 때 한번만 수행) static { try { String resource = "./com/codingbox/mybatis/config.xml"; Reader reader = Resources.getResourceAsReader(resource); factory = new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { e.printStackTrace(); } } // 클래스 초기화 블럭에서 만들어진 factory를 public static SqlSessionFactory getFactory() { return factory; } }
xml
파일 내에 작성한다.
- 공식문서 작성 가이드 코드
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.mybatis.example.BlogMapper"> <select id="selectBlog" resultType="Blog"> select * from Blog where id = #{id} </select> </mapper>
- namespace, id : sql 호출 시 사용되는 값
- sql type 태그 :
select, insert, update, delete
가 있다.- resultType : 리턴할 result type. select문에만 적용된다.
- parameterType :
#{}
내에 전달할 파라미터 값의 타입.
작성해 둔 sql을 호출할 때는 factory를 통해 연결 세션을 먼저 생성한다.
- 클래스 내 기본 생성자로 세션 생성 예시
public class MemberDao { // 전역변수로 SqlSessionFactory, SqlSession 선언 SqlSessionFactory factory = SqlMapConfig.getFactory(); SqlSession sqlSession; // 기본 생성자로 factory에서 세션 열어주기 public MemberDao() { sqlSession = factory.openSession(true); // openSession(true) : auto commit } }
sql문의 기본 호출 방법 :
세션.실행할 sql타입에 해당하는 메서드("namespace값.id값",파라미터);
- 예시
sqlSession.selectOne("Member.checkId",userid);
sqlSession.insert("Member.join",member)
resultType
, parameterType
에는 myBatis에서 정해 놓은 별칭(Alias
)를 사용한다.
- 공식문서 발췌
직접 작성한 자바빈즈 클래스 등을 사용할 때는 프로젝트 내에서 해당 빈즈가 위치한, 패키지명까지 포함한 경로 전체를 전달한다. 파라미터 전달 시에는 클래스 내 필드명을 그대로 사용할 수 있다.
- 예시
<insert id="join" parameterType="com.codingbox.vo.MemberBean" > INSERT INTO TBL_MEMBER VALUES (#{userid}, #{userpw}, #{username}, #{userphone}) </insert>
hashmap
등의 객체를 사용할 때는 생성 시의 키값을 사용할 수 있다.
- 예시
<select id="login" parameterType="hashmap" resultType="com.codingbox.vo.MemberBean"> SELECT * FROM TBL_MEMBER tm WHERE USERID = #{userid} AND USERPW = #{userpw} </select>