Spring Security 를 쓴다는 가정하에서 글을 작성합니다.
먼저 java 로 static 한 메소드 하나를 생성합니다.
package my.mybatis.util
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
public class MyBatisLoginUserInfo {
public static String getId() {
Object principal
= SecurityContextHolder.getContext().getAuthentication().getPrincipal();
UserDetails userDetails = (UserDetails) principal;
return userDetails.getUsername();
}
}
이후에 <bind> 태그에서 해당 메소드를 호출 및 바인딩해주면 됩니다.
<update id="update" parameterType="my.dto.TestDTO">
<bind name="updusrId" value='@my.mybatis.util.MyBatisLoginUserInfo@getId()'/>
update gnp_pts.data_map
set
name = #{name}
, updusr_id = #{updusrId} -- 여기서 사용하게 됩니다!
, updt_dt = now()
where id = #{id}
</update>
value 속성에서 메소드 호출하고...name 속성은 메소드 호출 반환값을 바인딩할 파라미터 명을 지정합니다.name 속성으로 지정한 파라미터 명을 #{} 에서 사용하면 끝입니다!참고:
<bind>태그의name속성과 똑같은 명칭의 필드가TestDTO에
있든 없든 상관없이 동작합니다 😎