业务开发时,有时候插入一条数据,需要立刻得到插入数据的id,例如插入一条商品数据,然后将插入成功的id返回给前端。但是自动生成的mapper中的insert方法,默认是不会返回主键的。这里使用如下方法来演示如何实现插入数据后返回主键id。
新建自定义Mapper类ProductManualMapper,添加如下内容:
在项目的resources/mybatis/manual文件夹下面新建ProductManualMapper.xml[2]文件,在此文件中添加如下内容:
<insert></insert>标签中没有resultType属性,但<selectKey></selectKey>标签是有的。通过设置<selectKey>中order的属性值,即order="AFTER",使其先执行插入语句,再执行查询语句。keyProperty="pro.id"表示将自增长后的Id赋值给实体类中用@Param注解标注为‘pro’的类实例字段。如果没有添加@Param注解指定类实例名,那么<insert>标签中的pro名字要去掉。
selectKey标签属性和含义见表10-3。
表10-3 selectKey标签属性和含义
在DAO中注入自定义Mapper,并且添加保存方法:(www.xing528.com)
编写测试代码,具体如下:
运行结果如下:
通过上面的运行结果可以看到程序返回了插入商品的id。
当然如果使用的是Maven的mybatis-generator-maven-plugin插件,可以配置generateKey属性,让插件在自动生成Insert Mapper语句时,生成一条正确的selectKey元素。在generatorConfig.xml配置table标签时添加<generatedKey>元素,具体配置如下:
当执行生成命令mybatis-generator:generate后,就会发现Product对应的Mapper文件已经在<insert>标签内生成了返回主键的<selectKey>标签元素。建议使用此方法,因为手写<insert>毕竟很麻烦,而且容易出错。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。