이 기사에서는 Mybatis의 프레임 워크 원칙과 Mybatis의 입문 프로그램을 소개하여 사용자의 추가, 삭제, 수정 및 검사를 실현할 것입니다. 그것의 장점과 단점은 무엇이며 Mybatis와 최대 절전 모드 사이에 어떤 관계가 존재하는지. 친구들에게 도움이되기를 바랍니다. 단점이 있으면 조언을 해주세요.
mybatis는 무엇입니까?
Mybatis는 Apache의 오픈 소스 프로젝트입니다. 2010 년 에이 프로젝트는 Apache Software Foundation에서 Google 코드로 이전되었으며 Mybatis로 이름이 바뀌 었습니다. 2013 년 11 월 Github로 마이그레이션되었습니다.
Mybatis는 맞춤형 SQL, 저장 프로 시저 및 고급 매핑을 지원하는 우수한 지속성 계층 프레임 워크입니다. MyBatis는 거의 모든 JDBC 코드 및 수동 설정 매개 변수 및 소멸 결과 세트를 피합니다. MyBatis는 간단한 XML 또는 주석을 사용하여 프리미티브, 인터페이스 및 Java Pojos (일반 Old Java Objects)를 데이터베이스의 레코드로 구성 및 맵핑합니다. 간단히 말해서, mybatis는 지속적인 층 프레임 워크입니다. MyBatis는 프로그램이 SQL에 집중하고 Mybatis가 제공하는 매핑 방법을 통해 요구를 충족시키는 SQL 문을 자유롭게 생성 할 수 있도록합니다. MyBatis는 입력 매개 변수를 자동으로 입력하여 준비를 준비하고 쿼리 결과를 Java 객체에 유연하게 매핑 할 수 있습니다.
다음으로 그림을 통해 Mybatis의 프레임 워크 원리를 이해해 봅시다.
프레임 워크 아키텍처 설명 :
에이. 구성 파일로드 : 구성은 두 곳에서 나옵니다. 하나는 구성 파일이고 다른 하나는 Java 코드의 주석입니다. SQL의 구성 정보는 Mappedstatement 객체 (전달 된 매개 변수 매핑 구성, 실행 된 SQL 문 포함 및 결과 매핑 구성 포함)에로드하고 메모리에 저장됩니다.
비. SQL 파싱 : API 인터페이스 계층이 호출 요청을 받으면 들어오는 SLQ의 ID와 들어오는 개체 (맵 또는 기본 데이터 유형이 될 수 있음)를받습니다. MyBatis는 SQL의 ID를 기반으로 해당 매핑 확장을 찾은 다음 들어오는 매개 변수 객체에 기초하여 매핑 된 스테이트를 구문 분석합니다. 구문 분석 후 SQL 문 및 매개 변수를 결국 실행할 수 있습니다.
기음. SQL 실행 : 실행을 위해 최종 SQL 및 매개 변수를 데이터베이스로 가져와 데이터베이스 작동 결과를 얻습니다.
디. 결과 매핑 : 매핑 구성에 따라 작동 데이터베이스 결과를 변환하여 해시 맵, Javabean 또는 기본 데이터 유형으로 변환 할 수 있으며 최종 결과를 반환합니다.
Mybatis 시작 프로그램 분석
다음으로 편집자는 데모와 함께 특정 요구 사항을 소개하며 요구 사항은 다음과 같습니다.
사용자 ID를 기반으로 한 쿼리 사용자 정보;
사용자 이름을 기반으로 쿼리 사용자 정보;
사용자를 추가, 삭제 및 업데이트하십시오.
첫 번째 단계는 다양한 패키지 및 클래스를 만드는 것입니다. 프로젝트 디렉토리는 다음과 같습니다.
두 번째 단계는 컨텐츠를 sqlmapconfig.xml로 작성하고 Mybatis의 실행중인 환경, 데이터 소스, 트랜잭션 등을 구성하는 것입니다. 코드는 다음과 같습니다.
<span style = "font-family : comic sans ms; font-size : 18px;"> <? xml 버전 = "1.0"encoding = "utf-8"?> <! doctype configuration public "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-스프링이 통합 된 후 환경 구성이 폐지됩니다-> <환경 기본값 = "개발자"> <!-JDBC 트랜잭션 관리, 트랜잭션 제어는 mybatis입니다. MyBatis에 의해 관리되는 연결 풀 -> <dataSource type = "polled"> <property name = "driver"value = "$ {jdbc.driver}"/> <property name = "url"value = "$ {jdbc.url}"/> <property name = "username"value = "$ {jdbc.username}"/> < "pademast" "/>. value = "$ {jdbc.password}"/> </dataSource> </환경> <!-맵 파일로드-> <mappers> resource = "sqlmap/user.xml"/> </mappers> </configuration> </span>세 번째 단계는 다음과 같이 user.java에 내용을 작성하는 것입니다.
<span style = "font-family : comic sans ms; font-size : 18px;"> package cn.itcast.mybatis.po; import java.util.date; /** * * <p> 제목 : 사용자 </p> * <p> 설명 : 사용자 po </p> * @Author Ding GuoHua * @Date 2016 년 7 월 31 일 15:39:04 * @version 1.0 */public class user {// 속성 이름은 데이터베이스 테이블 개인 ID ID의 필드에 해당합니다. 개인 문자열 사용자 이름; // 사용자 이름 개인 문자열 섹스; // 젠더 비공개 날짜 생일; // 생일 개인 문자열 주소; // 주소 public int getId () {return id; } public void setid (int id) {this.id = id; } public String getUserName () {return username; } public void setusername (String username) {this.username = username; } public String getSex () {return sex; } public void setsex (String sex) {this.sex = sex; } 공개 날짜 getBirthday () {return birthday; } public void setbirthday (날짜 생일) {this.birthday = 생일; } public String getAddress () {return address; } public void setAddress (문자열 주소) {this.address = 주소; } @override public String toString () {return "user [id =" + id + ", username =" + username + ", sex =" + sex + ", 생일 =" + 생일 + ", address =" + address + "]; }} </span>4 단계 : 추가, 삭제, 수정 및 검색 기능을 구현하려면 먼저 아래와 같이 user.xml에 내용을 작성하십시오.
<span style = "font-family : comic sans ms; font-size : 18px;"> <? xml version = "1.0"encoding = "utf-8"?> <! doctype mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http:///dtd. <!-네임 스페이스 네임 스페이스는 SQL 관리를 분류하고 SQL의 분리를 이해하는 기능입니다. Mapper 프록시 메소드를 사용하여 개발하기 위해, 네임 스페이스는 특별하고 중요한 역할을합니다-> <Mapper 네임 스페이스 = "테스트"> <!-맵핑 파일에서 많은 SQL 문을 구성합니다.> <! <! <!-<! 매핑 파일의 SQL은 SQL 문을 매핑 스테이트 객체로 캡슐화하므로 ID를 ID ParameterType라고합니다. 입력 매개 변수의 유형을 지정하고 여기서 int 유형 #{}을 지정하여 자리 표시 자 기호 #{id}를 지정합니다. 여기서 ID는 입력을받는 매개 변수를 나타내고 매개 변수 이름은 id입니다. 입력 매개 변수가 간단한 유형 인 경우 #{}의 매개 변수 이름은 임의적 일 수 있으며 값 또는 기타 이름 resultType 일 수 있습니다. SQL의 출력 결과의 매핑 된 Java 객체의 유형을 지정하고 specte resultType를 선택하여 Java 객체를 단일 레코드로 표시합니다. -> <select id = "findUserById"ParameterType = "int"resulttype = "cn.itcast.mybatis.po.user"> select * id =#{value} </select> <!-사용자 이름을 기반으로 한 퍼지 쿼리 사용자 정보, 여러 resultTypes가 반환 될 수 있습니다. java 객체 {java object it the the the the the the the the the the the the the the the the the the when SQL 스트링 및 수신 된 매개 변수를 수정없이 SQL로 스 플라이싱합니다. $ {}를 Splice SQL에 사용하여 SQL이 $ {value}를 주입합니다. 입력 매개 변수의 내용을 수신합니다. 들어오는 유형이 단순한 유형 인 경우 $ {}-> <select id = "findUserByName"ParameterType = "java.lang.string"resulttype = "cn.itcast.mybatis.po.user"> select *에서 사용자 이름이 '%$ {value}%'</select> <! 매개 변수 유형은 pojo (사용자 정보 포함) #{}에서 pojo의 속성 이름을 지정하고, pojo 객체의 속성 값을 수신하고, mybatis는 ingl-> <insert id = "insertuser"를 통해 객체의 속성 값을 얻습니다. last_insert_id () : 자체 확보 기본 키 키프로티 : 쿼리의 기본 키 값을 ParameterType에 의해 지정된 객체의 속성으로 설정하는 데 적용 할 수있는 기본 키 값을 방금 삽입 한 기본 키 값을 가져옵니다. insert 문에 대해 execution Order () Execution Order, Execution Order : execution execution execution execution execution Order () Execution Order () 실행 순서를 선택하십시오. keyProperty = "id"order = "after"resulttype = "java.lang.integer"> select last_inser_id () </selectkey> user (사용자 이름, 생일, 섹스, 주소) value (#{username},#{생일},#{sex},#{주소}) <!- key uuid (mysql on uuid) (mysql) 기능 (mysql on myscl). 먼저 UUID를 통해 기본 키를 얻고 사용자 객체의 ID 속성에 기본 키를 설정 한 다음 둘째, 삽입이 실행되면 사용자 객체에서 ID 속성 값을 제거 할 때-> <selectKey keyProperty = "id"order = "resultType ="java.lang.string "> select uuid () </seeltKey> insert incers incers (username,, sex,, sex,, sex,, sex,, sex,) value (#{username},#{생일},#{sex},#{address}); </insert> <!-ID를 기반으로 사용자를 삭제하려면 사용자를 삭제하려면 ID 값을 입력해야합니다 .-> <delete id = "java.lang.integer"> id =#{id} </delete> <!-사용자의 id를 업데이트하려면 사용자의 ID가 필요합니다. ID 및 업데이트 정보를 포함하여 사용자 객체를 지정합니다. 참고 : ID는#{id} : 입력 사용자 객체에서 ID 속성 값을 가져옵니다 .-> <Update id = "updateUser"ParameterType = "cn.itcast.myBatis.po.user"> USTUD USER SET USERNAME =#{username}, 생일 =#{생일}, sex =#}}##{#} </맵퍼> </span>5 단계 : 다음과 같이 특정 방법을 작성하십시오.
<span style = "font-family : comic sans ms; font-size : 18px;"> package cn.itcast.mybatis.first; import java.io.ioexception; import java.io.inputstream; import java.util.date; Java.util.list 가져 오기; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsessionfactory; import org.apache.ibatis.session.sqlsessionfactorybuilder; import org.junit.test; import cn.itcast.mybatis.po.user; public class mybatisfirst {// id id id query query query record @test public void findUserByIdTest ()가 ioException {// myBatis configuration file string resource = "sqlmapconfig.xml"; // 구성 파일 스트림 inputStream inputStream = resources.getResourCeasStream (resource); // 세션 공장 생성 및 MyBatis 구성 파일 정보 SQLSESSIONFACTORY SQLSESSIONFACTORY = NEW SQLSESSIONFACTORYBUILDER () .BUILD (inputStream); // 팩토리 SQLSESSION SQLSESSION을 통해 SQLSESSION을 가져옵니다. // SQLSESSION을 통해 데이터베이스를 작동합니다. // 첫 번째 매개 변수 : 맵 파일의 문의 ID는 = namespace+ "입니다."+ id의 두 번째 매개 변수 // 맵 파일에서 일치하는 매개 변수 유형의 매개 변수를 지정합니다. // sqlsession.selectone 결과는 qually selecting ehougher selecting quely query that quely selecting qually qualles selecting at qualles qualles hating qualles hets oursher ehought type of that that quess retone입니다. sqlsession.selectone ( "test.finduserByid", 1); System.out.println (사용자); // 자원을 릴리스 SQLSESSION.CLOSE (); } // 퍼지 쿼리 사용자 이름 @Test void findUserBynameTest ()가 IoException {// myBatis configuration string resource = "sqlmapconfig.xml"; // 구성 파일을 가져옵니다. inputStream inputStream = resources.getResourCeasStream (resource); // 세션 공장 생성 및 MyBatis 구성 파일 정보 SQLSESSIONFACTORY SQLSESSIONFACTORY = NEW SQLSESSIONFACTORYBUILDER (). 빌드 (inputStream); // 팩토리 SQLSESSION SQLSESSION을 통해 SQLSESSION을 가져옵니다. // 목록의 사용자는 매핑 파일 목록에서 독일 결과 유형에 의해 지정된 유형과 동일합니다. 목록 <user> list = sqlsession.selectList ( "test.finduserByName", "Xiao Ming"); System.out.println (목록); sqlsession.close (); } public void insertUsertest ()는 ioException {// myBatis 구성 파일 문자열 resource = "sqlmapconfig"; // 구성 파일 스트림 inputStream inputStream = resources.getResourCeasStream (resource); // 세션 공장 생성 및 MyBatis 구성 파일 정보 SQLSESSIONFACTORY SQLSESSIONFACTORY = NEW SQLSESSIONFACTORYBUILDER (). 빌드 (inputStream); // 팩토리 SQLSESSION SQLSESSION을 통해 SQLSESSION을 가져옵니다. // 사용자 객체 user user = new user () 삽입; user.setusername ( "Ding Guohua"); user.setbirthday (새 날짜 ()); user.setsex ( "1"); user.setAddress ( "anhui hefei"); // 목록의 사용자와 맵핑 파일의 resultType에서 지정된 유형은 항상 sqlsession.insert입니다 ( "test.insertuser", user); // 물건 제출 sqlsession.commit (); // 세션을 닫습니다 sqlsession.close (); } // id @test public void deleteusertest ()를 기반으로 사용자 정보를 삭제합니다 IoException {// myBatis configuration file string resource = "sqlmapconfig.xml"; // 구성 파일 스트림 inputStream inputStream = resources.getResourCeasStream (resource); // myBatis 구성 파일 정보 SQLSESSIONFACTORY SQLSESSIONFACTORY = 새로운 SQLSESSIONFACTORYBUILDER (). 빌드 (inputStream); // 팩토리 SQLSESSION SQLSESSION을 통해 SQLSESSION을 가져옵니다. // 들어오는 전달 ID 삭제 삭제 사용자 sqlsession.delete ( "test.deleteuser", 39); // 물건 제출 sqlsession.commit (); // 세션을 닫습니다 sqlsession.close (); } // 사용자 정보 @Test public void updateUserTest ()는 ioException {// myBatis 구성 파일 문자열 resource = "sqlmapconfig.xml"; // 구성 파일 스트림 inputStream inputStream = resources.getResourCeasStream (resource); // 세션 공장 생성 및 MyBatis 구성 파일 정보 SQLSESSIONFACTORY SQLSESSIONFACTORY = NEW SQLSESSIONFACTORYBUILDER () .BUILD (inputStream); // 팩토리 SQLSESSION SQLSESSION을 통해 SQLSESSION을 가져옵니다. // USER USER user = 새 사용자 (); // id user.setId (41) 업데이트; user.setusername ( "Ding Guohua"); user.setbirthday (새 날짜 ()); user.setsex ( "2"); user.setAddress ( "anhui hefei"); sqlsession.update ( "test.updateuser", 사용자); // 트랜잭션 commit sqlsession.commit (); // 세션을 닫습니다 sqlsession.close (); }} </span>Mybatis의 장단점
이점:
에이. 쉽게 시작하고 마스터 할 수 있습니다.
비. SQL은 XML로 작성되어 통합 관리 및 최적화를 용이하게합니다.
기음. SQL 및 프로그램 코드를 해체하십시오.
디. 객체와 데이터베이스 간의 ORM 필드 관계 매핑을 지원하기위한 매핑 태그 제공
이자형. 객체 관계 매핑 태그 제공 객체 관계 구성 및 유지 보수를 지원합니다.
에프. XML 태그를 제공하고 동적 SQL 작성을 지원하십시오.
결점:
에이. SQL 워크로드는 특히 많은 필드와 관련 테이블이있을 때 매우 높습니다.
비. SQL은 데이터베이스에 따라 다르므로 데이터베이스 이식성이 떨어집니다.
기음. XML의 태그 ID는 고유해야하므로 DAO의 메소드는 메소드 과부하를 지원하지 않습니다.
디. DAO 층이 너무 간단하고 객체 어셈블리의 작업량이 비교적 큽니다.
이자형. 캐시를 부적절하게 사용하면 더러운 데이터를 쉽게 생성 할 수 있습니다.
mybatis와 최대 절전 모드의 비교
유사성 : Hibernate 및 Mybatis는 SessionFactoryBuilder를 통해 XML 구성 파일에서 SessionFactory를 생성 한 다음 SessionFactroy에서 세션을 생성 할 수 있습니다. 마지막으로, 세션은 사물과 SQL 문을 실행하기 시작합니다. SessionFactoryBuilder, SessionFactory 및 세션의 수명주기는 거의 동일합니다.
차이점 :
mybatis : 작고 편리하고 효율적이며 단순하고 직접, 반자동;
최대 절전 모드 : 강력하고, 편리하고, 효율적이며, 복잡하고, 정황, 완전 자동;
mybatis :
에이. 시작하기 간단하고 가능한 빨리 배우고 사용합니다. 데이터베이스 쿼리에 자동 객체 바인딩 기능을 제공하고 많은 SQL 사용 경험을 계속합니다. 객체 모델 요구 사항이 높은 프로젝트에 적합합니다.
비. 보다 자세한 SQL 최적화를 수행하고 쿼리 필드를 줄일 수 있습니다.
기음. 단점은 프레임 워크가 여전히 비교적 간단하고 기능이 여전히 누락된다는 것입니다. 데이터 바인딩 코드가 단순화되지만 전체 기본 데이터베이스 쿼리는 실제로 자체적으로 작성되어야하며 워크로드는 비교적 커서 빠른 데이터베이스 수정에 쉽게 적응하기가 쉽지 않습니다.
디. 2 차 캐싱 메커니즘은 열악합니다.
최대 절전 모드 :
에이. 강력한 기능, 우수한 데이터베이스 관련성 및 강력한 O/R 매핑 기능. 최대 절전 모드에 능숙하고 최대 절전 모드를 올바르게 캡슐화하면 프로젝트의 전체 지속성 계층 코드가 매우 간단 해지고 작성 해야하는 코드는 매우 높으며 개발 속도가 매우 빠르며 매우 시원합니다.
비. 더 나은 보조 캐싱 메커니즘이 있으며 타사 캐싱을 사용할 수 있습니다.
기음. 단점은 학습 임계 값이 낮지 않으며 능숙해야한다는 것입니다. O/R 매핑을 설계하는 방법, 성능 및 객체 모델의 균형을 맞추는 방법 및 최대 절전 모드를 잘 사용하는 방법은 경험과 능력이 강해야합니다.
생생한 은유를 드리겠습니다.
MYBATIS : 기계 도구는 사용하기 쉽고 가능한 빨리 사용할 수 있지만 작업은 여전히 직접 수행해야하지만 도구는 살아 있어야하므로 저에게 달려 있습니다.
최대 절전 모드 : 지능형 로봇이지만 (학습, 숙련도) 개발하는 데 비용이 많이 들고 작업을 제거 할 수는 있지만 수행 할 수있는 작업 만 제거 할 수 있습니다.
편집자 메시지 :이 블로그 게시물에서 편집자는 주로 Mybatis의 기본 지식을 간단히 소개했습니다. Mybatis의 추가, 삭제, 수정 및 검색의 간단한 데모, Mybatis의 장점 및 단점, 최대 절전 모드와 Mybatis의 비교를 포함하여 Mybatis의 기본 지식을 간단히 소개했습니다. 그들 사이의 유사점과 차이점. mybatis는 단순히 지속성 층 프레임 워크를 의미합니다. MyBatis는 프로그램이 SQL에 집중할 수 있으며 Mybatis가 제공 한 매핑 방법을 통해 요구를 충족시키는 SQL 문을 자유롭게 유연하게 생성 할 수 있습니다. MyBatis는 입력 매개 변수를 자동으로 입력하여 준비를 준비하고 쿼리 결과를 Java 객체에 유연하게 매핑 할 수 있습니다.
위는 편집자가 소개 한 Mybatis 원칙 개요에 대한 소개 자습서입니다. 모든 사람에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 모든 사람에게 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!