마이바티스 MyBatis
마이바티스란 자바의 데이터 베이스 프로그래밍을 좀 더 간편하게 할 수 있도록 도와주는 개발 프레임워크*이다. JDBC를 통해 데이터 베이스에 액세스 하는 작업을 캡슐화하고 일반 SQL 쿼리, 저장 프로시저 및 고급 매핑을 지원하여 모든 JDBC 코드 및 매개변수의 중복 작업을 제거한다. 프로그램 코드와 SQL 쿼리가 완전히 분리되어 코드가 간결해지고 유지보수성이 향상된다는 장점이 있다.
* 개발 프레임 워크란 개발자가 원하는 기능 구현에만 집중하여 빠르게 개발할 수 있도록 기본적으로 필요한 기능을 갖추고 있는 것으로 라이브러리가 포함되어 있다. 개발자는 프레임 워크가 정의해 놓은 규칙을 준수하며 사용해야 한다.
마이바티스 사용하기
마이바티스를 사용하기 위해서는 JAR파일을 클래스 패스에 두어야 한다.
아래의 링크로 접속하면 JAR파일 다운로드할 수 있는 깃허브 링크가 있다.
https://mybatis.org/mybatis-3/ko/getting-started.html
PROPERTIES 파일 : db.properties
DB에 대한 연결 정보를 파일로 저장해놓고 사용하기 위해. properties 파일을 만든다.
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:xe
username=hr
password=hr
XML 설정파일 : mybatis-config.xml
- 매핑 설정 파일 경로
- DB 연결 (URL, USER, PASSWORD) : db.properties 파일 연결
- 사용할 모델 클래스들의 별칭
<?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>
<!--PROPERTIES-->
<properties resource="com/db/db.properties"></properties>
<!--클래스 별칭-->
<typeAliases>
<typeAlias type="com.model.dto.TESTDto" alias="TESTDto" />
</typeAliases>
<!--DB연결-->
<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>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
매핑 설정 파일 : mybatis-mapper.xml
- SQL 쿼리 정의
<?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="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
SqlSessionFactory 빌드
- SqlSessionFactory 인스턴스 사용
- XML설정파일 연결
public class SqlMapConfig {
private SqlSessionFactory sqlSessionFactory;
public SqlSessionFactory getSqlSessionFactory() {
String resource = "com/db/mybatis-config.xml";
Reader reader = null;
try {
reader = Resources.getResourceAsReader(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sqlSessionFactory;
}
}
DAO 작성
public class MDBoardDao extends SqlMapConfig{
public List<TESTDto> selectList(){
SqlSession session = null;
List<TESTDto> list = null;
try {
session = getSqlSessionFactory().openSession();
list = session.selectList("selectList");
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
return list;
}
public int insert(TESTDto dto) {
SqlSession session = null;
int res = 0;
try {
session = getSqlSessionFactory().openSession();
res = session.insert("com.db.mapper.insert", dto);
if(res > 0) {
session.commit();
}
}catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
return res;
}
public int update(TESTDto dto) {
SqlSession session = null;
int res = 0;
try {
session = getSqlSessionFactory().openSession();
res = session.update("com.db.mapper.update", dto);
if(res > 0) {
session.commit();
}
}catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
return res;
}
public int delete(int seq) {
SqlSession session = null;
int res = 0;
try {
session = getSqlSessionFactory().openSession();
res = session.delete("com.db.mapper.delete", seq);
if(res > 0) {
session.commit();
}
}catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
return res;
}
}
댓글