在使用ibatis插入数据进数据库的时候,会用到一些sequence的数据,有些情况下,在插入完成之后还需要将sequence的值返回,然后才能进行下一步的操作。
使用ibatis的selectKey就可以得到sequence的值,同时也会将值返回。不过对于不同的数据库有不同的操作方式。
对于oracle:
<insert id="insertUser" parameterClass="ibatis.User">
<selectKey resultClass="long" keyProperty="id">
select SEQ_USER_ID.nextval as id from dual
</selectKey>
insert into user
(id,name,password)
values
(#id#,#name#,#password#)
</insert>
该句话执行完之后,传进来的参数User对象DO里的id字段就会被赋值成sequence的值。
对于mysql
<insert id="insertUser" parameterClass="ibatis.User">
insert into user
(name,password)
values
(#name#,#password#)
<selectKey resultClass="long" keyProperty="id">
SELECT LAST_INSERT_ID() AS ID
</selectKey>
</insert>
将selectKey放在insert之后,通过LAST_INSERT_ID() 获得刚插入的自动增长的id的值。
<insert id="addMetaReport" parameterClass="metaRpo">
<![CDATA[
insert IGNORE into rpo_trackingMeta(trackingMeta_id, trackingMeta_title, company_id, subCompany_id, meta_type,
delegation_at, report_cycle, start_at, end_at, matched_num_new, matched_num_takeoff, matched_num_total,
created_at, created_by, updated_at, updated_by)
select #trackingMetaId#
, #metaTitle#
, #companyId#
, #subCompanyId#
, #metaType#
, #delegationAt#
, #reportCycle#
, #startAt#
, #endAt#
, sum(case when created_at >= #startAt# and created_at < #endAt# then 1 else 0 end)
, 0
, count(*)
, now()
, #createdBy#
, now()
, #updatedBy#
from matchedPage where task_id = #orderId#
and verification = 'mediadna';
]]>
<selectKey keyProperty="id" resultClass="int">
SELECT IF(row_count() > 0, last_insert_id(), 0) AS id FROM dual
</selectKey>
</insert>
相关推荐
Mybatis示例之SelectKey的应用 Mybatis是一种流行的持久层框架,提供了简洁的数据持久化解决方案。今天我们将讨论Mybatis的一个重要特性:SelectKey。SelectKey是Mybatis提供的一种机制,用于解决Insert数据时不...
MyBatis提供了一种机制来处理这种需求,主要通过`useGeneratedKeys`和`selectKey`元素实现。 1. `useGeneratedKeys="true"`:这是针对支持自动增长主键的数据库,如MySQL。在`<insert>`标签内设置`useGeneratedKeys...
SAP HANA 创建 sequence,及查询Dummy,和Mybaits 查询
本篇将深入探讨MyBatis的动态SQL语句,主要关注`selectKey`和`if`标签的使用。 ### 3.1 `selectKey`标签 `selectKey`标签主要用于在插入数据时自动生成主键,尤其是在Oracle中使用序列或MySQL中使用函数生成ID的...
#include "stdio.h" struct atmsystem /* 定义结构体存放用户资料 */ { char account[5]; /* 帐号 */ char password[7];... float allmoney;...if(SelectKey>52||SelectKey) /* 检查选项的有效性 */
但是,SparkSQL 支持 `select * from (select key from src union all select key from test) aa;` 这样的语句。 3. Intersect/Minus/Except SparkSQL 不支持 Intersect、Minus 和 Except 语句。 4. Join ...
在Java开发中,iBatis是一个优秀的持久层框架,它允许开发者将SQL语句和Java...通过`<selectKey>`、`parameterClass`和`parameterMap`等元素,iBatis允许开发者灵活地控制SQL执行和结果映射,极大地简化了数据库操作。
需要注意的是,`<selectKey>`标签的位置很关键,它通常被放在`INSERT`语句之后,以确保在插入数据后立即获取新生成的主键值。 总结来说,iBATIS是一个强大的工具,它通过XML或注解的方式将SQL语句与Java代码分离,...
"Mybatis 中 selectKey 配置的重要性和事务处理的注意点" 从今天的文章中,我们可以看到,小傅哥在手写 Mybatis 的时候,遇到了一个问题,即在插入数据的时候,返回的索引值总是 0,而不是最后插入的索引值。这个...
selectkey = getch(); } while (selectkey != '1' && selectkey != '2' && selectkey != '3' && selectkey != '4'); ``` - 使用`do-while`循环确保用户必须输入有效的选项。 - 通过`clrscr()`清空屏幕,显示用户...
在给出的 XML 代码中,`<selectKey>` 标签内的 SQL 语句是 `select nextval('student')`,这是 MySQL 中的一个假设的函数,实际应用中应替换为 MySQL 自带的主键生成函数,如 `LAST_INSERT_ID()`,或者自定义的存储...
这里`<selectKey>`元素会在插入语句之前执行,获取Sequence的下一个值,并将其设置到`User`对象的`id`字段。然后才执行插入语句。 总的来说,MyBatis提供了一套灵活的机制来处理不同数据库的自增主键。对于Oracle...
对于序列主键(如Oracle、DB2中的Sequence),需要在插入语句之前配置`<selectKey>`标签来获取主键值。例如: ```xml <selectKey resultClass="long" keyProperty="sctId"> SELECT SEQ_TEST.NEXTVAL FROM DUAL...
SELECT key, SUM(value) as total_value FROM table_name GROUP BY key; ``` 这会返回一个新的结果集,其中每一行代表一个唯一的key,`total_value`是该key对应所有记录的`value`字段之和。 描述中提到的“博文...
在Ibatis配置中,可以通过`<selectKey>`标签来指定使用序列生成主键。 2. **身份列(Identity)**:在MySQL、SQL Server等支持自动增长的数据库中,可以设置某一列为主键并自动递增。在Ibatis中,可以在插入语句后...
在iBatis(现更名为MyBatis)框架中,可以使用`<selectKey>`标签来直接获取新插入记录的`AUTO_INCREMENT`ID,这样就无需额外编写代码来获取这个ID。例如,以下是一个iBatis的SQL映射配置: ```xml insert into ...
例如:<insert id="insertAccount" parameterClass="Account"> <selectKey resultClass="long" keyProperty="sctId"> SELECT SEQ_TEST.NEXTVAL FROM DUAL </selectKey>...。在 MySQL 中,可以使用 LAST_INSERT_ID() ...
对于某些不支持`useGeneratedKeys`属性的数据库,MyBatis提供了`<selectKey>`元素来显式执行一个查询来获取新生成的主键。这通常在插入后立即执行,确保获取到正确的值。例如: ```xml <selectKey keyProperty...
而对于MySQL等支持自增主键的数据库,通常在插入语句后配置`<selectKey>`,如`SELECT LAST_INSERT_ID()`,以获取新插入行的主键。 **参数类(Parameter Class)**在iBatis中扮演着重要角色。插入语句的参数可以是类...
在这个例子中,`<insert>`标签定义了一个插入操作,参数类为`LineItem`,并包含了主键获取的`<selectKey>`标签。通过`Mapper.Instance().Insert()`方法调用,可以完成插入操作并返回主键值。 总的来说,iBATIS ...