mybatis做insert操作的時候 怎麼才能返回插入的那條資料的id?,mybatisinsert
1、useGeneratedKeys=”true” 可以擷取自增長的ID 只支援具有自增長方式的那種資料庫(mysql, mssql 等 但 oracle 就不支援了 ) 所以可以使用selectKey來擷取
eg:
<insert id="xxx" parameterType="yyy" useGeneratedKeys="true"> insert into table(...) values (...) <selectKey resultType="long" order="AFTER" keyProperty="id"> SELECT LAST_INSERT_ID() AS id </selectKey> </insert>
2、對於不支援自動產生主鍵(如Oracle),可以採用以下方式
<insert id="xxx" parameterType="yyy"> <selectKey keyProperty="id" resultType="long" order="BEFORE"> select my_seq.nextval from dual </selectKey> ... </insert>
對於第一種更好的解決辦法:
方法:在mapper中指定keyProperty屬性,樣本如下:
<insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId" parameterType="com.chenzhou.mybatis.User"> insert into user(userName,password,comment) values(#{userName},#{password},#{comment}) </insert>
如上所示,我們在insert中指定了keyProperty=”userId”,其中userId代表插入的User對象的主鍵屬性。
User.javaJava代碼 收藏代碼public class User { private int userId; private String userName; private String password; private String comment; //setter and getter } UserDao.javaJava代碼 收藏代碼public interface UserDao { public int insertAndGetId(User user); } 測試:Java代碼 收藏代碼User user = new User(); user.setUserName("chenzhou"); user.setPassword("xxxx"); user.setComment("測試插入資料返回主鍵功能"); System.out.println("插入前主鍵為:"+user.getUserId()); userDao.insertAndGetId(user);//插入操作 System.out.println("插入後主鍵為:"+user.getUserId()); 輸出:Shell代碼 收藏代碼插入前主鍵為:0 插入後主鍵為:15 如上所示,剛剛插入的記錄主鍵id為15
轉載自:http://blog.csdn.net/rapier512/article/details/51198684
查看評論