摘自:http://lelglin.iteye.com/blog/1452403
在使用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数据时不...
SAP HANA 创建 sequence,及查询Dummy,和Mybaits 查询
<selectKey keyProperty="id" resultType="int" order="BEFORE"> select my_seq.nextval from dual </selectKey> insert into user_pics(id, name, pic, bio) values(#{id}, #{name}, #{pic}, #{bio}) ...
它的主要作用是标记在方法上,告诉Mybatis如何将查询结果组织成一个Map。注解只有一个属性,即`value`,用来指定映射到Map的键所对应的字段名。 例如,假设我们有一个需求,批量查询数据库中的记录,每个记录包含`...
import tk.mybatis.mapper.annotation.KeySql; import tk.mybatis.mapper.annotation.TableField; import tk.mybatis.mapper.annotation.TableName; @TableName("user") public class User { @TableId(value = "id...
MyBatis 提供了多种主键回填方式,包括使用动态代理方式实现主键回填、使用 selectKey 标签实现主键回填和使用 UUID 或时间戳生成唯一主键。 MyBatis 的SQL 语句构建 MyBatis 提供了多种 SQL 语句构建方式,包括 ...
如果需要在插入数据后获取自增的主键值,MyBatis提供了`<selectKey>`元素来实现这一功能。这通常在处理一对多关系,需要新主键值来关联多端数据时非常有用。 对于Oracle,配置如下: ```xml ...
PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; Insert INTO `user` VALUES ('1', 'summer', '100', 'shanghai,pudong'); 到此为止,前期准备工作就完成了。下面开始真正配置...
@Select("SELECT * FROM user") Map, Object> getAllUsers(); } ``` 然后在Service层中调用`MapUtils.toCamelCaseMap`进行转换: ```java @Service public class UserService { @Autowired private UserMapper...
对于非自增主键,例如在Oracle数据库中,可以使用`<selectKey>`标签来获取自定义的主键。推荐使用`order="BEFORE"`,确保主键在插入前已获取: ```xml <!-- 其他部分省略 --> <selectKey keyProperty="id" order...
- **Oracle主键生成**:在Oracle数据库中,可以通过`selectKey`标签配合自定义SQL语句来实现主键生成。 - **示例**: ```xml <selectKey keyProperty="id" resultType="int" order="BEFORE"> SELECT mi_user_...
### MyBatis3.2.4完全自学手册 #### 一、快速入门 **1、MyBatis简介** MyBatis起源于Apache的一个开源项目iBatis,在2010年由Apache Software Foundation迁移到Google Code并更名为MyBatis。之后在2013年11月,该...
id NUMBER PRIMARY KEY, age NUMBER, username VARCHAR2(50), password VARCHAR2(50) ); ``` 这将创建一个包含`id`(主键)、`age`、`username`和`password`四个字段的表。 2. **配置MyBatis**: 创建...
此外,MyBatis 还支持使用 `@SelectKey` 注解来执行插入语句后的自增主键获取。 5. **事务管理**:MyBatis 提供了基于编程和声明式的事务管理。在 Spring 环境下,可以使用 Spring 的事务管理器来配合 MyBatis 进行...
在Mybatis中,每一个<select>、、、标签,都会被解析为一个MappedStatement对象。 Dao接口里的方法,是不能重载的,因为Mybatis是全限名+方法名的保存和寻找策略。 Dao接口的工作原理是JDK动态代理,Mybatis运行时...
dept_id INT PRIMARY KEY AUTO_INCREMENT, dept_name VARCHAR(50), dept_address VARCHAR(50) ); INSERT INTO dept (dept_name, dept_address) VALUES ('研发部一部', '广州'); INSERT INTO dept (dept_name, ...
MyBatis支持两种参数映射方式:传入一个Map对象,其中key是参数名,value是参数值;使用注解@Param标记参数。 6. **结果映射** 结果映射主要用于复杂的数据结构映射,例如一对一、一对多、多对多关系的映射,以及...
8. **连接查询(Join Queries)**:MyBatis允许我们编写SQL查询来同时获取多方的数据,这通常通过`<join>`标签或者在`<select>`标签内编写JOIN语句实现。 9. **延迟加载(Lazy Loading)**:为了提高性能,MyBatis...
id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), age INT ); INSERT INTO users (name, age) VALUES ('孤傲苍狼', 27); INSERT INTO users (name, age) VALUES ('白虎神皇', 27); ``` 执行以上 SQL 脚本...