MyBatis insert后返回自增字段的值


如下情況適用支持自增的DB,如MySQL。其他情況參見:MyBatis魔法堂:Insert操作詳解(返回主鍵、批量插入)

1.model

public class UserInfo {
    private int id;//主鍵自增ID
    private String userName;//姓名
    private String account;//登陸賬號
    private String password;//密碼
}

  

2.UserInfoMapper.java

public interface UserInfoMapper {
     int addUser(UserInfo userInfo);
}

  

3.UserInfoMapper.xml

<insert id="addUser" parameterType="com.xxx.model.UserInfo" useGeneratedKeys="true" keyProperty="id">
	INSERT INTO
	user_info(user_name, account, password)
	values
	(#{userName},#{account},#{password})
</insert>

  

這樣,在插入后,MySQL自增的id就會設置到原來的userInfo對象里。

其中 useGeneratedKeys="true" keyProperty="id" 是起作用的關鍵語句。

4.QA

4.1 報錯:org.apache.ibatis.binding.BindingException: Parameter 'id' not found

完整錯誤如下:

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [userInfo, param1]

這是因為在addUser()的對象參數前加@Param("userInfo"),而在mapper.xml里寫成

<insert id="addUser" parameterType="com.xxx.model.UserInfo" useGeneratedKeys="true" keyProperty="id">
	INSERT INTO
	user_info(user_name,, account, password)
	values
	(#{userinfo.userName},#{userInfo.account},#{userInfo.password})
</insert>

這種情況在不返回自增值是沒有問題的,但一旦設置了useGeneratedKeys就報錯。所以養成良好的習慣,沒事少加@Param!!!

 

 

end


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM