mybatis的selectKey作用详解
更新时间:2022年01月25日 08:43:38 作者:Chandler丶
这篇文章主要介绍了mybatis的selectKey作用详解,具有很好的参考价值,希望对大家有所帮助。以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。</P><P>
mybatis的selectKey作用
当我们使用id自增操作Mybatis时,需要返回最新插入的id的话,可以进行如下操作:
<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id"> SELECT LAST_INSERT_ID() AS ID </selectKey>
在insert中添加即可:
<insert id="insert" parameterType="com.pinyougou.pojo.TbGoods" > <selectKey resultType="java.lang.Long" order="AFTER" keyProperty="id"> SELECT LAST_INSERT_ID() AS id </selectKey> insert into tb_goods (id, seller_id, goods_name, default_item_id, audit_status, is_marketable, brand_id, caption, category1_id, category2_id, category3_id, small_pic, price, type_template_id, is_enable_spec, is_delete) values (#{id,jdbcType=BIGINT}, #{sellerId,jdbcType=VARCHAR}, #{goodsName,jdbcType=VARCHAR}, #{defaultItemId,jdbcType=BIGINT}, #{auditStatus,jdbcType=VARCHAR}, #{isMarketable,jdbcType=VARCHAR}, #{brandId,jdbcType=BIGINT}, #{caption,jdbcType=VARCHAR}, #{category1Id,jdbcType=BIGINT}, #{category2Id,jdbcType=BIGINT}, #{category3Id,jdbcType=BIGINT}, #{smallPic,jdbcType=VARCHAR}, #{price,jdbcType=DECIMAL}, #{typeTemplateId,jdbcType=BIGINT}, #{isEnableSpec,jdbcType=VARCHAR}, #{isDelete,jdbcType=VARCHAR}) </insert>
然后操作int newId = goodsMapper.insert(goods.getGoods()); 就能拿到最新加入的ID信息了
mybatis selectKey 失效问题踩坑
selectKey
会将 SELECT LAST_INSERT_ID()的结果放入到传入的实体类的主键里面,keyProperty
对应的实体类中的主键的属性名,这里是 实体类中的id,因为它跟数据库的主键对应orderAFTER
表示 SELECT LAST_INSERT_ID() 在insert执行之后执行,多用与自增主键,BEFORE
表示 SELECTLAST_INSERT_ID() 在insert执行之前执行,这样的话就拿不到主键了,这种适合那种主键不是自增的类型
resultType 主键类型
<insert id="insertCheckGroup" parameterType="com.zyl.pojo.CheckGroup"> <selectKey resultType="int" keyProperty="id" order="AFTER"> SELECT LAST_INSERT_ID() </selectKey> insert into check_group (name) value (#{name}); </insert>
当使用了selectkey时 Dao接口请勿使用@Param 映射注解,会导致selectKey标签失效
int insertCheckGroup(CheckGroup checkGroup);
如果传多个参数需使用@Param时
int insertCheckGroup(@Param("test") CheckGroup checkGroup);
xml标签keyProperty对应主键名称时应加上test.
<insert id="insertCheckGroup" parameterType="com.zyl.pojo.CheckGroup"> <selectKey resultType="int" keyProperty="test.id" order="AFTER"> SELECT LAST_INSERT_ID() </selectKey> insert into check_group (name) value (#{name}); </insert>
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- MyBatis insert语句返回主键和selectKey标签方式
- mybatis selectKey赋值未生效的原因分析
- Mybatis3中方法返回生成的主键:XML,@SelectKey,@Options详解
- mybatis 获取更新(update)记录的id之<selectKey>用法说明
- Mybatis selectKey 如何返回新增用户的id值
- MyBatis如何使用selectKey返回主键的值
- Mybatis插入时返回自增主键方式(selectKey和useGeneratedKeys)
- Mybatis @SelectKey用法解读
- Mybatis示例之SelectKey的应用
- MyBatis中selectKey标签及主键回填实现
相关文章
Maven中的dependencyManagement 实例详解
dependencyManagement的中文意思就是依赖关系管理,它就是为了能通更好统一管理项目的版本号和各种jar版本号,可以更加方便升级,解决包冲突问题,这篇文章主要介绍了Maven中的dependencyManagement 实例详解,需要的朋友可以参考下2024-02-02SpringCloud openfeign相互调用实现方法介绍
在springcloud中,openfeign是取代了feign作为负载均衡组件的,feign最早是netflix提供的,他是一个轻量级的支持RESTful的http服务调用框架,内置了ribbon,而ribbon可以提供负载均衡机制,因此feign可以作为一个负载均衡的远程服务调用框架使用2022-11-11Java中的MarkerFilter的应用场景及使用示例详解
这篇文章主要介绍了Java中的MarkerFilter的应用场景及使用示例详解,使用log4j2,负责从消息队列收集日志的,现在系统收集到的日志能和这个系统本身的日志分开,需要的朋友可以参考下2024-01-01RabbitMQ排他性队列Exclusive Queue详解
这篇文章主要介绍了RabbitMQ排他性队列Exclusive Queue详解,如果你想创建一个只有自己可见的队列,即不允许其它用户访问,RabbitMQ允许你将一个Queue声明成为排他性的Exclusive Queue,需要的朋友可以参考下2023-08-08
最新评论