728x90
반응형
[ MyBatis 마이바티스 ]
: SQL 기반의 Persistence(영속성) Framework
- JDBC Framework!
특징
- SQL문과 프로그램 코드의 분리
- 공통된 JDBC 코드를 MyBatis 가 처리
- 동적쿼리, 캐시모드 등 다양한 서비스 제공
제공 기능
- MyBatis 설정 파일 자동생성
- 설정 파일 구문 자동완성 기능 제공
- 사용하는 곳에서 SQL문 선언 부로 이동
[ MyBatis 구성요소 역할 – Mapping API ]
MyBatis API
- SqlSessionFactoryBuilder
- 역할 : SqlSessionFactory 생성 - SqlSessionFactory
- MyBatis의 전역 정보를 가지고 실행을 제어
- SqlSession 생성
- Application당 하나만 생성하는 것이 권장됨 - SqlSession
- 역할 : 쿼리 실행 처리
- 작업 단위 별로 SqlSessionFactory로 부터 생성
[ MyBatis Framework 의 실행 구조 ]
[ MyBatis 사용 환경 설정 ]
pom.xml에 MyBatis framework 추가
<dependencies>
<!-- MyBatis Framework -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.0</version>
</dependency>
</dependencies>
src에 MyBatis-Config 디렉토리 추가
/SqlSessionConfig.xml
1. MyBatis DataSource에 대한 설정 및 SQL 정의 xml 에 대한 매핑
2. Spring 연동 시, spring과 연동시에는 spring 설정에서 DataSource(dbcp) 를 정의한다.
<?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>
<!-- 사용할 클래스에 대한 별칭을 명시한다. -->
<typeAliases>
<typeAlias type="model.AccountVO" alias="avo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:XE"/>
<property name="username" value="scott"/>
<property name="password" value="tiger"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mybatis/config/account.xml"/>
</mappers>
</configuration>
[ 적용 ]
/account.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- Sql Mapper -->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="account">
<select id="findAccountById" resultType="avo">
SELECT *
FROM account
WHERE id=#{value}
</select>
<select id="getAccountList" resultType="avo">
SELECT *
FROM account
ORDER BY id DESC
</select>
</mapper>
/model
/AccountVO.java
package model;
public class AccountVO {
private String id;
private String name;
private int balance ;
public AccountVO() {
super();
}
public AccountVO(String id, String name, int balance) {
super();
this.id = id;
this.name = name;
this.balance = balance;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getBalance() {
return balance;
}
public void setBalance(int balance) {
this.balance = balance;
}
@Override
public String toString() {
return "AccountVO [id=" + id + ", name=" + name + ", balance=" + balance + "]";
}
}
/AccountDAO.java
package model;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import factory.SqlSessionFactoryManager;
// 현재 프로젝트에서는 스프링을 사용하지 않으므로,
// 싱글톤 패턴을 별도로 적용해줘야한다.
public class AccountDAO {
private static AccountDAO instance = new AccountDAO();
// MyBatis Framework를 사용하기 위한 factory 객체
private SqlSessionFactory factory;
private AccountDAO(){
//SqlSessionFactoryManager에서 Mybatis 설정파일 로딩 factory 가져옴
factory = SqlSessionFactoryManager.getInstance().getFactory();
}
public static AccountDAO getInstance() {
return instance;
}
/**
* findAccountById : id로 계좌정보 조회
* @param id
* @return AccountVO
*/
public AccountVO findAccountById(String id) {
AccountVO vo = null;
SqlSession session = null;
try {
session = factory.openSession();
vo = session.selectOne("account.findAccountById", id);
} finally {
session.close();
}
return vo;
}
/**
* getAccountList : 계좌정보 리스트로 반환받기
* @return List<AccountVO>
*/
public List<AccountVO> getAccountList() {
List<AccountVO> list = null;
SqlSession session = null;
try {
session = factory.openSession();
list = session.selectList("account.getAccountList");
} finally {
session.close();
}
return list;
}
}
/factory
/SqlSessionFactoryManager.java
package factory;
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;
/*
* Singleton Pattern 적용
*/
public class SqlSessionFactoryManager {
private static SqlSessionFactoryManager instance = new SqlSessionFactoryManager();
//MyBatis 객체
private SqlSessionFactory factory;
private SqlSessionFactoryManager() {
//MyBatis 설정 파일 로딩할 때 사용하는 API(SqlSessionConfig.xml)
try {
Reader r
= Resources.getResourceAsReader("mybatis/config/SqlSessionConfig.xml");
factory = new SqlSessionFactoryBuilder().build(r);
System.out.println("MyBatis config loading "+factory);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSessionFactoryManager getInstance() {
return instance;
}
public SqlSessionFactory getFactory() {
return factory;
}
}
/test
/TestMyBatis.java
package test;
import java.util.List;
import model.AccountDAO;
import model.AccountVO;
public class TestMyBatis {
public static void main(String[] args) {
AccountDAO dao = AccountDAO.getInstance();
//AccountVO로 반환
String id = "milk";
AccountVO vo = dao.findAccountById(id);
System.out.println(vo);
System.out.println("------------------------------------------");
//리스트로 반환
List<AccountVO> list = dao.getAccountList();
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
[ 결과 ]
728x90
반응형
'Java Web Programming > 6. Spring | MyBatis' 카테고리의 다른 글
[MyBatis/Spring] 스프링에 마이바티스 적용해보기 (0) | 2020.10.30 |
---|---|
[MyBatis] 마이바티스 적용 연습 2 ! (SELECT, INSERT, UPDATE + include & List, Map 타입 활용) (1) | 2020.10.30 |
[Spring] 스프링 AOP의 Around Advice를 통한 성능 확인 (+Log4j, StopWatch 라이브러리) (0) | 2020.10.29 |
[Spring] 스프링 스탑워치(StopWatch) 라이브러리 사용법 (0) | 2020.10.29 |
[Spring] 스프링 AOP의 Around Advice이용하기 + Log4j 활용 (2) | 2020.10.29 |