2011-08-26 1 views
3

우리는 현재 내가 삽입 한 모든 레코드에 대해 uuid를 전달하는 데이터베이스에 트리거를 가지고 있습니다. mybatis로 레코드를 삽입 할 때 삽입 된 행 수 대신 해당 uuid를 다시 가져 오려고합니다. id/uuid as를 바이너리로 저장할 때 MyBatis를 사용하여 삽입 한 후 키를 반환하는 방법은 무엇입니까?

이전 포스트에서 나는

useGeneratedKeys="true" keyProperty="id" 

와 함께 할 수 있다는 것을 읽을하지만 난 다시 삽입에서 비 바이너리 UUID를 좀하고 싶습니다 그래서 우리는 바이너리 우리의 UUID를 저장합니다. 우리가 물건을 삽입 할 때 우리는 'uuid2bin'과 'bin2uuid'와 같은 함수를 사용하므로 데이터베이스 (MySQL)에서 새로 생성 된 uuid를 검색하기 위해 이와 같은 함수를 사용하기를 희망했습니다.

내가 새로 생성 된 uuid를 다시 얻을 수있는 방법에 대한 제안 사항 ??

답변

1

두 가지 옵션이 있습니다. 1) MyBatis TypeHandler을 사용하여 Java에서 변환을 수행하거나 2) 서식이 지정된 UUID를 반환하는 저장 프로 시저로 삽입을 래핑하십시오.

# 1과 관련된 문제는 DB에서 응용 프로그램으로로드를 이동하는 것이므로 MySql이 원격 인 경우 성능에 영향을 줄 수 있습니다.

# 2 인 경우 MyBatis에 <select>을 사용해야합니다. 그러나 실제로이 작업이 실제로 수행되는지 확인해야합니다. 또한 MyBatis 캐싱을 사용하는 경우 <select>flushCache=true을 설정해야합니다. 당신이 객체가 아니라 트리거가 삽입 한 후 열을 생성하여이 코드가 인터프리터 함수의 결과를 설정합니다 해시 맵을 전송하는 경우

0

은 내가 <insert> 태그

<insert> 
    <selectKey keyProperty="pk" resultType="Type" order="AFTER"> 
    select myDBFunction((select triggerGeneratedColumnInBinary from myTable where pk = triggerLogicToRetrieveLastGenerated(...))); 
    </selectKey> 
    ...procedure call or insert... 
</insert> 

내부의 <selectKey> 태그를 사용합니다. 이 메서드는 여전히 행 수를 반환하지만 개체의 키가 그대로 유지됩니다. 이 (MySQL의 또는 SQL Server와 같은 RDBMS의 예를 들어, 자동 증가 필드) 데이터베이스에서 내부적으로 생성 키를 검색하기 위해 JDBC getGeneratedKeys 방법을 사용의 MyBatis를 알려주기 때문에

System.out.println(myObject.getPk()); //0 
int rows = myMapper.insertMyClass(myObject); // sets the pk 
System.out.println(myObject.getPK()); //324 

useGeneratedKeys은 도움이되지 않습니다.

관련 문제