마이바티스 편집하기

이동: 둘러보기, 검색

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 아이디(ID)으로 기록되고, 다른 장점도 있습니다.

편집을 되돌릴 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 저장해주세요.
최신판 당신의 편집
1번째 줄: 1번째 줄:
[[파일:마이바티스 로고.png|썸네일|200픽셀|'''마이바티스'''(MyBatis)]]
+
'''마이바티스'''(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>
[[파일:마이바티스 글자.png|썸네일|300픽셀|'''마이바티스'''(MyBatis)]]
 
 
 
'''마이바티스'''(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)는 개발자가 지정한 SQL, 저장 프로시저 그리고 몇 가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다. 마이바티스는 [[JDBC]]로 처리하는 상당 부분의 코드와 파라미터 설정 및 결과 매핑을 대신해준다. 마이바티스는 데이터베이스 레코드에 원시 타입과 Map 인터페이스 그리고 [[자바]] [[POJO]] 를 설정해서 매핑하기 위해 [[XML]]과 애노테이션을 사용할 수 있다. 최신버전은 2019년 7월 15일 출시된 MyBatis 3.5.2이다.<ref name="마이바티스">마이바티스 공식 홈페이지 - https://blog.mybatis.org/</ref>
+
마이바티스는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다. 마이바티스는 [[JDBC]]로 처리하는 상당부분의 코드와 파라미터 설정및 결과 매핑을 대신해준다. 마이바티스는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 [[자바]] [[POJO]] 를 설정해서 매핑하기 위해 [[XML]]과 애노테이션을 사용할 수 있다. 최신버전은 2019년 7월 15일 출시된 MyBatis 3.5.2 이다.<ref name="마이바티스">마이바티스 공식 홈페이지 - https://blog.mybatis.org/</ref>
  
 
== 역사 ==
 
== 역사 ==
{{다단2|
 
===2002년~2015년===
 
 
* 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년~2019년===
 
 
* 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 문이 코드로부터 완전히 분리 ===
+
=== SQL문이 코드로부터 완전히 분리 ===
기존에는 DAO 파일에 모든 SQL 문을 작성하였다. 하지만 MyBatis에서는 Mapper 파일에 SQL 코드를 입력해놓고 DAO 파일에서 필요할 때마다 가져와서 사용할 수 있다.
+
기존에는 DAO파일에 모든 SQL문을 작성하였다. 하ㅣ만 MyBatis에서는 Mapper 파일에 SQL코드를 입력해놓고 DAO파일에서 필요할 때마다 가져와서 사용할 수 있다.
 
=== 생산성 ===
 
=== 생산성 ===
JDBC와 SQL을 유지하면서도 훨씬 더 적은 코드로도 JDBC처럼 작동한다. 자바 코드의 20%를 사용하여 JDBC 기능의 80%를 제공하는 간단한 프레임워크이며, 작성할 필요가 없는 JDBC 코드로 인한 분량 문제는 현저하게 줄어든다. (JDBC에 비해 62%정도이다.)
+
JDBC와 SQL을 유지하면서도 훨 씬 더 적은 코드로도 JDBC처럼 작동한다. 자바코드의 20%를 사용하여 JDBC기능의 80%를 제공하는 간단한 프레임워크이며, 작성할 필요가 없는 JDBC 코드로 인한 분량 문제는 현저하게 줄어든다. (JDBC에 비해 62%정도이다.)
 
=== 성능 ===
 
=== 성능 ===
성능 최적화 기법을 지원한다. 페이징 처리된 데이터 리스트를 읽어와서 사용할 때 불필요한 수천 개의 행을 한꺼번에 데이터베이스로부터 가져오는 것이 아니기 때문에 애플리케이션의 성능을 향상시킬수있다.<ref>기계새, 〈[https://metalbird.tistory.com/entry/iBatis%EB%9E%80 iBatis란?]〉, 《티스토리》, 2012-03-28</ref>
+
성능최적화 기법을 지원한다. 페이징 처리된 데이터 리스트를 읽어와서 사용할 때 불필요한 수천개의 행을 한꺼번에 데이터베이스로부터 가져오는것이 아니기 때문에 애플리케이션의 성능을 향상시킬수있다.<ref>기계새, 〈[https://metalbird.tistory.com/entry/iBatis%EB%9E%80 iBatis란?]〉, 《티스토리》, 2012-03-28</ref>
 
===SQL 문장과 프로그래밍 코드의 분리===
 
===SQL 문장과 프로그래밍 코드의 분리===
 
작업의 분배 : 팀을 세분화하는 것을 돕는다.
 
작업의 분배 : 팀을 세분화하는 것을 돕는다.
SQL 문과 자바 코드와의 분리만으로도 자바 개발자는 Query 문을 신경 쓰지 않아도 된다.
+
SQL문과 Java코드와의 분리만으로도 Java개발자는 Query문을 신경쓰지 않아도 된다.
SQL 문이 변경되더라도 파라미터값만 변경되지 않는다면 자바 소스에서 수정할 부분이 없기 때문이다.
+
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>
+
트랜젝션 처리 역시 용이하다.<ref>꿀벌, 〈[https://blog.naver.com/poloecko/70094791801 iBatis란?]〉, 《네이버 블로그》, 2010-10-01</ref>
  
 
== 사용법 ==
 
== 사용법 ==
SQL 문은 XML 파일이나 주석에 저장된다 . 아래는 자바 인터페이스와 MyBatis 애노테이션으로 구성된 MyBatis 매퍼를 나타낸 것이다.
+
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); <ref>〈[https://en.wikipedia.org/wiki/MyBatis#Usage MyBatis]〉, 《위키피디아》</ref>
+
  Blog blog = session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);  
  
== 종류 ==
+
자세한 내용은 MyBatis 사이트에서 제공되는 사용 설명서를 참조하십시오. 외부 링크를 참조하십시오.<ref>〈[https://en.wikipedia.org/wiki/MyBatis#Usage MyBatis]〉, 《위키피디아》</ref>
 +
 
 +
== 활용 ==
 
=== MyBatis ===
 
=== MyBatis ===
MyBatis는 [[자바]]용 [[SQL]] 매핑 [[프레임워크]]이다. 아이바티스에서 버전 업그레이드가 되면서 긴 버그 목록을 수정하고 다중 데이터베이스 지원, 개선된 [[JDBC]]3 키 생성 지원, [[스칼라]] 지원, 선택적 로깅, Performance 최적화 및 일부 다른 기능들을 제공한다.
+
MyBatis는 자바용 SQL 매핑 프레임 워크이다. iBatis에서 버전 업그레이드가 되면서 긴 버그 목록을 수정하고 다중 데이터베이스 지원, 개선 된 JDBC3 키 생성 지원, 스칼라 지원, 선택적 로깅, Performance 최적화 및 일부 다른 기능들을 제공한다.
 
=== MyBatis-Spring ===
 
=== MyBatis-Spring ===
MyBatis-Spring은 Mybatis를 지원하기 위해 제공된다. 이 라이브러리는 MyBatis가 Spring [[트랜잭션]]에 참여할 수 있게 해주고, MyBatis mappers와 <code>SqlSession</code> 을 빌드하고 다른 bean에 삽입하고, MyBatis 예외를 Spring <code>DataAccessException</code> 으로 변환하며, 마지막으로 MyBatis에 대한 의존성이 없는 애플리케이션 코드를 빌드 할 수 있게 해준다.
+
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 스크립팅 언어를 사용하여 Dynamic SQL 쿼리를 즉각적으로 생성할 수 있는 확장 기능이다. SQL 스크립트를 템플릿으로 처리하고, 마이바티스는 매개 변수를 적용하고, 실제 SQL을 생성하고, JDBC 매개 변수를 바인드하고, 모두를 실행한다. 모든 템플릿은 로드 할 때 미리 컴파일되므로 실행이 매우 빠르다.  
+
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 분산 메모리 내 플랫폼을 2차 수준 캐시로 사용할 수 있다. 기존의 디스크 기반 또는 [[플래시]] 기술을 통해 가능한 한 빠른 속도로 대규모 데이터 세트를 실시간으로 처리하고 처리하기 위한 고성능, 통합 및 분산 메모리 내장 [[플랫폼]]이다.
+
MyBatis Ignite는 Apache Ignite 분산 메모리 내 플랫폼을 2 차 수준 캐시로 사용할 수 있다. 기존의 디스크 기반 또는 플래시 기술을 통해 가능한 한 빠른 속도로 대규모 데이터 세트를 실시간으로 처리하고 처리하기 위한 고성능, 통합 및 분산 메모리 내장 플랫폼이다.
 
=== MyBatis Generator ===
 
=== MyBatis Generator ===
MyBatis Generator는 마이바티스 아이바티스 용 코드 생성기이다.. MyBatis Generator는 데이터베이스 테이블(또는 여러 테이블)을 검사하고 [[CRUD]] 작업(만들기, 검색, 업데이트, 삭제) 을 수행하는 데 필요한 MyBatis 아티팩트를 생성한다.
+
MyBatis Generator는 MyBatis iBATIS 용 코드 생성기이다.. MyBatis Generator는 데이터베이스 테이블(또는 여러 테이블)을 검사하고 [[CRUD]] 작업(만들기, 검색, 업데이트, 삭제) 을 수행하는 데 필요한 MyBatis 아티팩트를 생성한다.
 
[[이클립스]](Eclipse) 플러그인을 사용할 수 있습니다. 이클립스 플러그인을 사용하는 경우에만 재생성의 경우 사용자 정의 코드가 보존된다.
 
[[이클립스]](Eclipse) 플러그인을 사용할 수 있습니다. 이클립스 플러그인을 사용하는 경우에만 재생성의 경우 사용자 정의 코드가 보존된다.
 
=== MyBatipse ===
 
=== MyBatipse ===
MyBatipse는 [[이클립스]] 플러그인이다.
+
MyBatipse는 이클립스 플러그인이다.
 
=== MyBatis Dynamic SQL ===
 
=== MyBatis Dynamic SQL ===
이 라이브러리는 동적 SQL 문을 생성하기 위한 [[프레임워크]]이다. MyBatis 3 및 Spring JDBC 템플릿을 추가적으로 지원하여 타입 안정적인 SQL 템플릿 라이브러리라고 생각하면 된다.<ref name="마이바티스"></ref>
+
이 라이브러리는 동적 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
* Packt, 〈[https://hub.packtpub.com/why-mybatis/ Why MyBatis]〉, 《Packt》, 2013-07-10
 
* 대바보, 〈[https://bigstupid.tistory.com/18 MyBatis란?]〉, 《티스토리》, 2017-11-27
 
* iotsw, 〈[https://iotsw.tistory.com/77 MyBatis란?]〉, 《티스토리》, 2016-05-31
 
  
 
== 같이 보기 ==
 
== 같이 보기 ==
198번째 줄: 191번째 줄:
 
* [[하이버네이트]]
 
* [[하이버네이트]]
  
{{솔루션|검토 필요}}
+
{{프로그래밍|토막글}}

해시넷에서의 모든 기여는 다른 기여자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요. 만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다 (자세한 사항은 해시넷:저작권 문서를 보세요). 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 | 편집 도움말 (새 창에서 열림)