마이바티스 편집하기
최신판 | 당신의 편집 | ||
1번째 줄: | 1번째 줄: | ||
− | + | '''마이바티스'''(MyBatis)는 2010년 [[아이바티스]](iBatis)를 [[포크]]하여 새로 [[업그레이드]]한 [[오픈소스]] 기반의 개발 [[표준 프레임워크]]이다. [[아파치 라이선스]](Apache License)를 따른다. 자바는 JDBC API를 제공해주지만, 이런 JDBC를 이용하면 1개 클래스에 반복된 코드가 존재하여 한 파일에 자바언어와 SQL언어가 있어서 재사용성 등이 안좋아지는 단점이 있다. 마이바티스는 JDBC의 이러한 단점들을 개선했으며, 개발자가 작성한 SQL 명령어와 자바 객체를 매핑해주는 기능을 제공하며, 기존에 사용하던 SQL 명령어를 재사용한다.<ref name="소년>빨간색소년, 〈[https://sjh836.tistory.com/127 mybatis Framework (마이바티스 개념, ibatis와 차이, 구조, api, SqlSession)]〉, 《티스토리》, 2018-01-03</ref> | |
− | |||
− | |||
− | '''마이바티스'''(MyBatis)는 2010년 [[아이바티스]](iBatis)를 [[포크]]하여 새로 [[업그레이드]]한 [[오픈소스]] 기반의 개발 [[표준 프레임워크]]이다. [[아파치 라이선스]](Apache License)를 따른다. 자바는 JDBC API를 제공해주지만, 이런 JDBC를 이용하면 1개 클래스에 반복된 코드가 존재하여 한 파일에 자바언어와 | ||
== 개요 == | == 개요 == | ||
− | + | 마이바티스는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다. 마이바티스는 [[JDBC]]로 처리하는 상당부분의 코드와 파라미터 설정및 결과 매핑을 대신해준다. 마이바티스는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 [[자바]] [[POJO]] 를 설정해서 매핑하기 위해 [[XML]]과 애노테이션을 사용할 수 있다. 최신버전은 2019년 7월 15일 출시된 MyBatis 3.5.2 이다.<ref name="마이바티스">마이바티스 공식 홈페이지 - https://blog.mybatis.org/</ref> | |
== 역사 == | == 역사 == | ||
− | |||
− | |||
* 2002년 07월 01일 : iBatis 1.0 공개 | * 2002년 07월 01일 : iBatis 1.0 공개 | ||
* 2004년 06월 17일 : iBatis 2.0 출시 | * 2004년 06월 17일 : iBatis 2.0 출시 | ||
42번째 줄: | 37번째 줄: | ||
* 2015년 07월 28일 : MyBatis-Guice 3.7 출시 | * 2015년 07월 28일 : MyBatis-Guice 3.7 출시 | ||
* 2015년 11월 26일 : Mybatis-Spring-Boot 출시 | * 2015년 11월 26일 : Mybatis-Spring-Boot 출시 | ||
− | |||
− | |||
* 2016년 02월 11일 : MyBatis-Ignite 출시 | * 2016년 02월 11일 : MyBatis-Ignite 출시 | ||
* 2016년 02월 13일 : MyBatis 3.3.1, MyBatis-Spring 1.2.4 출시 | * 2016년 02월 13일 : MyBatis 3.3.1, MyBatis-Spring 1.2.4 출시 | ||
85번째 줄: | 78번째 줄: | ||
* 2019년 01월 20일 : MyBatis 3.5.0 출시 | * 2019년 01월 20일 : MyBatis 3.5.0 출시 | ||
* 2019년 04월 08일 : MyBatis 3.5.1 출시 | * 2019년 04월 08일 : MyBatis 3.5.1 출시 | ||
− | * 2019년 07월 15일 : MyBatis 3.5.2 출시 | + | * 2019년 07월 15일 : MyBatis 3.5.2 출시<ref name="마이바티스"></ref> |
− | |||
== 특징 == | == 특징 == | ||
117번째 줄: | 109번째 줄: | ||
|}<ref name="소년"></ref> | |}<ref name="소년"></ref> | ||
− | === | + | === SQL문이 코드로부터 완전히 분리 === |
− | 기존에는 | + | 기존에는 DAO파일에 모든 SQL문을 작성하였다. 하ㅣ만 MyBatis에서는 Mapper 파일에 SQL코드를 입력해놓고 DAO파일에서 필요할 때마다 가져와서 사용할 수 있다. |
=== 생산성 === | === 생산성 === | ||
− | JDBC와 SQL을 유지하면서도 | + | JDBC와 SQL을 유지하면서도 훨 씬 더 적은 코드로도 JDBC처럼 작동한다. 자바코드의 20%를 사용하여 JDBC기능의 80%를 제공하는 간단한 프레임워크이며, 작성할 필요가 없는 JDBC 코드로 인한 분량 문제는 현저하게 줄어든다. (JDBC에 비해 62%정도이다.) |
=== 성능 === | === 성능 === | ||
− | + | 성능최적화 기법을 지원한다. 페이징 처리된 데이터 리스트를 읽어와서 사용할 때 불필요한 수천개의 행을 한꺼번에 데이터베이스로부터 가져오는것이 아니기 때문에 애플리케이션의 성능을 향상시킬수있다.<ref>기계새, 〈[https://metalbird.tistory.com/entry/iBatis%EB%9E%80 iBatis란?]〉, 《티스토리》, 2012-03-28</ref> | |
===SQL 문장과 프로그래밍 코드의 분리=== | ===SQL 문장과 프로그래밍 코드의 분리=== | ||
작업의 분배 : 팀을 세분화하는 것을 돕는다. | 작업의 분배 : 팀을 세분화하는 것을 돕는다. | ||
− | + | SQL문과 Java코드와의 분리만으로도 Java개발자는 Query문을 신경쓰지 않아도 된다. | |
− | + | SQL문이 변경되더라도 파라미터 값만 변경되지 않는다면 Java소스에서 수정할 부분이 없기 때문이다. | |
===이식성=== | ===이식성=== | ||
− | 자바, C#(iBatis.NET), Ruby(RBATIS) 등 어떠한 프로그래밍 언어로도 | + | 자바, C#(iBatis.NET), Ruby(RBATIS) 등 어떠한 프로그래밍 언어로도 구현가능하다. |
데이터베이스 접근 클래스와 비지니스 로직을 담은 클래스의 분리, 이른바 [[DAO]](Data Access Object) 패턴이 이러한 일을 담당한다. iBatis는 DAO 계층 구현을 위한 유틸리티 성격이면서 동시에 best practice 역할도 수행한다. | 데이터베이스 접근 클래스와 비지니스 로직을 담은 클래스의 분리, 이른바 [[DAO]](Data Access Object) 패턴이 이러한 일을 담당한다. iBatis는 DAO 계층 구현을 위한 유틸리티 성격이면서 동시에 best practice 역할도 수행한다. | ||
자주 쓰이는 데이터를 변경되지 않는 동안에 임시 보관한다. iBatis에서는 XML 설정만으로 캐시를 할 수 있다. | 자주 쓰이는 데이터를 변경되지 않는 동안에 임시 보관한다. iBatis에서는 XML 설정만으로 캐시를 할 수 있다. | ||
− | === | + | ===트랜젝션과 쓰레드 관리=== |
− | + | 트랜젝션 처리 역시 용이하다.<ref>꿀벌, 〈[https://blog.naver.com/poloecko/70094791801 iBatis란?]〉, 《네이버 블로그》, 2010-10-01</ref> | |
== 사용법 == | == 사용법 == | ||
− | SQL 문은 XML 파일이나 주석에 | + | SQL 문은 XML 파일이나 주석에 저장됩니다 . 아래는 자바 인터페이스와 MyBatis 어노테이션으로 구성된 MyBatis 매퍼를 나타낸 것이다. |
package org.mybatis.example;<br> | package org.mybatis.example;<br> | ||
public interface BlogMapper { | public interface BlogMapper { | ||
142번째 줄: | 134번째 줄: | ||
} | } | ||
− | 문장은 다음과 같이 | + | 문장은 다음과 같이 실행됩니다. |
BlogMapper mapper = session.getMapper(BlogMapper.class); | BlogMapper mapper = session.getMapper(BlogMapper.class); | ||
Blog blog = mapper.selectBlog(101); | Blog blog = mapper.selectBlog(101); | ||
− | SQL 문과 매핑은 다음과 같이 XML 파일로 외부화 될 수도 | + | SQL 문과 매핑은 다음과 같이 XML 파일로 외부화 될 수도 있습니다. |
<?xml version="1.0" encoding="UTF-8" ?> | <?xml version="1.0" encoding="UTF-8" ?> | ||
159번째 줄: | 151번째 줄: | ||
문들은 마이바티스 API를 사용하여 실행할 수도 있다. | 문들은 마이바티스 API를 사용하여 실행할 수도 있다. | ||
− | Blog blog = session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101); | + | Blog blog = session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101); |
− | == | + | 자세한 내용은 MyBatis 사이트에서 제공되는 사용 설명서를 참조하십시오. 외부 링크를 참조하십시오.<ref>〈[https://en.wikipedia.org/wiki/MyBatis#Usage MyBatis]〉, 《위키피디아》</ref> |
+ | |||
+ | == 활용 == | ||
=== MyBatis === | === MyBatis === | ||
− | MyBatis는 | + | MyBatis는 자바용 SQL 매핑 프레임 워크이다. iBatis에서 버전 업그레이드가 되면서 긴 버그 목록을 수정하고 다중 데이터베이스 지원, 개선 된 JDBC3 키 생성 지원, 스칼라 지원, 선택적 로깅, Performance 최적화 및 일부 다른 기능들을 제공한다. |
=== MyBatis-Spring === | === MyBatis-Spring === | ||
− | MyBatis-Spring은 Mybatis를 지원하기 위해 제공된다. 이 라이브러리는 MyBatis가 Spring | + | MyBatis-Spring은 Mybatis를 지원하기 위해 제공된다. 이 라이브러리는 MyBatis가 Spring 트랜젝션에 참여할 수있게 해주고, MyBatis mappers와 <code>SqlSession</code> 을 빌드 하고 다른 bean에 삽입하고, MyBatis 예외를 Spring <code>DataAccessException</code> 으로 변환 하며, 마지막으로 MyBatis에 대한 의존성이 없는 애플리케이션 코드를 빌드 할 수 있게 해준다. |
=== MyBatis Velocity Scripting === | === MyBatis Velocity Scripting === | ||
− | MyBatis Velocity Scripting은 Apache Velocity 스크립팅 언어를 사용하여 | + | MyBatis Velocity Scripting은 Apache Velocity 스크립팅 언어를 사용하여 동적 SQL 쿼리를 즉각적으로 생성 할 수있는 확장 기능이다. SQL 스크립트를 템플릿으로 처리하고, 마이바티스는 매개 변수를 적용하고, 실제 SQL을 생성하고, JDBC 매개 변수를 바인드하고, 모두를 실행한다. 모든 템플릿은로드 할 때 미리 컴파일되므로 실행이 매우 빠르다. |
=== MyBatis Migrations === | === MyBatis Migrations === | ||
− | MyBatis Migrations는 [[DDL]] 파일([[마이그레이션]] 이라고 함)을 관리하는 데이터베이스 | + | MyBatis Migrations는 [[DDL]] 파일([[마이그레이션]] 이라고 함)을 관리하는 데이터베이스 스키마 변경 사항을 추적 하는 자바 명령 줄 도구이다 . 마이그레이션을 통해 데이터베이스의 현재 상태를 쿼리하고 스키마 변경 사항을 적용한 다음 실행 취소 할 수 있다. 또한 다른 개발자가 작성한 동시 데이터베이스 스키마 변경을 감지하고 해결하는 데 도움이 된다. |
− | === MyBatis Ignite | + | === MyBatis Ignite == |
− | MyBatis Ignite는 Apache Ignite 분산 메모리 내 플랫폼을 | + | MyBatis Ignite는 Apache Ignite 분산 메모리 내 플랫폼을 2 차 수준 캐시로 사용할 수 있다. 기존의 디스크 기반 또는 플래시 기술을 통해 가능한 한 빠른 속도로 대규모 데이터 세트를 실시간으로 처리하고 처리하기 위한 고성능, 통합 및 분산 메모리 내장 플랫폼이다. |
=== MyBatis Generator === | === MyBatis Generator === | ||
− | MyBatis Generator는 | + | MyBatis Generator는 MyBatis 및 iBATIS 용 코드 생성기이다.. MyBatis Generator는 데이터베이스 테이블(또는 여러 테이블)을 검사하고 [[CRUD]] 작업(만들기, 검색, 업데이트, 삭제) 을 수행하는 데 필요한 MyBatis 아티팩트를 생성한다. |
[[이클립스]](Eclipse) 플러그인을 사용할 수 있습니다. 이클립스 플러그인을 사용하는 경우에만 재생성의 경우 사용자 정의 코드가 보존된다. | [[이클립스]](Eclipse) 플러그인을 사용할 수 있습니다. 이클립스 플러그인을 사용하는 경우에만 재생성의 경우 사용자 정의 코드가 보존된다. | ||
=== MyBatipse === | === MyBatipse === | ||
− | MyBatipse는 | + | MyBatipse는 이클립스 플러그인이다. |
=== MyBatis Dynamic SQL === | === MyBatis Dynamic SQL === | ||
− | 이 라이브러리는 동적 SQL 문을 | + | 이 라이브러리는 동적 SQL 문을 생성하기위한 프레임 워크이다. MyBatis3 및 Spring JDBC 템플릿을 추가적으로 지원하여 타입 안정적인 SQL 템플릿 라이브러리라고 생각하면 된다. |
+ | |||
+ | == 대안 == | ||
{{각주}} | {{각주}} | ||
188번째 줄: | 184번째 줄: | ||
* 기계새, 〈[https://metalbird.tistory.com/entry/iBatis%EB%9E%80 iBatis란?]〉, 《티스토리》, 2012-03-28 | * 기계새, 〈[https://metalbird.tistory.com/entry/iBatis%EB%9E%80 iBatis란?]〉, 《티스토리》, 2012-03-28 | ||
* 빨간색소년, 〈[https://sjh836.tistory.com/127 mybatis Framework (마이바티스 개념, ibatis와 차이, 구조, api, SqlSession)]〉, 《티스토리》, 2018-01-03 | * 빨간색소년, 〈[https://sjh836.tistory.com/127 mybatis Framework (마이바티스 개념, ibatis와 차이, 구조, api, SqlSession)]〉, 《티스토리》, 2018-01-03 | ||
− | |||
− | |||
− | |||
== 같이 보기 == | == 같이 보기 == | ||
198번째 줄: | 191번째 줄: | ||
* [[하이버네이트]] | * [[하이버네이트]] | ||
− | {{ | + | {{프로그래밍|토막글}} |