Mybatis 고급 매핑, 동적 SQL 및 자체 증가 키 확인
1. 동적 SQL
여러분이 mybatis로 데이터베이스를 조작할 때 문제가 발생할 수 있다고 믿습니다. 만약에 지금 저희가 작가에 대한list authorList가 있다면,authorList에 있는 작가 정보에 따라 데이터베이스에서 해당 작가의 블로그 정보를 조회해야 합니다.그러면 가장 쉽게 떠오르는 방법은 authorList를 두루 돌아다니며 해당하는 정보 조회 데이터베이스를 얻는 것이다.
for(int i=0;I < authorList.size();i++) {
……
//
//select * from blog where author=#{author,jdbcType=VARCHAR}
}
생각해 보면 authorList의 길이가 N이라고 가정하면 우리는 N차 데이터베이스를 조회해야 한다. 만약에 이런 방법을 사용한다면 프로그램의 비용은 조회뿐만 아니라 데이터베이스 연결 탱크에서 연결 실례를 추출하고 데이터베이스 연결을 구축하며 데이터베이스 실례를 데이터베이스 연결 탱크에 반환해야 한다. 이 세 가지 동작을 합치면 모두 0.001초가 걸린다고 가정한다.그러면 훑어보는 방법으로 조회하는 데 0.001N초가 더 걸릴 것이다. 만약에 1000번의 조회가 필요하다면 1초의 시간이 더 걸릴 것이다. 프로그램원에게 이것은 참을 수 없는 것이다. 왜냐하면 이것은 순환 조회일 뿐이고 다른 업무 코드도 아니기 때문이다.그렇다면 더 좋은 방법은 없을까요? 정답은 확실합니다. 그 중 하나는 동적 SQL입니다.
코드 먼저 올리기:
<select id="dynamicForeachTest" resultType="com.blog.Blog" parameterType="java.util.List">
select * from blog where author in
<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
tem은 집합 중의 모든 요소가 교체될 때의 별명을 나타냅니다.index는 교체 과정에서 매번 교체되는 위치를 나타내는 이름을 지정합니다.
open은 이 문장이 무엇으로 시작하는지 나타냅니다.
separator는 매번 교체될 때 어떤 기호를 구분자로 하는지 나타냅니다.
close는 무엇으로 끝났는지 표시합니다. 이렇게 되돌아오는 값은 List
그러나 동적 SQL의 foreach 문장은 실제 insert 문장을 가장 많이 사용하고 보통 in 자문에서 사용된다.
2. 고급 매핑
mybatis를 사용할 때 일반적으로resultType=com을 사용합니다.blog.author 실체 클래스로 검색 결과를 받습니다.
또는 resultType =java를 사용합니다.util.맵은 데이터베이스 열 이름을 키로, 기록 값을value로 되돌려줍니다.
그러나 이번에는 resultMap을 사용해야 합니다. 더 복잡한 검색을 처리하기 위해 값을 자유롭게 조합할 수 있습니다.
코드를 먼저 올릴까요?
SQL:
<select id="getBlogs" resultMap=" blogs " parameterType="map">
Select a.authorID,
a.uthorName,
b.blogID,
b.blogName
from author a left join blog b on a. authorID=b. authorID where 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.bolg.Post">
<id property="blogID" column=" blogID"/>
<result property="blogName" column="blogName"/>
</collection>
</resultMap>
Blog 실체 클래스
Public class Bolg {
private Integer authorID;
private String authorName;
private List<Post> postsList;
//setter getter
}
포스트 엔티티 클래스
Public class Post {
private Integer blogID;
private String blogName;
//setter getter
}
이렇게 하면 하나의 실체로 복잡한 조회를 받아들일 수 있다.다음 속성의 역할은 다음과 같습니다.
다른 mybatis 조회의 속성과 설정은 자세히 말하지 않겠습니다.
resultMap은 resultType 대신 검색 결과가 되돌아오는 형식을 나타냅니다
resultMap의 id는 주로 두 가지 작용을 합니다.
색인과 유사하여 검색 성능 향상
다른 결과 구분
따라서 id는 생략하지 않는 것이 좋습니다. 메인 키가 없으면 유일하게 기록을 구분할 수 있는 필드로 대체하는 것이 좋습니다.
result 즉 실체 클래스에 정의된 변수 이름,column은 데이터베이스 열 이름입니다
컬렉션은 목록, 맵 등 집합입니다.
postsList는 블로그 실체 클래스에 정의된list 변수 이름입니다.
ofType은 객체 목록에 있는 객체의 엔티티 클래스입니다.
3. 추가 ID 획득:
만약 다음과 같은 상황이 있다면, 데이터베이스 기록을 삽입한 후, 기록을 삽입하는 메인 키를 얻으려면 뒤의 업무 코드로
그러면 mybatis는 이러한 상황에 대해 상응하는 지원을 제공합니다 (대량 삽입은 지원되지 않습니다).
MySQL은 어쿠스틱 자체 증가 ID입니다.사용자 키 증가의 필드 이름이 ID인 경우
<insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="User">
insert into <include refid="TABLE_NAME" /> ( NAME, AGE )
values ( #{name}, #{age} )
</insert>
일반 삽입보다 두 개의 속성이 더 많습니다useGeneratedKeys = "true"는 자증 ID를 반환합니다.keyProperty='id'는 주 키의 이름을 되돌려줍니다.
그러면 비즈니스 코드에서 다음 문장으로 받을 수 있습니다.
엔티티 클래스가 User인 경우
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">
SELECT LAST_INSERT_ID() AS id
</selectKey>
insert into name,age
values ( #{name}, #{age} )
</insert>
mysql의 키 가져오기 방식과 정반대입니다. mysql은 insert가 실행된 후 테이블에서 증가된 값을 분배하고,oracle은 증가된 값을 얻은 후에 기록 삽입 작업을 합니다. insertsql를 실행하기 전에 삽입할 기록에 키 값을 지정해야 하기 때문에 "BEFORE"때 증가된 서열을 가져와서selectKey 방식으로 삽입 맵에 주입하면 됩니다.가령 자성장 아니면 id
<insert id=" insert " useGeneratedKeys="true" keyProperty="id" parameterType="xxxx" >
<selectKey resultType="int" order="BEFORE" keyProperty="id">
SELECT SEQ_TABLE.NEXTVAL FROM dual
</selectKey>
INSERT INTO id,name,age
VALUES
(#{id} #{name}, #{age} )
</insert>
여기 id는 selectKey에서 얻은 자증 id입니다.수신 방식은 mysql와 마찬가지로 자체 증가 키를 얻을 때 실체 수신을 사용하는 것이 좋습니다.
위에서 말한 것은 편집자가 여러분께 소개한 Mybatis 고급 맵, 동적 SQL 및 셀프 키보드를 획득하는 것입니다. 여러분께 도움이 되었으면 합니다. 만약에 궁금한 것이 있으면 저에게 메시지를 남겨 주십시오. 편집자는 제때에 여러분에게 회답할 것입니다.여기에서도 저희 사이트에 대한 지지에 감사드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL/마이바티스 | 동적 쿼리 사용A라는 서비스에 해당하는 테이블을 조인하고 조회하는 데 사용됩니다. 나중에 공통화를 위해 B 및 C 서비스도 추가됩니다. A, B, C 서비스는 모두 단일 쿼리에서 작동할 수 있도록 공통화되어야 합니다. 테이블에 각...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.