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:

图片说明

12个回答

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...
}

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

对象问题· 要用getId 才行

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

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

sym3348000
sym3348000
5 个月之前 回复

你的这个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() 不要用返回值

共12条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
mybatis返回插入数据的自增长id
今天测试反馈一个bug,现象是新注册的用户可以看到所有人的报告,老用户没问题,查看日志发现原来是新注册的用户的id为null,所以进行了全表有效数据查询。 但是表的主键不允许为空,怎么会出现新的注册用户id为null呢?原来是在service层代码直接将参数对象返回了,而xml没有做任何配置。具体如下: @Override public Registers create(Re
mybatis返回自增长id写法
&amp;lt;insert id=&quot;getInsertId&quot;&amp;gt;        &amp;lt;selectKey resultType=&quot;java.lang.Long&quot; keyProperty=&quot;id&quot; order=&quot;AFTER&quot;&amp;gt;             SELECT LAST_INSERT_ID() AS id        &amp;lt;/selectKey&amp;gt;        I
mybatis注解方式返回insert的id
以前用xml配置的方式久了,突然有一天公司有个项目用的是注解方式,网上找了很多无法满足我需求,于是....还是少废话,上代码吧 controller /**      * 插入并返回刚插入的记录的id例子,实际使用中下面的方法void可以改为返回i和object.getId,以便客户端判断是否插入成功并且返回新对象的id      */     @PostMappin
insert一条记录返回自增长id
建表 CREATE TABLE [dbo].[Test1](     [id] [int] IDENTITY(1,1) NOT NULL,     [name] [nvarchar](330) COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY] sql语句 insert  into  test1 (name) values ('1') sel...
mybatis获取自增长id
需求 mybatis在插入数据的同时获取自增长id的值以供接下来的业务使用; 代码 mapper public interface CustomizedConditionMapper { //插入数据并返回当前id int insertSelective(CustomizedConditionPO customizedConditionPO); } mapp...
mybatis获得自增长id
&amp;lt;selectKey resultType=&quot;Integer&quot; order=&quot;AFTER&quot; keyProperty=&quot;id&quot;&amp;gt; SELECT LAST_INSERT_ID() AS id &amp;lt;/selectKey&amp;gt;keyProperty是Java对象的属性名,而不是表格的字段名。把这个代码copy到xxx.xml就可以用了,如:dao层的ma...
MyBatis获取自增长ID
官方文档:http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html#insert_update_and_delete   在使用关系型数据库MySQL、SQL Server时,会有使用自增长主键的情况,为了获取到数据库内部自动生成的主键,可以使用useGeneratedKeys属性、&amp;lt;selectKey&amp;gt;标签的方式;而对于Oracle这...
Mybatis insert 批量插入,返回id集合错误
[color=#FF0000]求大神帮忙,不胜感激。[/color]rn要实现的功能是:rn批量插入数据,并返回idsrnrnssm项目,环境已搭好,其他没问题。rnjar:mybatis-3.4.1.jar + mybatis-spring-1.3.0.jar 都是最新的rnrnxml文件:rnrn insert into user_t rn (id,user_name, password, age)rn values rn rn (#id,jdbcType=INTEGER,#item.userName,jdbcType=VARCHAR, #item.password,jdbcType=VARCHAR,#item.age,jdbcType=INTEGER)rn rn rnrndao:rn List insertMulti(List list);//多行完整插入rnrnjunit:rn List list = new ArrayList();rn User user1 = new User("多条插入1", "1", 21);rn User user2 = new User("多条插入2", "2", 21);rn User user3 = new User("多条插入3", "3", 21);rn User user4 = new User("多条插入4", "4", 21);rn list.add(user1);rn list.add(user2);rn list.add(user3);rn list.add(user4);rn List insertMulti = userService.insertMulti(list);//省略了service层code,只是简单调用而已rnrnerror:rnorg.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [list, collection]rn at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:79)rn at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:447)rn at com.sun.proxy.$Proxy14.insert(Unknown Source)rn at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:279)rn at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:57)rn at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53)rn at com.sun.proxy.$Proxy15.insertMulti(Unknown Source)rn at com.wx.service.impl.UserServiceImpl.insertMulti(UserServiceImpl.java:70)rn at test.testJdbc.insert(testJdbc.java:97)rn at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)rn at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)rn at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)rn at java.lang.reflect.Method.invoke(Method.java:606)rn at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)rn at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)rn at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)rn at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)rn at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)rn at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)rn at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)rn at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)rn at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)rn at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)rn at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)rn at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)rn at org.junit.runners.ParentRunner.run(ParentRunner.java:309)rn at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)rn at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)rn at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)rn at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)rn at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)rn at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)rnCaused by: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [list, collection]rn at org.apache.ibatis.session.defaults.DefaultSqlSession$StrictMap.get(DefaultSqlSession.java:343)rn at org.apache.ibatis.reflection.wrapper.MapWrapper.get(MapWrapper.java:45)rn at org.apache.ibatis.reflection.MetaObject.getValue(MetaObject.java:122)rn at org.apache.ibatis.scripting.defaults.DefaultParameterHandler.setParameters(DefaultParameterHandler.java:79)rn at org.apache.ibatis.executor.statement.PreparedStatementHandler.parameterize(PreparedStatementHandler.java:93)rn at org.apache.ibatis.executor.statement.RoutingStatementHandler.parameterize(RoutingStatementHandler.java:64)rn at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:86)rn at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:49)rn at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)rn at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)rn at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:198)rn at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:185)rn at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)rn at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)rn at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)rn at java.lang.reflect.Method.invoke(Method.java:606)rn at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:434)rn ... 30 morernrnrn
Java mybatis insert语句返回插入数据ID
mybatis插入SQL语句返回该条SQL的ID 将下面两个属性添加到insert标签中 即可得到返回的SQL ID useGeneratedKeys="true" keyProperty="id" 例 insert into risk_client_gs (id,phone, create_time,update_time) values (#{id,jdbcTyp
mybaits java后台返回自增长的id
官方文档只这么说的:useGeneratedKeys该属性会告诉Mybatis使用JDBC的getGeneratedKeys方法来取出由数据(比如:像Mysql和Sql server这样数据库管理系统的自动递增字段)内部生成的主键。默认值:false。 select WO_ATTACHMENT_SEQ.NEXTVAL as attachId from DUAL
mybaties+mysql:插入数据,返回自增长的id
<insert id="insertAndReturnID" useGeneratedKeys="true" keyProperty="privilegeID" parameterType="Privilege"> <!-- 插入数据,并返回id --> insert into Privilege <trim prefix="(" suffix=")" suff
mybaties+oracle:插入数据,返回自增长的id
mybaties<insert id="insertAndReturnID" parameterType="Privilege"> <!-- parameterType="Privilege": 是传入参数的对象,后面返回的privilegeID就是它的属性 --> <!-- 插入数据,并返回privilegeID,该privilegeID的值给对象的属性privilegeID,并返回Pr
Mybatis 配置 返回自增长主键id
&amp;lt;insert id=&quot;insertXXX&quot; useGeneratedKeys=&quot;true&quot; keyProperty=&quot;id&quot; parameterType=&quot;com.lan.vote.model.User&quot;&amp;gt; //SQL语句 &amp;lt;/insert&amp;gt;  useGeneratedKeys:       取值范围:true|false             
insert返回插入的id
[code=&quot;java&quot;]public long insertFetchIdL(String sql) throws SQLException { Connection conn = getConnection(true, true); if (null != conn) { PreparedStatement prepareStatement = null; ...
Mybatis之insert返回主键
使用mybatis进行插入操作时,有时候我们插入完成后需要用到该记录的主键,那么先插入再查一次显然是不合理的,今天就记录一下mybatis使用insert语句自动返回主键值的办法; 首先声明一下返回主键是基于bean的,即insert的入参应该是一个bean,假设id字段为主键,则插入完成之后mybatis会自动给id字段赋值;其他情况 本次测试是在mysql下进行的,其他数据库可能会有差异;
mybatis插入数据后返回对象id
1.插入的为对象,成功插入后,会返回到指定的字段id中,@Options(useGeneratedKeys=true,keyColumn=&quot;id&quot;)。
mybatis中插入数据自动返回自增长id的配置
mybatis中在相应的mapper.xml的insert方法中加入配置参数,就能够在插入语句的时候自动返回自增长的id,如下代码段为后端执行的代码 int count = jzAskingAnswerMapper.insertreturnid(answer); if(count>0){ return new Result(ResultCode.C200.getCode(), Mes
只有一个自增长id的表如何insert?
tb1里只有一个字段id,而且是自增长的,rninsert 如何写?
insert插入数据怎么让id自增长
1.首先创建一个序列发生器SEQUENCE,例如名字为s_ag_resource_attr: -- Create sequence create sequence s_ag_resource_attr minvalue 1 maxvalue 9999999999999999 start with 1346 increment by 1 cache 20; 2.比如要更改表名为a
mybatis返回自增id
我在用mybatis返回自增id时一直返回1,好像是只返回了插入条数,没返回我需要的自增id。请帮我看下问题出在哪里?rn这是insert语句,数据库用的是mysqlrnrn insert into indentid (user_name,total_int_price,total_out_price,date) rn values(#user_name,#total_int_price,#total_out_price,#date)rn rn SELECT LAST_INSERT_ID() AS indentid_idrn rnrnDao接口rnpublic Integer insertIndentid(HashMap map);rnBizrnInteger indentid_id = sailDao.insertIndentid((HashMap)map);rnSystem.out.println(indentid_id);rn控制台输出信息rn[INFO]: class action.core.SailActionrn1rn返回值我试过int java.lang.Integer等等,但是都是返回1。问题出在哪里呢?rnrn[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/3.gif][/img]rn来大神帮我看一下。rnrn
mybatis返回自动生成的ID
1. &lt;insert id="" useGeneratedKeys="true" keyProperty="id" parameterType=""&gt; insert语句....... &lt;insert&gt; 2.&lt;insert id="" parameterType=""&gt; &lt;selectKey resultType ="java.lang.In...
mybatis 返回最大Id
mapper 中配置 useGeneratedKeys="true" keyProperty="id" 如 返回的Id自动赋值给传入的对象 如 int insertSelective(CpsActivityRewardDo record); 值就赋给了record
mybatis 返回 自动生成的id
Generated  keys  not  requested.  You need to specify Statement.RETURN_GENERATED_KEYS  to  Statement.executeUpdate()  or Connection.prepareStatement().     MyBatis + MySQL 如果 xml 文件中同时写了 keyColumn ...
mybatis 新增返回id
 &amp;lt;insert id=&quot;insert&quot; parameterType=&quot;com.top.nhm.domain.entity.DistributorCompany&quot; &amp;gt;     &amp;lt;selectKey resultType=&quot;java.lang.Integer&quot; order=&quot;AFTER&quot; keyProperty=&quot;id&quot;&amp;gt;      SELECT L
mybatis 插入数据 返回ID
插入一条语句 返回刚刚插入数据的ID 1. 支持 MySQL 和 sql server 数据库 这是一般经常使用的 插入语句 &amp;lt;insert id=&quot;insertUser&quot; parameterType=&quot;com.shr.model.User&quot; &amp;gt; insert into user (name,sex,age,idCard) values (...
MyBatis新增返回id
新增一条数据到数据库,并返回该数据的id 更多精彩 更多技术博客,请移步 asing1elife’s blog 实现方式 &amp;lt;insert id=&quot;saveSendMessage&quot; keyColumn=&quot;id&quot; keyProperty=&quot;id&quot; useGeneratedKeys=&quot;true&quot; parameterType=&quot;SendMessageDTO&quot;&amp;gt; ... &amp;
Mybatis新增返回id
&amp;lt;insert id=&quot;insert&quot; useGeneratedKeys=&quot;true&quot; keyProperty=&quot;id&quot; parameterType=&quot;com.yutian.read.operation.common.model.OperationBookList&quot; &amp;gt; insert into operation_book_list (id, name, introdu...
mysql insert 返回自增长主键问题
insert into t_se_push         (nettype,aid,exceptdownflag,tags,approvalflag,remark,type,`status`,ctime,utime,cuser,uuser,enabledtime)         values         (#{nettype},#{aid},#{exceptdownflag},#{t
mybatis里面获取添加的自增长的id
在mybatis里面获取自增长的id 在mybatis mapper文件里添加属性useGeneratedKeys 和keyProperty useGeneratedKeys 设置为true keyProperty 设置id insert into t_activity (id, shop_id, start_time ) values (#{id,jdbcType=INTEGER}, #{s...
Mybatis获取插入记录的自增长ID
通常数据库中表的主键是‘自动递增(MySQL)’或’序列(Oracle)‘,但插入数据后又要取得些条数据的ID(将ID做为主键)1.在Mybatis Mapper文件中添加属性“useGeneratedKeys”和“keyProperty”,其中keyProperty是Java对象的属性名,而不是表格的字段名。insert id="insert" parameterType="Spares" us
mybatis插入数据时设置id自增长
select nvl(max(id),0)+1 as id from insert into t_user(id,name,age) values (#id#,#name#,#age#)
myBAtis怎么获得ID自增长的值
sql中加入 selectKey resultType="java.lang.Long" keyProperty="id" order="AFTER"> SELECT LAST_INSERT_ID() selectKey> 其中keyProperty的值根据自己的情况修改 dao层获取id: public long insert(对象) { super.inse
mybatis 获取insert 返回的主键 和批量插入insert
mybatis 获取insert 返回的主键 id &amp;amp;lt;insert id=&amp;quot;insertSelective&amp;quot; parameterType=&amp;quot;com.vip.collection.manager.sms.entity.SmsTask&amp;quot; &amp;amp;gt; insert into sms_task &amp;amp;lt;trim prefix=&amp;quot;(&amp;quot; suf
MSSQL2000 insert 返回ID 的写法
public class SqlServer2000 rn rn //driver string rn static String JDBCDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver"; rn //connection string rn String JDBCConnection="jdbc:microsoft:sqlserver://xxxx:1433;DatabaseName=lx0"; rn String userName = "sa"; rn String userPwd = "sa"; rn Connection conn=null; rn ResultSet rs=null; rn rn rn public SqlServer2000() rn rn rn rn try rn Class.forName(JDBCDriver);//load Driver rn rn catch(java.lang.ClassNotFoundException e) rn rn System.err.println("Dbconnection ():"+e.getMessage());//catch exception rn rn rn rn public Connection connect() rn rn try//get connection rn conn=DriverManager.getConnection(JDBCConnection, userName, userPwd); rn System.out.println("connect successful"); rn rn catch(SQLException ex) rn rn System.err.println("connection():"+ex.getMessage()); rn rn return conn; rn rn rn public void close() rn rn try rn if(!this.conn.isClosed()) rn rn this.conn.close(); rn System.out.println("close successful"); rn rn rn catch (SQLException e) rn // TODO Auto-generated catch block rn e.printStackTrace(); rn rn rnrnrnrnrnrn//求insert 返回ID
java insert之后返回id
public int insertAndUpdate(String sql,Student stu,boolean isEdit)throws SQLException,Exceptionrn int result=0;rn con=DBC.getCon();rn tryrn pst=con.prepareStatement(sql);rn pst.setString(1, stu.getClassNum());rn pst.setString(2, stu.getName());rn pst.setString(3, stu.getSex());rn pst.setInt(4, stu.getAge());rn pst.setString(5, stu.getBirthday());rn pst.setString(6, stu.getEmail());rn if(isEdit)rn pst.setInt(7, stu.getStuId());rn rn result=pst.executeUpdate();rn if(result>0&&!isEdit)rn [color=#99CC00]//获取插入数据的id[/color]rn [color=#FF0000]rs=pst.getGeneratedKeys();rn if(rs.next())rn result=rs.getInt(1);rn [/color]rn rn finallyrn DBC.closeDBC(rs, pst, con);rn return result;rn rn
mybatis insert操作 返回主键
问题:最近遇到个问题insert操作我需要返回主键ID,该数据库对应表主键为自增 解决: &amp;lt;insert id=&quot;insertSelective&quot; parameterType=&quot;com.esint.model.OldPerson&quot; useGeneratedKeys=&quot;true&quot; keyProperty=&quot;colId&quot;&amp;gt; insert into table..... &amp;lt;...
MyBatis insert操作返回主键
在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数;如果业务层需要得到记录的主键时,可以通过配置的方式来完成这个功能 针对Sequence主键而言,在执行insert sql前必须指定一个主键值给要插入的记录,如Oracle、DB2,可以采用如下配置方式: &amp;lt;insert id=&quot;add&quot; parameterType=&quot;vo.Cate...
MyBatis insert 返回主键的方法
今天使用Mybatis时,把数据库切换成Oracle,以前都是DB2和Mysql。 本来以为改个配置文件就没问题了, 结果发现Oracle中建表的的主键自增不能像DB2和Mysql一样来个Identity自增。 Oracle自增必须得配一个sequence。 造成了配置文件修改。 插入操作 对于自增主键的表,插入可以不配置插入的主键列。否则是必须的。 获取主键 ...
MyBatis insert数据返回主键ID
1、dao 层添加方法不要加 @Param(&quot;&quot;)  注解2、xml 添加  useGeneratedKeys=&quot;true&quot; keyProperty=&quot;id&quot;   keyProperty=&quot;id&quot;对应主键名称modelpublic class ProjectRole implements Serializable { /** * 主键 */ private i...
MyBatis insert返回主键不成功
使用的环境 spring boot 1.5.9.RELEASE mybatis 3.4.6 mysql 5.6 项目结构 部分配置文件 mybatis.mapper-locations = classpath:mapping/*.xml mybatis.type-aliases-package = com.gf.model mybatis....
相关热词 c# 去空格去转义符 c#用户登录窗体代码 c# 流 c# linux 可视化 c# mvc 返回图片 c# 像素空间 c# 日期 最后一天 c#字典序排序 c# 截屏取色 c#中的哪些属于托管机制