데이터베이스 중에서 MySQL 처럼 PK값을 자동생성해서 사용하는 DB가 있습니다.
주로 Insert를 했을 떄 자동생성되어 1,2,3,4,5,6 이런식으로 값이 생성되는데
insert를 했을 경우 해당 데이터를 즉시 조회하면 정확한 pk값을 추출해 낼 수 없습니다.
pk값을 추려내려는 방법은 구글링을 해보면 다양합니다.
max() 를 사용하는 방법이나 last_insert_id() 를 사용하는 방법 등등이 있는데
오늘은 MyBatis를 사용해서 공부하는 도중에 발견한 새로운 방법을 써보려고 합니다.
방법은 2가지로 Boot에서 MyBatis를 사용할 때 Annotation으로 쓰는방식과
Spring에서 XML 방식으로 나눠서 보여드리겠습니다.
// Boot ( Annotation )
@Insert("insert into company ( company_name, company_address)
values ( #{company.name}, #{company.address} ) ")
@Options(useGeneratedKeys = true, keyProperty = "id")
int insert(@Param("company") Company company);
// Spring (XML)
<insert id="insert" parameterType="com.awse.domain.CompanyVO" useGeneratedKeys="true" keyProperty="id">
insert into company ( company_name, company_address ) values ( #{name} , #{address} )
</insert>
Boot 의 경우 XML방식을 사용할 수 없기떄문에(?) Annotation으로 선언해서 사용하는데
@Options에 useGeneratedKeys 와 keyProperty의 value를 넣어서 사용하는 방식입니다.
XML방식의 경우 Mybatis 공식문서에서도 살펴볼수 있는 코드입니다.
위처럼 @Options이 아닌 <insert> 태그안에서 속성으로 사용할 수 있습니다.
// Controller
@PostMapping("")
public CompanyVO register(@RequestBody CompanyVO company) {
log.info(company);
companyMapper.insert(company);
log.info(company);
return company;
}
컨트롤러에서 해당 테스트를 할 경우 첫번쨰 로그에는 company의 데이터의 pk값이 0으로 나타나지만
insert 메서드를 호출한 이후 company의 데이터를 로그로 찍어볼 경우 해당 데이터에
pk값이 정상적으로 들어가는 것을 확인 할 수 있습니다.
'Back-End > Spring' 카테고리의 다른 글
Spring) 게시물 찜하기 기능 구현 - 데이터 전달 (1/2) (0) | 2021.03.30 |
---|---|
ajax 통신시 URI로 이메일 문자열 보낼시 dot(.) 이하문자삭제 문제 (0) | 2021.03.25 |
MyBatis로 DB 칼럼 과 Java Property mapping 방법( XML, Annotation) (0) | 2021.03.22 |
Security OAuth 초기 설정 및 간단 설명 (0) | 2021.03.11 |
(2) QuerydslRepositorySupport - Tuple 활용 (0) | 2021.03.09 |