Framework & My batis
Framework
개발자가 소프트웨어를 개발함에 있어 코드를 구현하는 개발 시간을 줄이고, 코드의 재사용성을 증가 시키기 위해 일련의 클래스 묶음이나 뼈대, 틀을 제공하는 라이브러리를 구현해 놓은 것을 말한다.
- 개발자가 따라야 하는 가이드를 제공한다.
- 개발할 수 있는 범위가 정해져 있다.
- 개발자를 위한 다양한 도구, 플러그인을 지원한다.
장점
-개발 시간을 줄일 수 있다.
-정형화되어 있어 일정 수준 이상의 품질을 기대할 수 있다.
-유지 보수가 쉽다.
단점
-너무 의존하면 개발자들의 능력이 떨어져서 스스로 직접 개발하는 것이 어려워진다.
-습득에 걸리는 시간이 오래 걸린다.
종류
- 영속성 Framework
데이터가 계속해서 저장되기에 영속성
데이터의 저장, 조회, 변경, 삭제를 다루는 클래스 및 설정 파일들을 라이브러리화하여 구현한 프레 임워크
ex) Mybatis, Hibernate → JPA
- 자바 Framework
Java EE 를 통한 웹 어플리케이션 개발에 초점을 맞추어 필요한 요소들을 모듈화하여 제공하는 프 레임워크
ex) Spring Framework, 전자정부표준-Spring, Struts
- 화면 구현 Framework
Front-End를 보다 쉽게 구현할 수 있게 틀을 제공 하는 프레임워크
ex) BootStrap, Foundation, MDL
- 기능 및 지원 Framework
특정 기능이나 업무 수행에 도움을 줄 수 있는 기 능을 제공하는 프레임워크
ex) Log4j, JUnit 5, ANT
Mybatis
데이터의 입력, 조회, 수정, 삭제(CRUD)를 보다 편하게 하기 위해 xml 로 구조화한 Mapper 설정 파일을 통해서 JDBC를 구현한 영속성 프레임워크
-> 설정 방법을 학습한다.
JAVA코드 버전
1.접속 정보(driver, url, user, password)를 변수로 선언한다.
2.DB 접속 환경 설정 -> mybatis jar 파일, ojdbc jar 파일을 라이브러리 classpath 설정
Environment environment =
new Environment("dev" //환경 정보 이름
, new JdbcTransactionFactory() //트랜잭션 매니저의 종류 결정
, new PooledDataSource(DRIVER, URL, USER, PASSWORD));
트랜잭션 매니저 종류
1)JdbcTransactionFactory : 수동 커밋
2)ManagedTransactionFactory : 자동 커밋
데이터 소스 전달
1)PooledDataSource : Connection Pool 사용 -> 연결 객체를 만들어 놓으므로 속도가 빨라진다.
2)UnPooledDataSource : Connection Pool 미사용
3.생성한 환경 설정 정보를 가지고 마이바티스 설정 객체 생성
Configuration configuration = new Configuration(environment);
* Mapper 인터페이스 작성 - my batis에서 수행하고자 하는 구문들
예시 - 현재 시간 출력
import org.apache.ibatis.annotations.Select;
public interface Mapper {
@Select("SELECT SYSDATE FROM DUAL")
java.util.Date selectSysdate();
}
4. 설정 객체에 매퍼 등록
configuration.addMapper(Mapper.class);
5. SqlSessionFactory 생성
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
1)SqlSessionFactory : SqlSession 객체를 생성하기 위한 팩토리 역할을 수행하는 인터페이스
2)SqlSessionFactoryBuilder : SqlSessionFactory 인터페이스 타입의 하위 구현 객체를 생성하기 위한 빌드 역할을 수행하는 클래스
3)build() : 설정에 대한 정보를 담고 있는 Configuration 타입의 객체 혹은 외부 설정 파일(xml)과 연결된 스트림을 매개변수로 전달하면 SqlSessionFactory 인터페이스 타입의 객체를 반환하는 메소드
6. sqlSession 생성 -> mapper에 있는 여러 구문들을 실행할 수 있다.
SqlSession sqlSession = sqlSessionFactory.openSession(false);
openSession() : SqlSession 인터페이스 타입의 객체를 반환하는 메소드, boolean 타입을 인자로 전달
false : Connection 인터페이스 타입 객체로 DML 수행 수 auto commit에 대한 옵션을 false로 지정(권장사항)
true: Connection 인터페이스 타입 객체로 DML 수행 수 auto commit에 대한 옵션을 true로 지정
getMapper() : Configuration에 등록 된 매퍼를 동일 타입에 대해 반환하는 메소드
Mapper mapper = sqlSession.getMapper(Mapper.class);
/* Mapper 인터페이스에 작성 된 메소드를 호출하여 쿼리 실행 */
java.util.Date date = mapper.selectSysdate();
System.out.println(date);
/* close() : SqlSession 객체 반납 */
sqlSession.close();
}
xml 파일 버전
https://mybatis.org/mybatis-3/ko/getting-started.html
MyBatis – 마이바티스 3 | 시작하기
mybatis.org
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?> // xml 파일 공통 부분
<!DOCTYPE configuration // 이 문서의 정의 및 설정
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration> // 설정
<environments default="dev"> // 기본 환경
<environment id="dev"> // 여러 환경이 있을 수 있다.
<!-- JDBC와 MANAGED 둘 중 하나 선택 가능
JDBC : 수동커밋, MANAGED : 자동커밋 -->
<transactionManager type="JDBC"/> // 수동커밋
<!-- POOLED와 UNPOOLED 선택 가능
POOLED : 커넥션 풀 사용, UNPOOLED : 커넷션풀 미사용 -->
<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>
- mapper.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="selectSysdate" resultType="java.util.Date">
SELECT
SYSDATE
FROM DUAL
</select>
</mapper>
public class Application {
public static void main(String[] args) {
String resource = "com/ ~~ mybatis-config.xml";
try {
InputStream inputStream = Resources.getResourceAsStream(resource); // resource를 stream 타입으로 읽어오겠다
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession(false);
//sqlSession은 여러 기능을 가지고 있다. sysdate하나만 조회할 것이기에 .selectOne
java.util.Date date = sqlSession.selectOne("mapper.selectSysdate"); // xml 파일의 namespace.select id
System.out.println(date);
sqlSession.close();
} catch (IOException e) {
e.printStackTrace();
}
}