소개
- Mybatis 는 XML 매핑으로 진행하는 게 일반적이긴하다.
- 하지만 어노테이션만으로도 XML 없이 쿼리를 정의할 수 있다.
다만 , 동적쿼리는.. xml 파일을 별도로 정의해주긴해야한다.
어노테이션 사용
@Mapper
@Repository
public interface CartMapper {
// ...
@Results(value = {
// ...
})
@Select("SELECT ...")
Cart selectCartByUserId(@Param("userId") String userId);
}
- 쿼리 정의
@Select
어노테이션으로 SQL 쿼리를 정의하고,@Param
으로 쿼리 파라미터를 정의함
- 결과 매핑
@Results
와@Result
어노테이션을 사용하여 쿼리 결과를 도메인 객체에 매핑합니다.
- 관계 매핑
@One
어노테이션을 사용하여 1:1 관계를 매핑하고,javaType
속성을 사용하여 반환 타입을 지정합니다.@Results(value = { @Result(id = true, property = "id", column = "ID"), @Result(property = "userId", column = "USER_ID"), @Result(property = "productId", column = "PRODUCT_ID"), @Result(property = "quantity", column = "QUANTITY"), @Result(property = "createdDate", column = "CREATED_DATE"), @Result(property = "updatedDate", column = "UPDATED_DATE"), @Result(property = "product", column = "PRODUCT_ID", javaType = Product.class, one = @One(select = "com.psj.itembrowser.product.mapper.ProductMapper.selectProductById" ,fetchType = FetchType.LAZY)) })
@Mapper
@Repository
public interface ProductMapper {
@Results(id = "productResutMap", value = {
@Result(id = true, property = "id", column = "ID"),
@Result(property = "name", column = "NAME"),
@Result(property = "category", column = "CATEGORY"),
@Result(property = "detail", column = "DETAIL"),
@Result(property = "status", column = "STATUS"),
@Result(property = "sellerId", column = "SELLER_ID"),
@Result(property = "sellStartDatetime", column = "SELL_START_DATETIME"),
@Result(property = "sellEndDatetime", column = "SELL_END_DATETIME"),
@Result(property = "displayName", column = "DISPLAY_NAME"),
@Result(property = "unitPrice", column = "UNIT_PRICE"),
@Result(property = "brand", column = "BRAND"),
@Result(property = "deliveryFeeType", column = "DELIVERY_FEE_TYPE"),
@Result(property = "deliveryMethod", column = "DELIVERY_METHOD"),
@Result(property = "deliveryDefaultFee", column = "DELIVERY_DEFAULT_FEE"),
@Result(property = "freeShipOverAmount", column = "FREE_SHIP_OVER_AMOUNT"),
@Result(property = "returnCenterCode", column = "RETURN_CENTER_CODE"),
@Result(property = "createdDate", column = "CREATED_DATE"),
@Result(property = "updatedDate", column = "UPDATED_DATE")
})
@Select("SELECT ID, NAME, CATEGORY, DETAIL, STATUS, SELLER_ID, SELL_START_DATETIME, SELL_END_DATETIME, " +
"DISPLAY_NAME, UNIT_PRICE, BRAND, DELIVERY_FEE_TYPE, DELIVERY_METHOD, DELIVERY_DEFAULT_FEE, FREE_SHIP_OVER_AMOUNT, RETURN_CENTER_CODE, CREATED_DATE, UPDATED_DATE " +
"FROM PRODUCT " +
"WHERE ID = #{productId} " +
"LIMIT 1")
Product selectProductById(@Param("productId") Long productId);
Uploaded by N2T
'자바 > 리팩토링' 카테고리의 다른 글
[리팩토링]출고 → 배송 → 도착 순서 보장을 어떻게 할 수 있을까? (0) | 2023.10.08 |
---|---|
[리팩토링]Spring boot 2.7 에서 schema.sql 한글 깨짐 (0) | 2023.10.07 |
[리팩토링] 장바구니 기능의 경우 SOFT DELETE 와 HARD DELETE 중에 뭘 사용해야할까? (0) | 2023.10.07 |
[리팩토링]__**Spring Boot에서 여러 SQL 스크립트 순차적 실행하기**__ (0) | 2023.10.02 |
[리팩토링]Mysql 5.1 과 5.6 이상에서의 timestamp 기본 값 설정 관련 문제 (0) | 2023.10.01 |