Mybatis는 Apache의 오픈 소스 프로젝트입니다. 2010 년 에이 프로젝트는 Apache Software Foundation에서 Google 코드로 이전되었으며 Mybatis로 이름이 바뀌 었습니다. 다음은 MyBatis Advanced Mapping, Dynamic SQL을 소개하고 자동 점수 기본 키 컨텐츠를 얻는 것입니다. 자세한 내용은이 기사를 참조하십시오.
1. 동적 SQL
MyBatis를 사용하여 데이터베이스를 작동 할 때 모든 사람이 항상 문제가 발생한다고 생각합니다. 이제 저자에 대한 저자 목록이있는 경우, 저자리스트의 기존 저자 정보를 기반으로 데이터베이스의 해당 저자의 블로그 정보를 쿼리해야합니다. 그런 다음 가장 쉬운 방법은 작성자 목록을 통과하고 데이터베이스를 쿼리하기 위해 해당 정보를 얻는 것입니다.
for (int i = 0; i <authorList.size (); i ++) {… // 쿼리 데이터베이스 코드 // author =#{author, jdbctype = varchar}}저자 목록의 길이가 n이라면 데이터베이스 n 번 쿼리해야합니다. 이 메소드를 사용하는 경우 프로그램의 오버 헤드는 쿼리뿐만 아니라 데이터베이스 연결 풀에서 연결 인스턴스를 취하고 데이터베이스 연결 설정 및 데이터베이스 인스턴스를 데이터베이스 연결 풀로 되돌립니다. 이 세 가지 행동이 총 0.001 초가 걸린다고 가정하십시오. 그런 다음 Traversal Method를 사용하여 쿼리하면 0.001n 초가 더 걸립니다. 1,000 번 쿼리 해야하는 경우 1 초가 더 걸립니다. 이것은 프로그래머에게는 참을 수 없습니다. 이것은 원형 쿼리 일 뿐이며 다른 비즈니스 코드로 계산되지 않기 때문입니다.
더 좋은 방법이 있습니까? 대답은 그렇습니다. 그 중 하나는 동적 SQL입니다.
먼저 코드 업로드 :
<id id = "dynamicforeachTest"resulttype = "com.blog.blog"parametertype = "java.util.list"> select * <foreach collection = "index"index "item ="item "init in expen ="( "separtor =", "close =") "> <{item} </foreach> </foreach>TEM은 세트의 각 요소가 반복 될 때 별칭을 나타냅니다.
색인은 반복 프로세스 중에 각 반복에 도달하는 위치를 나타내는 이름을 지정합니다.
열기는 진술이 시작되는 곳을 의미합니다.
분리기는 각 반복 사이의 분리기로 사용되는 기호를 나타냅니다.
Close는 목록 <bolg>을 사용하여 반환 값을 수락 할 수 있도록 끝나는 원인을 나타냅니다.
그러나 Dynamic SQL의 Foreach 문은 삽입 문에 가장 실제적인 것을 사용하며 일반적으로 조항에서 사용됩니다.
2. 고급 매핑
mybatis를 사용하는 경우 resulttype = com.blog.author 엔티티 클래스는 일반적으로 쿼리 결과를 수락하는 데 사용됩니다.
또는 resulttype = java.util.map을 사용하여 데이터베이스 열 이름을 키로, 레코드 값을 값으로 반환하십시오.
그러나 이번에는 ResultMap이 필요하므로 반환 값의 무료 조합이보다 복잡한 쿼리를 처리 할 수 있습니다.
또는 먼저 코드를 업로드하기 만하면됩니다.
SQL :
<SELECT ID = "getBlogs"resultmap = "blogs"parametertype = "map"> select A.Authorid, a.uthorname, b.blogid, b.blogname aworge a left join blog b on a. authorid = b. authorid 어디 a. authorID = #{authorID, jdbctype = integer} </select>mybatis 구성 :
<resultmap id = "blogs"type = "com.bloh.blog"> <id property = "authorId"column = "authorId"> <result property = "authorname"column = "authorname"> <collection property = "postslist"oftype = "com.post"> <id propertid "column ="bloging "="blogname ""blogname ""blogname ". 속성 = "blogname"/> </resultmap>
블로그 엔티티 클래스
Public Class Bolg {private Integer authorId; private String aureorname; private list <ost> postslist; // setter getter}포스트 엔티티 클래스
공개 클래스 포스트 {개인 정수 블로그; 개인 문자열 blogname; // setter getter}이를 통해 엔티티와의 복잡한 쿼리를 수락 할 수 있습니다.
다음은 각 속성의 기능입니다.
일반 mybatis 쿼리의 다른 속성 및 구성에 대한 자세한 내용은 설명하지 않습니다.
resultMap은 resultType 대신 사용되며 쿼리 결과에 의해 반환 된 형식을 나타냅니다.
resultmap의 ID에는 두 가지 주요 기능이 있습니다.
쿼리 성능을 향상시키는 유사한 인덱스
다른 결과를 구별합니다
따라서 ID를 생략하지 않는 것이 가장 좋습니다. 기본 키가없는 경우 레코드를 고유하게 구별 할 수있는 필드를 사용하십시오.
결과는 엔티티 클래스에 정의 된 변수 이름이며 열은 데이터베이스의 열 이름입니다.
컬렉션은 목록,지도 등의 모음입니다.
PostSlist는 블로그 엔티티 클래스에 정의 된 목록 변수 이름입니다.
oftype는 객체 목록의 객체의 엔티티 클래스입니다.
3. 자체 증가 ID를 얻으십시오.
다음 상황이있는 경우 데이터베이스 레코드를 삽입 한 후 삽입 레코드의 기본 키를 얻고 후속 비즈니스 코드를 사용하려고합니다.
그런 다음 Mybatis는이 상황에 대한 해당 지원을 제공합니다 (배치 삽입은 지원되지 않음).
MySQL은 원래 사운드 자체 증가 ID입니다. 자체 증가 기본 키의 필드 이름이 ID라고 가정하면
<insert id = "insert"usegenerateKeys = "true"keyProperty = "id"parameterType = "user"> in includ refid = "table_name" /> (name, age) 값 ( #{name}, #{ageer}) < /insert>일반 삽입 usegeneratedkeys = "true"보다 두 가지 속성이 있습니다. 이는 활성화 된 경우 자체 증가 ID를 반환 함을 의미합니다.
keyProperty = "id"는 반환 기본 키의 이름을 의미합니다.
그런 다음 비즈니스 코드에서 다음 문을 사용하여 수신 할 수 있습니다.
엔티티 클래스가 사용자라고 가정하십시오
user usernew = usermapper.insert (user);
usernew.getId // 삽입 후 자동 증가 된 ID입니다
실제로, MySQL의 자동 인익 기본 키는 Select Last_insert_id ()에 의해 얻을 수 있습니다.
그래서 그것을 작성하는 또 다른 방법이 있습니다.
<insert id = "insert"parametertype = "user"> <selectkey resulttype = "int"order = "after"keyProperty = "id"> recling </selectkey> 이름으로 삽입, agevalues ( #{name}, #{age}) </insert>를 선택하십시오.기본 키를 얻는 MySQL의 방법과는 정반대입니다. MySQL은 삽입 후 자체 성장 값을 할당하는 테이블이며, Oracle은 삽입 SQL을 수행하기 전에 자체 성장 값을 얻습니다. 삽입 SQL을 실행하기 전에 삽입 할 레코드에 기본 키 값을 지정해야합니다. 따라서 "이전"에서 자체 성장 시퀀스를 가져 와서 SelectKey에 의해 매개 변수 맵에 주입해야합니다. 자기 성장 또는 ID를 가정합니다
<insert id = "insert"useGenerateKeys = "true"keyProperty = "id"parametertype = "xxxx"> <selectKey resultType = "int"order = "이전"keyProperty = "id"> seq_table.nextVal에서 dual </selectkey> id, 이름, 이름, 이름, agevalues ( #{} #} #} ) </삽입>여기의 ID는 SelectKey가 얻은 자동 증가 ID입니다.
수신 방법은 MySQL과 동일합니다. 자동 증가 기본 키를 얻을 때 엔티티 리셉션을 사용하는 것이 가장 좋습니다.
위는 MyBatis Advanced Mapping, Dynamic SQL 및 귀하에게 소개 된 자체 수용된 1 차 키를 얻는 것입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!