mybatis 소개
MyBatis는 일반 SQL 쿼리, 저장 프로 시저 및 고급 매핑을 지원하는 우수한 지속성 계층 프레임 워크입니다. MyBatis는 거의 모든 JDBC 코드의 수동 설정과 매개 변수 및 결과 세트의 검색 캡슐화를 제거합니다. MyBatis는 구성 및 원래 매핑, 맵핑 인터페이스 및 Java의 Pojos (일반 Old Java Objects)를 데이터베이스의 레코드로 사용하기 위해 간단한 XML 또는 주석을 사용할 수 있습니다.
Mybatis의 기능 아키텍처는 3 개의 층으로 나뉩니다 (그림은 Baidu 백과 사전에서 빌려옵니다) :
1) API 인터페이스 계층 : 개발자가 데이터베이스를 조작하는 외부 사용을위한 인터페이스 API를 제공합니다. 인터페이스 계층이 호출 요청을 수신하면 데이터 처리 계층을 호출하여 특정 데이터 처리를 완료합니다.
2) 데이터 처리 계층 : 특정 SQL 검색, SQL 구문 분석, SQL 실행 및 실행 결과 매핑 처리 등의 책임이 있습니다. 주요 목적은 통화 요청에 따라 데이터베이스 작업을 완료하는 것입니다.
3) 기본 지원 계층 : 연결 관리, 트랜잭션 관리, 구성로드 및 캐시 처리를 포함한 가장 기본적인 기능 지원을 담당합니다. 이것들은 모두 일반적인 것들이며 가장 기본적인 구성 요소로 추출합니다. 데이터 처리 계층의 상부 계층에 대한 가장 기본적인 지원을 제공합니다.
mybatis에서 매핑을 선택하면 resulttype 또는 resultmap과 함께 리턴 유형을 사용할 수 있습니다. resulttype는 리턴 유형을 직접 나타내는 반면 resultMap은 외부 결과 맵에 대한 참조이지만 resultType 및 resultMap은 동시에 존재할 수 없습니다. MyBatis가 매핑을 쿼리하는 경우, 실제로 각 속성 쿼리는 해당 맵에 배치됩니다. 여기서 키는 속성 이름이고 값은 해당 값입니다. 제공된 반환 유형 속성이 resultType 일 때 MyBatis는 맵에서 키 값 쌍을 취해 resultType에 의해 지정된 객체의 해당 속성에 할당됩니다. 실제로 MyBatis의 각 쿼리 맵의 리턴 유형은 결과 맵입니다. 그러나 우리가 제공하는 리턴 유형 속성이 resultType 일 때 myBatis는 resultType에 의해 지정된 객체의 속성에 해당 값을 자동으로 할당합니다. 우리가 제공하는 반환 유형이 resultMap 일 때, 맵은 도메인 모델을 잘 나타내지 못하기 때문에 해당 객체로 더 많은 변환해야합니다. 이는 종종 복잡한 쿼리에서 매우 유용합니다.
그러한 블로그 .java 파일이 있습니다
import java.util.list; public class blog {private int id; private int id 제목; 개인 문자열 콘텐츠; 개인 문자열 소유자; 개인 문자열 소유자; 개인 목록 <의견> 의견; public int getId () {return id;} public void setid (int id) {this.id = id;} public string gettitle () {return void settitle (string title) {thistitle =} {return content;} public void setContent (String content) {this.content = content;} public string getowner () {return 소유자;} public void setowner (string onder) {this.owner = 소유자;} public void setcomments (} public void setcomments (list> comments)}@ebongredperting (ridepublic)} {return "---------------------------------------------/n ID :" + id + "/n 제목 :" + title + "/n content :" + content + "/n 소유자 :" + 소유자;}}해당 데이터베이스 테이블에는 ID, 제목, 내용 및 소유자 속성이 포함되어 있습니다. 다음 쿼리 매핑을 수행 할 때
<faintealias alias = "blog"type = "com.tiantian.mybatis.model.blog"/> <!-myBatis myBatis_config.xml-> <selectBlog "ParameterType ="int "resultType ="blog "> select * {id = <! <! <! blogmapper.xml->MyBatis는 결과 맵 객체를 자동으로 생성 한 다음 찾은 속성 이름을 기반으로 키 값 쌍을 캡슐화합니다. 그런 다음 리턴 유형이 블로그 객체임을 알게 된 다음 resultMap에서 블로그 객체에 해당하는 키 값 쌍을 꺼내서 할당합니다.
또한 반환 유형이 직접 결과 맵인 경우에도 매우 유용하며, 간단한 쿼리를 수행 할 필요가 없기 때문에 복잡한 조인트 쿼리에 주로 사용됩니다. 먼저 리턴 유형 resultmap이있는 간단한 쿼리를보고 복잡한 쿼리의 사용법을 살펴 보겠습니다.
간단한 쿼리를 작성하는 방법
<resultmap type = "blog"id = "blogresult"> <id councm = "id"property = "id"/> <result column = "title"propertion = "title"속성 = "title"/<result column = "content"property = "content"/> <result column = "소유자"속성 = "소유자"속성 = "소유자"소유자 "속성 ="result = "result camil ="result = "result ="result = "" "" "" "" 속성 = "소유자"/> <</resultmap> <select id = "selectblog"parametertype = "int"resultmap = "blogresult"> select * from t_blog where id = #{id} </select>선택 맵에서 결과 맵의 값은 외부 resultmap의 ID이며, 어떤 결과가 매핑되었는지를 나타냅니다. 외부 resultmap의 유형 속성은 resultmap의 결과가 어떤 유형인지를 나타냅니다. 다음은 블로그 유형이 있으므로 Mybatis는 블로그 객체로 가져갑니다. resultmap 노드의 하위 노드 ID는 객체의 ID를 식별하는 데 사용되는 반면 결과 자식 노드는 간단한 속성을 식별하는 데 사용됩니다. 열 속성은 데이터베이스에서 쿼리 된 속성을 나타내며, 속성은 쿼리 된 속성의 해당 값이 엔티티 오브젝트에 할당되는 속성을 나타냅니다. 이것은 간단한 쿼리를 위해 resultMap을 작성하는 방법입니다. 다음으로 더 복잡한 쿼리를 살펴 보겠습니다.
블로그 참조가있는 댓글 클래스가 있는데, 어떤 블로그가 있는지를 나타냅니다. 주석을 쿼리 할 때 해당 블로그를 찾아 블로그 속성에 할당해야합니다.
import java.util.date; public class comment {private int id; private int id; private string content; private date commentdate = new date (); 공개 블로그 블로그; public int getId () {return id;} public void setid (int id) {this.id = id;} public string getContent ({return content;} public void setcontent (string 컨텐츠)} {return commentDate;}public void setCommentDate(Date commentDate) {this.commentDate = commentDate;}public Blog getBlog() {return blog;}public void setBlog(Blog blog) {this.blog = blog;}public String toString() {return blog + "/n ----------------评论-----------------/n id: " + id + "/n content: " + content + "/n commentDate :" + commentDate;}}이렇게 쓰여졌습니다
<!- home home "id ="commentResult "> <ancization 속성 ="blog "column ="blog "javatype ="blog "/> </resultmap> <select comment"parametertype = "int resultmap ="commentresult "}} id id} id = "selectblog"parametertype = "int"resulttype = "blog"> select * from t_comment where id = #{id} </select> <select id = "selectblog"parametertype = "int"resulttype = "blog"> select * from t_blog where id = #{id} </select>액세스 상황은 다음과 같습니다. 먼저 SelectComment의 ID와 함께 SELECT MAP을 요청한 다음 COMMINGRESULT의 ID와 함께 결과 맵 객체를 얻습니다. 해당 resultmap의 리턴 유형은 하나의 연관 노드 만있는 주석 개체이며 위에서 언급 한 간단한 쿼리에 해당하는 ID 및 결과 하위 노드가 없지만 해당 ID 및 기타 속성을 주석 개체에 할당합니다. 이것이 MyB가 앞에서 언급 한 것입니다. ATI에는 자동 캡슐화 기능이 있습니다. 리턴 유형을 제공하는 한 Mybatis는 쿼리 결과를 사용하여 자체 판단에 따라 해당 객체를 캡슐화합니다. 따라서 위의 간단한 쿼리에서 어떤 필드가 ID에 해당하는지, 어떤 필드가 resultMap의 제목에 해당하는지 명확하게 표시하지 않으면 MyBatis도 자체 판단에 따라이를 캡슐화합니다. Mybatis 자신의 판단은 쿼리 필드 또는 해당 별칭을 반환 오브젝트의 속성과 비교하는 것입니다. 일치하고 유형이 일치하면 Mybatis가 할당합니다. 블로그 속성은 위의 해당 resultmap에 연결되어 있으며 해당 Java 유형은 블로그입니다. 위의 쓰기 방법에서 관련 객체는 하위 쿼리를 통해 연결되며 물론 연관 쿼리를 통해 직접 연결할 수도 있습니다. 위의 연관성 자식 노드에서 속성 속성은 어떤 관련 속성이 resultmap 리턴 유형인지를 나타냅니다. 위의 예에서, 블로그 속성은 댓글에 의해 관리됩니다. SELECT 해당 관련 속성을 맵핑 할 맵을 선택하십시오. 열은 id commentResult가있는 resultMap에 해당하는 키 값 쌍을 나타냅니다. 이 키 값 쌍은 관련 객체의 하위 쿼리에 대한 매개 변수로 사용됩니다. Javatype는 Java의 현재 관련 객체의 현재 유형을 나타냅니다.
위의 경우 일대일의 경우 일회사와 일대일 또는 일대일 관계에 대한 쿼리가 소개됩니다. 실제 응용 프로그램에는 더 자주 사용하는 다른 응용 프로그램이 있습니다. 한 당사자를 통해 해당 더 많은 당사자를 찾아야합니다. 더 많은 당사자를 꺼낼 때 한 당사자도 한 당사자와 연관되어야합니다. 즉, 위의 예에서는 블로그 객체를 꺼낼 때 해당 주석이 모두 꺼집니다. 주석을 꺼낼 때는 여전히 해당 블로그를 꺼내야합니다. 이것은 Java의 요청을 통해 꺼집니다. 작문 방법은 다음과 같습니다.
<!-from blogmapper.xml 파일-> <resultmap type = "blog"id = "blogresult"> <id councle = "id"property = "id"/<collection property = "collection"select "select"= "selectCommentsByBlog"열 = "id"oftype = "댓글"> </collection> </resultmap type = "id id induct"> <socciation ""blog " javatype = "blog"column = "blog"select = "selectblog"/> </resultmap> <select id = "selectblog"parametertype = "int"resultmap = "blogresult"> select * from t_blog where id = #{id} </select> <!-<select id = id = "paramettype" "int" resultmap = "CommentResult"> select * from t_comment where blog = #{blogid} </select>위의 요청의 입력은 ID SelectBlog가있는 선택 맵이며, 반환 결과는 ID Blogresult가있는 resultMAP입니다. ID Blogresult 유형은 블로그이며 ID의 속성과 필드를 지정합니다. ID를 지정하면 MyBatis의 내부 구성에 큰 영향을 미칩니다. 주석 개체와 관련이 있습니다. 블로그에는 컬렉션 인 많은 댓글이있을 수 있으므로 컬렉션 컬렉션과 매핑됩니다. SELECT는 여전히 해당 주석을 쿼리하기 위해 수행되는 하위 쿼리를 나타냅니다. 열은 위에서 발견 된 필드 값이 매개 변수로 서브 쿼리로 전달되는 것을 의미합니다. Oftype는 또한 리턴 유형을 나타냅니다. 여기의 리턴 유형은 컬렉션 내부의 유형입니다. 유형 대신 유형이 사용되는 이유는 Mybatis 내에서 협회 협회와 구별하기 위해 사용되기 때문입니다.
테스트 코드 :
@TestPublic void selectCommentsByBlogTest () {sqlsession session = util.getSqlSessionFactory (). OpenSession (); commentMapper Commber = Session.GetMapper (commentMapper.Class); list> 댓글 = commentMapper.SelectCommentScomblog (6); 댓글) system.out.println (comment); session.close ();}/*** 단일 레코드 쿼리*/@testpublic void testelectone () {sqlsession session = util.getSqlsessionActory (). OpenSession (); blogmapper blogmapper = session.getMapper (blogmapper.class); selfmapplog (6); blog.getComments (); if (comment! = null) {System.out.println ( "-------------- 주석 크기 -----------" + 댓글 ()); for (comment comment : comment.out.println (comment);} session.close ();}위의 것은 MyBatis의 resultmap에 대한 간단한 개요입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!