qq_33795843
mendop
采纳率100%
2018-01-18 06:33 阅读 5.0k
已采纳

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

5

添加新对想象的时候 使用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:

图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

12条回答 默认 最新

  • 已采纳
    sinat_34344123 星尘的一个朋友 2018-01-18 11:18

    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...
    }
    
    点赞 评论 复制链接分享
  • weixin_41193109 weixin_41193109 2018-01-18 06:43

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

    点赞 2 评论 复制链接分享
  • u013477499 gzc0007 2018-01-18 07:04

    对象问题· 要用getId 才行

    点赞 1 评论 复制链接分享
  • vanbaston0 VanBaston 2018-02-09 06:34
    1. useGeneratedKeys="true"你设置了这个,就必须使用selectKey标签,这就是你报异常的原因
    2. 你要保存后id保存到对象中,你需要在你的insert语句中把id也写进去,否则你的对象是不会有id的值的。
    点赞 1 评论 复制链接分享
  • Vipfgyy libayi 2018-01-18 06:40

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

    点赞 评论 复制链接分享
  • qq_34834570 qq_34834570 2018-01-18 07:18

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

    点赞 评论 复制链接分享
  • pcengineer001 pcengineer001 2018-01-18 08:37

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

    点赞 评论 复制链接分享
  • SilenceSnake SilenceSnake 2018-01-18 08:47

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

    SELECT LAST_INSERT_ID()

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

    点赞 评论 复制链接分享
  • qq_36559067 qq_36559067 2018-01-18 08:55

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

    SELECT LAST_INSERT_ID()

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

    点赞 评论 复制链接分享
  • dllsndy dllsndy 2018-01-18 09:38

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

    点赞 评论 复制链接分享
  • qq_38218722 Martin别Null了 2018-01-18 09:54

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

    点赞 评论 复制链接分享
  • sinat_34344123 星尘的一个朋友 2018-01-18 11:19

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

    点赞 评论 复制链接分享

相关推荐