前提是数据库表里已经把id字段设置成了自增的

javabean的定义是这样的:

package test;import java.util.Date;public class Express {private int id;private String orderId;private Date deliveryDate;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getOrderId() {return orderId;}public void setOrderId(String orderId) {this.orderId = orderId;}public Date getDeliveryDate() {return deliveryDate;}public void setDeliveryDate(Date deliveryDate) {this.deliveryDate = deliveryDate;}}

DAO层的insert方法是这样的:

public int add(@Param("entity")Express express);

@Param("entity")是给参数express起的名字,mybatis的mapper.xml会使用这个名字

mybatis的mapper.xml里的add定义是这样的:

<!-- 插入记录 -->
<insert id="add" parameterType="Object" useGeneratedKeys="true" keyProperty="entity.id" keyColumn="id">insert intoexpress(order_id,delivery_date)values(#{entity.orderId},#{entity.deliveryDate})
</insert>

当我们定义了一个express对象,然后调用

dao.add(express);

插入数据库成功后mybatis就会把插入的id赋值给这个express对象,后面就可以用express.getId()来获取这个id了

注意:

1,mapper.xml里面的keyProperty必须定义为entity.id而不是id,否则在调用dao.add(express)的时候会报错:

Caused by: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [param1, entity]at org.apache.ibatis.binding.MapperMethod$ParamMap.get(MapperMethod.java:165) ~[mybatis-3.2.7.jar:3.2.7]at org.apache.ibatis.reflection.wrapper.MapWrapper.getSetterType(MapWrapper.java:79) ~[mybatis-3.2.7.jar:3.2.7]at org.apache.ibatis.reflection.MetaObject.getSetterType(MetaObject.java:91) ~[mybatis-3.2.7.jar:3.2.7]at org.apache.ibatis.executor.keygen.Jdbc3KeyGenerator.getTypeHandlers(Jdbc3KeyGenerator.java:82) ~[mybatis-3.2.7.jar:3.2.7]at org.apache.ibatis.executor.keygen.Jdbc3KeyGenerator.processBatch(Jdbc3KeyGenerator.java:61) ~[mybatis-3.2.7.jar:3.2.7]... 97 common frames omitted

因为add方法传入的参数叫做entity,mybatis并不认识entity里的id字段。

2,public int add(@Param("entity")Express express);这个方法的int类型返回值指的是insert成功的数据条数,而不是mybatis返回的新增id。也就是说,在上面的例子中,只要insert成功,方法的返回值永远是1。

mybatis的insert语句获取自增id的方法(mySQL)相关推荐

  1. mybatis postgresql insert后返回自增id

    在使用mybatis + postgresql,我们有时在插入数据时需要返回自增id的值,此时在插入时,可以按照以下例子来编写mapper文件 <insert id="insertUs ...

  2. oracle如何获取自增id,oracle实现自增id

    --oracle实现自增id --创建一张T_StudentInfo表 create table T_StudentInfo ( "id" integer not null pri ...

  3. mybatis入门学习(九) -DB环境切换、使用注解、事务提交、获取自增ID、多参数传参、鉴别器、内置参数、批量写入、Oracle字段无法插入 null 值

    一.多数据库环境切换 1.config配置: <!-- default="mydemo" 指定连接的数据库 --><environments default=&q ...

  4. Mybatis selectKey获取自增ID(DB2/Sybase/MySQL/Oracle/达梦)

    Mybatis selectKey获取自增ID(DB2/Sybase/MySQL/Oracle/达梦) 1.selectKey 2.不同数据库写法 2.1 DB2 2.2.Sybase 2.3 MyS ...

  5. 【MyBatis使用】 mapper文件未编译 + statementType使用 + 返回结果字段顺序不一致 + 获取自增ID + 一个update标签批量更新记录

    1. mapper 文件未编译 如果mapper文件未编译,会报绑定异常. <build><resources><resource><directory> ...

  6. SQL 2008 使用insert into 语句时自增ID插入数据时实现自增ID

    SQL 2008 使用insert into 语句时自增ID插入数据时实现自增ID 建立一张User表 使用insert into 语句插入一行新的数据 结果如下

  7. twisted mysql_在Twisted下用MySQLadbapi获取自增id

    D jango的ORM有一个很便捷的功能,其实也应该说是一个很基本的功能吧.就是在对一个model调用 save() 插入到数据库后,会将创建的 D jango的ORM有一个很便捷的功能,其实也应该说 ...

  8. MyBatis-Plus 新增插入成功并获取自增Id(没问题 已实验哟)

    MyBatis-Plus 新增插入成功并获取自增Id 我知道的有三种的方法可以插入新增同时获取到自增Id(插入成功的Id): mp自带 和 注释 和 xml的方法. 实体类:UserInfo /*** ...

  9. 获取mysql 自增id 和mysql 下一个自增id的方法

    mysql获取表中自增id的方法: 1. 使用 select MAX(id) from tablename; 获取的是表中最大的id:顺序执行  insert ---> delete 插入的数据 ...

最新文章

  1. 李开复对话Yoshua Bengio:AI技术的下一个突破
  2. LIVE 预告 | 华为诺亚韩凯:Transformer in Transformer
  3. criterion java_Java Criterion類代碼示例
  4. ntu 课程 ERIC(2):Planning your research
  5. suse 11 oracle 10g,suse11+oracle10g安装
  6. SAP S/4HANA Layer Repository(LREP)的读取逻辑调试
  7. 给产品经理背景的朋友介绍SAP C4C
  8. python list保存至csv文件
  9. python socket模块 和pyqt5_PyQt5+Socket实现CS架构的建议聊天室
  10. oseasy还原卡_学校机房管理批量更新软件的问题还原卡、网刻、噢易OSS对比区别...
  11. C#读IC卡程序(明华读卡器)
  12. 企业文化之华为和汤森路透
  13. 100亿+数据量,每天50W+查询,携程酒店数据智能平台实践
  14. 【QT小记】使用QPainter绘制各种基本图形
  15. 飞凌小课堂-RK3399系列 linux双千兆网口解决方法-RTL8153
  16. TimingExecutor —— 定时执行、定时任务管理软件,定时执行专家
  17. R语言各种假设检验实例整理(常用)
  18. 秋招内推码汇总第二波 | 阿里、科大讯飞等10家公司内推码
  19. SpringBoot碰到的常见问题
  20. MySQL高级2-优化分析

热门文章

  1. 华三s3100v3时区配置_H3C S3100 交换机配置步骤
  2. 第三方二维码收款平台 哪家好
  3. AppCompat V21:将 Materia Design 兼容到5.0之前的设备
  4. 利用Boot-Repair在三系统中修复ubuntu18
  5. Qt用代码实现菜单栏(MenuBar)和工具栏(ToolBar)
  6. 基于SSH的客户关系CRM管理系统设计与实现
  7. 在钉钉上怎么手写_钉钉直播上课可以写字吗_钉钉直播写字板功能介绍_玩游戏网...
  8. 从职校到前端培训班经历(一)
  9. 初中计算机基础考试试题及答案,计算机基础考试试题及答案(三)
  10. 市面上常见LED驱动电源有哪些