MyBatis는 Java 개체와 SQL 문 간의 자동 매핑을 지원하는 오픈 소스 프레임워크입니다. 즉, 개발자는 코드에서 개체 지향 방식으로 데이터를 처리하면서 데이터베이스와 상호 작용하기 위해 자신의 SQL 문을 작성할 수 있습니다.
의 유형
– JDBC: JDBC 트랜잭션 관리자를 사용합니다.
– MANAGED: 외부 컨테이너가 트랜잭션 관리자를 관리합니다.
– JTA: JTA(Java Transaction API)를 사용합니다.
1. 데이터베이스: MyBatis를 사용하여 데이터를 쿼리하거나 조작하려면 데이터베이스가 필요합니다.
2. 마이바티스 라이브러리: 마이바티스를 사용하기 위해 필요한 라이브러리 파일. 이 라이브러리는 다운로드하여 Maven과 같은 빌드 도구와 함께 사용할 수 있습니다. 링크
3. 마이바티스 환경 설정 파일 : 마이바티스의 동작 방식을 설정하는 XML 파일이다. 이 파일에서 데이터베이스 연결 정보, SQL 문의 위치 등을 설정할 수 있습니다.
4. SQL 문: MyBatis를 사용하여 데이터베이스에 액세스하려면 SQL 문을 작성해야 합니다.
1. MyBatis 구성 파일 생성: MyBatis를 사용하려면 먼저 MyBatis 구성 파일을 생성합니다. 이 파일에는 데이터베이스 연결 정보, SQL 문 위치 등이 설정됩니다.
2. SQL 문 작성: 데이터베이스와 상호 작용하기 위해 SQL 문을 작성합니다. 이때 특수 MyBatis 태그를 사용하여 Java 개체와 SQL 문을 매핑합니다.
3. DAO 클래스 만들기: DAO(Data Access Object) 클래스를 만듭니다. 이 클래스는 MyBatis를 사용하여 데이터베이스와 상호 작용하는 메서드를 구현합니다.
4. MyBatis 구성 파일을 로드하고 사용할 DAO 클래스를 인스턴스화합니다. MyBatis 구성 파일을 로드하고 DAO 클래스를 인스턴스화하여 데이터베이스와 상호 작용하는 메서드를 호출합니다.
이러한 방식으로 MyBatis를 사용하여 Java 언어로 데이터베이스와 상호 작용하는 코드를 작성할 수 있습니다.
- 1. 속성 파일 생성
속성 파일은 키-값 쌍으로 구성된 간단한 구성 파일입니다.
MyBatis에서는 속성 파일을 이용하여 다양한 설정값을 관리할 수 있습니다. 환경 설정 정보나 데이터베이스 연결 정보와 같은 민감한 정보를 포함하는 경우가 많습니다.
속성 파일은 일반적으로 *.properties 형식으로 작성되며 값은 각 행에 대해 key=value 형식으로 지정됩니다. 이러한 속성 파일은 java.util.Properties 클래스를 사용하여 Java로 로드할 수 있습니다.
MyBatis에서는 속성 파일을 사용하여 다음 설정 값을 관리할 수 있습니다.
– 데이터베이스 연결 정보
– 캐시 설정
– SQL 매퍼 파일 위치
– 마이바티스 설정
데이터베이스 연결 정보, 캐시 설정, SQL 매퍼 파일 위치, MyBatis 설정 등을 key=value 형식으로 설정하고 있습니다. 이러한 구성 값은 MyBatis 구성 파일에서 ${key} 형식으로 참조할 수 있습니다.

- 2. 구성 파일
MyBatis를 사용하기 위해서는 환경 설정 파일이 필요합니다. 이 파일은 데이터베이스 연결 정보, SQL 매퍼 파일 위치 등을 설정합니다.
MyBatis 구성 파일은 XML 형식으로 작성되며 일반적으로 mybatis-config.xml로 이름이 지정됩니다. 이 파일은 MyBatis가 실행될 때 가장 먼저 로드되며 필요한 설정을 로드하는 역할을 합니다.
다음과 같은 설정이 가능합니다
– 데이터베이스 연결 정보 설정
– SQL 매퍼 파일 위치 설정
– 객체 생성 공장 설정
– 캐시 설정
– 기타 환경 설정
구성 파일은 일반적으로 MyBatis 프로젝트의 루트 디렉토리에 있습니다.
<?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>
<!-- db 접속 정보(db.properties) ${key}-->
<properties resource="com/my/db/db.properties" />
<!-- typeAlias(별칭) 클래스의 별칭 -->
<typeAliases>
<typeAlias type="com.my.dto.MyBoardDto" alias="MyBoardDto"/>
</typeAliases>
<!-- db 접속 설정 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED"> <!-- unpooled 따로 저장안함 -->
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- Mapper -->
<mappers>
<mapper resource="com/my/db/Mapper.xml" />
</mappers>
</configuration>
위의 예는 데이터베이스 연결 정보를 설정하고 SQL 매퍼 파일의 위치를 지정합니다.
그만큼
그만큼
그만큼
–
–
–
–
–
–
–
–
–
– 하나만
environment 요소는 개발 환경을 설정하고 dataSource 요소는 데이터베이스 연결 정보를 설정한다. 매퍼 요소는 SQL 매퍼 파일의 위치를 지정합니다.
- 3. 매퍼 파일
<?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="com.my.myboard">
<resultMap type="com.my.dto.MyBoardDto" id="MyBoardMap">
<result property="myno" column="MYNO" />
<result property="myname" column="MYNAME" />
<result property="mytitle" column="MYTITLE" />
<result property="mycontent" column="MYCONTENT" />
<result property="mydate" column="MYDATE" />
</resultMap>
<select id="selectAll" resultType="MyBoardDto">
SELECT MYNO, MYNAME, MYTITLE, MYCONTENT, MYDATE
FROM MYBOARD
ORDER BY MYNO DESC
</select>
<select id="selectOne" resultMap="MyBoardMap" parameterType="int">
SELECT *
FROM MYBOARD
WHERE MYNO=#{myno}
</select>
<insert id="myinsert" parameterType="MyBoardDto">
INSERT INTO MYBOARD VALUES(NULL,#{myname},#{mytitle},#{mycontent},NOW())
</insert>
<delete id="muldel" parameterType ="map">
DELETE FROM MYBOARD
WHERE MYNO IN
<foreach collection="seq" item="seq" open="(" separator="," close=")">
#{seq}
</foreach>
</delete>
</mapper>
- MyBatis SqlSessionFactory 객체 생성
package com.my.dao;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class SqlMapConfig {
private SqlSessionFactory sqlSessionFactory;
// sqlSeessionFactory 객체 생성 후 리턴
public SqlSessionFactory getSqlSessionFactory() {
//Config.xml의 경로
String resource = "com/my/db/Config.xml";
try {
//Config.xml의 파일 정보를 읽어온다.
Reader reader = Resources.getResourceAsReader(resource);
//읽어온 정보를 가지고
//sqlSessionFactory 객체 생성
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
return sqlSessionFactory;
}
}
SqlSessionFactory는 데이터베이스와의 세션을 생성하고 관리하기 위한 인터페이스입니다.
SqlMapConfig 클래스는 MyBatis 구성 파일 Config.xml을 읽어 SqlSessionFactory 객체를 생성한 다음 SqlSessionFactoryBuilder 클래스를 사용하여 SqlSessionFactory 객체를 생성합니다.
getSqlSessionFactory() 메서드는 생성된 SqlSessionFactory 개체를 반환합니다. 이렇게 생성된 SqlSessionFactory 객체는 MyBatis를 사용하여 데이터베이스와 세션을 관리할 때 사용된다. 예를 들어 SqlSession 개체를 만들려면 SqlSessionFactory 개체를 사용합니다.
SqlSessionFactory는 데이터베이스와의 세션을 생성하고 관리하기 위한 인터페이스입니다. SqlSessionFactory를 생성하면 SqlSession 인터페이스를 사용하여 데이터베이스와 상호 작용할 수 있습니다.
SqlSession은 MyBatis가 SQL 매퍼 파일을 실행하는 데 사용하는 인터페이스입니다. SqlSession 인터페이스는 데이터베이스와의 트랜잭션을 관리하고 SQL 실행 결과를 반환합니다.
SqlSessionFactory 개체를 만든 후 SqlSession 개체를 만들어 데이터베이스와 상호 작용할 수 있습니다. SqlSession 개체를 만들려면 SqlSessionFactory 개체에서 openSession() 메서드를 호출합니다. 이렇게 생성된 SqlSession 객체를 이용하여 SQL 매퍼 파일을 실행하고 데이터베이스와의 세션을 관리한다.
따라서 SqlSessionFactory는 MyBatis에서 데이터베이스와 상호 작용하기 위한 필수 개체입니다.
public class MyBoardDao extends SqlMapConfig{
private String namespace="com.my.myboard.";
//전체 출력
public List<MyBoardDto> selectAll(){
List<MyBoardDto> res = new ArrayList<MyBoardDto>();
SqlSession session = getSqlSessionFactory().openSession(true);
//openSession(true): autoCommit
res = session.selectList("com.my.myboard.selectAll");
//"com.my.myboard"라는 namespace로 설정된 mapper 파일에서
//"selectAll"라는 id를 가진 sql 실행
session.close();
return res;
}
}
+ SqlSession 인터페이스를 구현하는 객체의 메소드 제공
– selectOne(String 문, Object 매개변수) : 단일 결과를 반환하는 쿼리를 실행합니다.
– selectList(String 문, Object 매개변수) : 여러 결과를 반환하는 쿼리를 실행합니다.
– insert(String 문, Object 파라미터) : 데이터를 삽입하기 위한 쿼리를 실행합니다.
– update(String 문, Object 파라미터) : 데이터를 업데이트하기 위한 쿼리를 실행합니다.
– delete(String 문, Object 파라미터) : 데이터를 삭제하기 위한 쿼리를 실행한다.
– commit() : 현재 세션의 변경 사항을 커밋합니다.
– rollback() : 현재 세션의 변경 사항을 롤백합니다.
– close() : 현재 세션을 닫습니다.
위의 메소드는 String 타입의 statement와 Object 타입의 파라미터를 받습니다. statement는 실행할 SQL 쿼리를 정의한 매퍼 파일의 SQL ID를 나타내며, parameter는 SQL 쿼리를 실행하는 데 필요한 매개 변수입니다.
또한 SqlSession 개체는 많은 유용한 메서드를 제공하며 Mapper 인터페이스와 연결하여 사용할 수 있습니다.