Mybatis 에서 흔히 볼 수 있 는 주해 에는 어떤 것들 이 있 습 니까(총괄)

9492 단어 Mybatis주해
현재 주해 가 매우 유행 하고 있 습 니 다.예전 에는 장편 코드 였 는데 지금 은 기본적으로 하나의 주해 로 해결 할 수 있 습 니 다.
그럼Mybatis에는 또 어떤 주해 가 있 습 니까?
5e918565fd0ca1740e9e14337ddf83b3.png Mybatis중의 주 해 는 기본적으로org.apache.ibatis.annotations목록 아래 에 있다.
4e258b99972668d3048d7ccfd3030991.png  
@MapperScan
이 주 해 는 논란 이 있 지만 부인 할 수 없 는 것 은 이 주해 가 확실히Mybatis의 주해 이 고 스프링 을 통합 하기 위해 쓴 주해 라 는 것 이다.이 주 해 는 주로 가방 디 렉 터 리 에 있 는 Mapper 를 스 캔 하여 Mapper 인터페이스 류 를 Spring 에 맡 겨 관리 하 는 것 이다.

org.mybatis.spring.annotation.MapperScan
사용 방식

@SpringBootApplication
@MapperScan("com.tian.mybatis.mapper")
public class Application {
}
사실 이름 에서 알 수 있 듯 이 스 캔 용 Mapper 입 니 다.
스 캔 패키지 경 로 는 하나 이상 일 수도 있 고 경로 에서*를 어댑터 로 사용 하여 패키지 이름 을 일치 시 킬 수도 있 습 니 다.

@SpringBootApplication
@MapperScan("com.tian.*.mapper")
public class Application {
}
@SpringBootApplication
@MapperScan({"com.tian.mybatis.mapper","com.tian.mybatis.mapper1"})
public class Application {
}
유연성 이 상당히 높 아서 실제 프로젝트 에서 스 캔 되 고 싶 은 가방 경 로 를 지정 할 수 있 습 니 다.
@Mapper
이 주해 의 목적 은 mapper 맵 파일UserMapper.xml을 쓰 지 않 기 위해 서 입 니 다.xml 의 번 거 로 움 을 크게 간소화 할 수 있 습 니 다.이 주 해 는 Mybatis 프레임 워 크 에서 정 의 된 데이터 계층 인 터 페 이 스 를 설명 하 는 주해 입 니 다.주 해 는 흔히 설명 적 인 역할 을 합 니 다.Spring 프레임 워 크 에 이 인터페이스의 실현 류 는 Mybatis 가 만 들 고 실제 대상 을 spring 용기 에 저장 하 는 것 을 알려 줍 니 다.
사용 방식

@Mapper
public interface UserMapper { 
  User selectById(Integer id); 
}
@Insert
기록 을 삽입 할 때 메 인 키 는 어떻게 생 성 합 니까?이에 대해 기본적으로 세 가지 방안 이 있 는데 그것 이 바로 수 동 지정(응용 층),자체 증가 키(데이터 층 단일 표),선택 키(데이터 층 다 중 표)이다.
xml 파일 의<insert>태그 에 대응 합 니 다.
응용 층 에서 홈 키 를 수 동 으로 지정 합 니 다.
수 동 으로 지정 한 방식 은 메 인 키 를 구별 하지 않 습 니 다.삽입 하기 전에 응용 층 에서 대상 을 만 들 때 메 인 키 에 값 을 주 고 삽입 할 때 일반 필드 와 다 를 바 없습니다.

/**
*     ,       
*/
@Insert("INSERT INTO t_user (id, username, passwd) VALUES (#{id}, #{username}, #{passwd})")
int addUserAssignKey(User user);
위의 이 예 에서 my batis 는 도대체 어떤 필드 가 메 인 키 인지 모 릅 니 다.id 는 메 인 키 필드 이지 만 구별 되 지 않 습 니 다.
"주의"
\#{username}이 쓰 기 는 User 를 현재 컨 텍스트 로 하 는 것 입 니 다.사용자 의 속성 에 접근 할 때 속성 이름 을 직접 쓰 면 됩 니 다.
표 셀 프 증가 키
셀 프 메 인 키 는 XML 설정 의 메 인 키 에 대응 합 니 다.간단 한 예:

/**
*     ,        
*/
@Options(useGeneratedKeys = true, keyProperty = "id")
@Insert("INSERT INTO t_user (username, passwd) VALUES (#{username}, #{passwd})")
int addUserGeneratedKey(User user);
Option 을 사용 하여 XML 에 설 정 된 select 탭 의 속성 에 대응 합 니 다.userGeneratordKeys 는 홈 키 를 추가 하고 key Property 는 홈 키 필드 의 필드 이름 을 지정 하 는 데 사 용 됩 니 다.홈 키 는 데이터베이스 밑 에 있 는 자체 증가 기능 을 사용 합 니 다.
홈 키 선택
메 인 키 를 선택 하여 데이터 층 에서 값 을 만 들 고 이 값 을 메 인 키 의 값 으로 합 니 다.

/**
 *     ,     
 */
@Insert("INSERT INTO t_user (username, passwd) VALUES (#{username}, #{passwd})")
@SelectKey(statement = "SELECT UNIX_TIMESTAMP(NOW())", keyColumn = "id", keyProperty = "id", resultType = Long.class, before = true)
int addUserSelectKey(User user);
@Delete
삭제 할 때 문장 조건 을@Delete 주해 의 value 에 쓰 면 됩 니 다.int 형식 으로 돌아 가 는 것 은 삭 제 된 기록 수 입 니 다.xml 파일 의<delete>태그 에 대응 합 니 다.

/**
 *      
 */
@Delete("DELETE FROM t_user WHERE id=#{id}")
int delete(Long id);
@Update
수정 할 때 삭제 와 마찬가지 로SQL문 구 를@Update 의 value 에 쓰 면 됩 니 다.int 형식 으로 수 정 된 기록 줄 수 를 되 돌려 줍 니 다.
xml 파일 의<update>태그 에 대응 합 니 다.

/**
 *      
 */
@Update("UPDATE t_user SET username=#{username}, passwd=#{passwd} WHERE id=#{id}")
int update(User user);
@Select
검색 할 때 약간 복잡 합 니 다.검색 은 찾 아 낸 필드 를 대상 에 설정 하 는 방법 과 관련 되 기 때문에 xml 파일 의<select>태그 에 대응 합 니 다.
보통 세 가지 방법 이 있다.
SQL 구문 에 수 동 으로 별명 을 지정 하여 일치 합 니 다.
SQL 문 구 를 쓸 때 수 동 으로 각 필드 에 별명 을 지정 하여 대상 의 속성 과 일치 하도록 합 니 다.표 필드 이름과 대상 속성 이름 의 차이 가 매우 불규칙 하고 표 필드 가 많 지 않 은 경우 에 적 용 됩 니 다.

/**
 *   ID  ,       
 */
@Select("SELECT id, username, passwd, birth_day AS birthDay FROM t_user WHERE id=#{id}")
User loadByIdHandAlias(Long id);
my batis 의 자동 밑줄 낙타 봉 전환 사용 하기
my batis 는 mapUnderscore ToCamelCase 라 는 옵션 이 있 습 니 다.표 의 필드 이름 이 대상 의 속성 이름과 같 을 때 밑줄 과 낙타 봉 쓰기 의 차이 만 있 을 때 적 용 됩 니 다.
mapUnderscore ToCamelCase 를 설정 한 후 my batis 는 ResultSet 에서 찾 아 낸 데 이 터 를 대상 으로 설정 할 때 밑줄 을 낙타 봉 으로 변환 한 다음 앞 에 set 를 연결 하여 속성 을 설정 하려 고 합 니 다.
오픈 변환:
70943cdbb95f3ac3f19fc71c43010a86.png
그리고 조회

/**
 *   ID  ,         
 */
@Select("SELECT * FROM t_user WHERE id=#{id}")
User loadByIdAutoAlias(Long id);
인쇄 결과 보기,birthday 속성 이 대상 에 채 워 졌 습 니 다:
e35c24ba10367397879f3ff38d702193.png  
ResultMap 사용
표 의 필드 이름과 대상 의 속성 명 에 큰 공통점 이 없고 표 의 필드 가 많은 경우 ResultMap 을 사용 하여 적합 하 게 해 야 합 니 다.

/**
 *   ResultMap 
 */
@Results(id = "userMap", value = {
    //                            
    @Result(id=true, column = "id", property = "id"),
    @Result(column = "username", property = "username"),
    @Result(column = "passwd", property = "passwd"),
    @Result(column = "birth_day", property = "birthDay")
})
@Select("SELECT * FROM t_user WHERE id=#{id}")
User loadByIdResultMap(Long id);
@Results 는 XML 의 ResultMap 에 대응 하 는 동시에 id 를 지정 할 수 있 습 니 다.다른 곳 에 서 는 이 id 를 사용 하여 참조 할 수 있 습 니 다.예 를 들 어 위의 Results 를 참조 하 십시오.

/**
 *      Result 
 */
@ResultMap("userMap")
@Select("SELECT * FROM t_user WHERE id=#{id}")
User loadByIdResultMapReference(Long id);
@ResultMap 을 사용 하여 이미 존재 하 는 ResultMap 을 참조 합 니 다.이 ResultMap 은 자바 에서@Results 주 해 를 사용 하여 정의 할 수도 있 고 XML 에서 resultMap 태그 로 정의 할 수도 있 습 니 다.
첨삭 하고 수정 하 며 주해 총 결 을 조사 하 다.
865515ac8c7d87003f155fdc99d2d321.png  
기타 주해
@Results:결과 맵 의 목록 은 속성 이나 필드 에 어떻게 비 치 는 지 에 대한 자세 한 정 보 를 포함 합 니 다.속성:value,id.value 속성 은 Result 주해 의 배열 입 니 다.xml 에 있 는<resultMap>태그 에 대응 합 니 다.
@Result:열 과 속성 또는 필드 사이 의 단독 결과 맵 입 니 다.속성:id,column,property,javaType,jdbc Type,type Handler,one,many.id 속성 은 불 값 으로 비교(XML 맵 과 유사)에 사용 되 어야 할 속성 을 표시 합 니 다.one 속성 은 단독 적 인 관계 로<association>와 비슷 하 며,many 속성 은 집합 에 있어 서<collection>와 비슷 하 다.이름 이 충돌 하지 않도록 이름 을 짓 는 다.<resultMap>와 유사 한 하위 태그<result>``<id>.
@One:복잡 한 유형의 단독 속성 값 맵.속성:select,이미 매 핑 된 구문(즉 매 핑 기 방법)의 완전 한정 명 입 니 다.적당 한 유형의 인 스 턴 스 를 불 러 올 수 있 습 니 다.메모:주석 API 에 연합 맵 은 지원 되 지 않 습 니 다.자바 주해 의 제한 때문에 반복 적 으로 인용 할 수 없습니다.<association>태그 와 유사 합 니 다.
@many:@One 과 유사 하고 한 쌍 이 많은 관계,유사<collection>@Param:매개 변수 태그 입 니 다.Mapper 의 방법 서명 에 표 시 된 매개 변 수 는 매개 변수 이름 을 지정 한 다음 에 주석 이나 xml 에 있 는 SQL 에서 사용자 정의 매개 변수 이름 을 사용 할 수 있 습 니 다.
@SelectKey:최신 삽입 id 를 가 져 옵 니 다.
@Cache Namespace:주어진 네 임 스페이스(예 를 들 어 클래스)에 캐 시 를 설정 합 니 다.xml 에 대응 하 는<cache>.
@Cache NamespaceRef:다른 네 임 스페이스 캐 시 를 참조 하여 사용 합 니 다.속성:value,이름 공간의 문자열 값(즉 클래스 의 완전 한정 이름)이 어야 합 니 다.xml 에 있 는<cacheRef>태그 에 대응 합 니 다.
@ConstructorArgs:한 조 의 결 과 를 수집 하여 약탈 대상 에 게 전달 하 는 구조 방법 입 니 다.속성:value,형식 매개 변수의 배열 입 니 다.
@Arg:단독 구조 방법 매개 변 수 는 ConstructorArgs 집합의 일부분 입 니 다.속성:id,column,javaType,type:Handler.id 속성 은 불 값 으로 비교 에 사용 되 는 속성 을 표시 합 니 다.XML 요소 와 비슷 합 니 다.xml 에 있 는<arg>태그 에 대응 합 니 다.
@Case:단독 인 스 턴 스 의 값 과 이에 대응 하 는 맵 입 니 다.속성:value,type,results.Results 속성 은 결과 배열 이기 때문에 이 주 해 는 실제 ResultMap 과 비슷 하 며 아래 Results 주해 에서 지정 합 니 다.xml 에 있 는 태그<case>에 대응 합 니 다.
Mybatis 는 대상 과 탭 에 대한 주석 을 자주 사용 합 니 다.
c7ff276e375ce7513baf70e390cb91e1.png  
총결산
mybatis 초기 설정 정 보 는 XML 을 기반 으로 하고 매 핑 문장(SQL)도 XML 에 정 의 됩 니 다.MyBatis 3 에 도착 하면 주 해 를 기반 으로 한 새로운 설정 을 제공 합 니 다.my batis 가 제공 하 는 주해 가 많 습 니 다.필 자 는 분 류 를 했 습 니 다.
  • "첨삭 검사:"@Insert,@Update,@Delete,@Select,@MapKey,@Options,@SelelctKey,@Param,@InsertProvider,@UpdateProvider,@DeleteProvider,@SelectProvider
  • "결과 집합 맵:"@Result,@ResultMap,@ResultType,@ConstructorArgs,@Arg,@One,@Many,@TypeDiscriminator,@Case
  • "캐 시:"@CacheNamespace,@Property,@CacheNamespaceRef,@Flush
  • 대부분의 주 해 는 xml 맵 파일 에 요소 가 대응 하지만 모든 것 이 아 닙 니 다.또한 mybatis-spring 에서@Mapper 주해 와@MapperScan 주 해 를 제공 하여 spring 과 통합 하 는 데 사용 합 니 다.
    이 쯤 에서 Mybatis 에서 흔히 볼 수 있 는 주해 에 관 한 어떤 글 이 있 는 지 소개 해 드 리 겠 습 니 다.더 많은 관련 Mybatis 에서 흔히 볼 수 있 는 주해 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기