Trên thực tế, bạn hoàn toàn có thể làm được điều đó với @Options
chú thích (miễn là bạn đang sử dụng auto_increment hoặc thứ gì đó tương tự trong cơ sở dữ liệu của mình):
@Insert("insert into table3 (id, name) values(null, #{name})")
@Options(useGeneratedKeys=true, keyProperty="idName")
int insertTable3(SomeBean myBean);
Lưu ý rằng keyProperty="idName"
một phần là không cần thiết nếu thuộc tính khóa trong SomeBean được đặt tên là "id". Ngoài ra còn có một keyColumn
thuộc tính khả dụng, đối với những trường hợp hiếm hoi khi MyBatis không thể tự mình tìm thấy cột khóa chính. Cũng xin lưu ý rằng bằng cách sử dụng @Options
, bạn đang gửi phương thức của mình tới một số tham số mặc định; điều quan trọng là phải tham khảo tài liệu (được liên kết bên dưới - trang 60 trong phiên bản hiện tại)!
(Câu trả lời cũ) (Khá gần đây) @SelectKey
chú thích có thể được sử dụng để truy xuất khóa phức tạp hơn (trình tự, hàm nhận dạng () ...). Đây là nội dung của Hướng dẫn sử dụng MyBatis 3
(pdf) cung cấp làm ví dụ:
@Insert("insert into table3 (id, name) values(#{nameId}, #{name})")
@SelectKey(statement="call next value for TestSequence", keyProperty="nameId", before=true, resultType=int.class)
int insertTable3(Name name);
@Insert("insert into table2 (name) values(#{name})")
@SelectKey(statement="call identity()", keyProperty="nameId", before=false, resultType=int.class)
int insertTable2(Name name);