mybatis ——insert 对象返回自增长id

添加新对想象的时候 使用selectKey的时候id反不会回来,不用selectKey就会报这个异常:
Caused by: 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 [user, param1]

代码如下===================

xml:

图片说明

dao:

图片说明

controller:

图片说明

User:

图片说明

mapper.xml 文件中执行的 insert sql
我们执行一个insert操作,参数是一个User对象

<insert id="insert" parameterType="com.test.User">
        insert into user(loginName,loginPwd) values(#{loginName},#{loginPwd});
</insert>

插入之后需要在方法中使用当前插入值的自增id时,只需要增加下面一句就可以


// 注意这里面的 keyProperty="userId" 是你java bean 中对应的id属性名,我这里用的是userId
<selectKey resultType="java.lang.String" order="AFTER" keyProperty="userId">
    SELECT LAST_INSERT_ID();
</selectKey>

<insert id="insert" parameterType="com.test.User">
        insert into user(loginName,loginPwd) values(#{loginName},#{loginPwd});
        <selectKey resultType="java.lang.String" order="AFTER" keyProperty="userId">
            SELECT LAST_INSERT_ID();
        </selectKey>
</insert>

User 类

public class User {

    /**
     * 用户id
     * /
    private String userId;
    /**
     * 用户登录名
     */
    private String loginName;
    /**
     * 登录密码
     * /
    private String loginPwd;
    ...
    set...
    get...
}

public User regist()
将dao接口返回值改为对象即可

插入数据传的是对象么?要是对象的话直接用这个对象调用getId方法就可以得到id了

对象问题· 要用getId 才行

你的这个xml里面没有写返回的配置吧 不过一般返回的数据会是返回插入数据库成功的条数,

入参类型已经定义是User自定义类型了,regist(@Param("user") User user) 直接写成 regist(User user) 不就好了

都回答的什么东西。
题主,在你的里面,insert into开始前加上下面的东西

SELECT LAST_INSERT_ID()

该方法会返回一个 String还是int类型的主键,自己试试吧。

都回答的什么东西。
题主,在你的里面,insert into开始前加上下面的东西

SELECT LAST_INSERT_ID()

该方法会返回一个 String还是int类型的主键,自己试试吧。

User里有 字段 id的 setter么? 这个err应该是set result时候的.
调用ID 用楼上两位说的 user.getId() 不要用返回值

传入的参数类型已经定义是User类型,regist(@Param("user") User user) 可以直接写成 regist(User user) 便可以了

我定义的userId是String类型的, 题主需要对照自己的修改一下

  1. useGeneratedKeys="true"你设置了这个,就必须使用selectKey标签,这就是你报异常的原因
  2. 你要保存后id保存到对象中,你需要在你的insert语句中把id也写进去,否则你的对象是不会有id的值的。