`
dove19900520
  • 浏览: 599475 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mybatis的selectKey作用

阅读更多

摘自: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示例之SelectKey的应用 Mybatis是一种流行的持久层框架,提供了简洁的数据持久化解决方案。今天我们将讨论Mybatis的一个重要特性:SelectKey。SelectKey是Mybatis提供的一种机制,用于解决Insert数据时不...

    SAP Hana 创建序列 +mybatis查询

    SAP HANA 创建 sequence,及查询Dummy,和Mybaits 查询

    Mybatis 处理 CLOB、BLOB 类型数据

    &lt;selectKey keyProperty="id" resultType="int" order="BEFORE"&gt; select my_seq.nextval from dual &lt;/selectKey&gt; insert into user_pics(id, name, pic, bio) values(#{id}, #{name}, #{pic}, #{bio}) ...

    Mybatis中注解@MapKey的使用详解

    它的主要作用是标记在方法上,告诉Mybatis如何将查询结果组织成一个Map。注解只有一个属性,即`value`,用来指定映射到Map的键所对应的字段名。 例如,假设我们有一个需求,批量查询数据库中的记录,每个记录包含`...

    tkmybatis.rar

    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.pdf

    MyBatis 提供了多种主键回填方式,包括使用动态代理方式实现主键回填、使用 selectKey 标签实现主键回填和使用 UUID 或时间戳生成唯一主键。 MyBatis 的SQL 语句构建 MyBatis 提供了多种 SQL 语句构建方式,包括 ...

    mybatis自增主键文档

    如果需要在插入数据后获取自增的主键值,MyBatis提供了`&lt;selectKey&gt;`元素来实现这一功能。这通常在处理一对多关系,需要新主键值来关联多端数据时非常有用。 对于Oracle,配置如下: ```xml ...

    springmybatis

    PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; Insert INTO `user` VALUES ('1', 'summer', '100', 'shanghai,pudong'); 到此为止,前期准备工作就完成了。下面开始真正配置...

    SpringBoot+Mybatis,返回Map的时候,将Map内的Key转换为驼峰的命名

    @Select("SELECT * FROM user") Map, Object&gt; getAllUsers(); } ``` 然后在Service层中调用`MapUtils.toCamelCaseMap`进行转换: ```java @Service public class UserService { @Autowired private UserMapper...

    MyBatis SELECT基本查询实现方法详解

    对于非自增主键,例如在Oracle数据库中,可以使用`&lt;selectKey&gt;`标签来获取自定义的主键。推荐使用`order="BEFORE"`,确保主键在插入前已获取: ```xml &lt;!-- 其他部分省略 --&gt; &lt;selectKey keyProperty="id" order...

    mybatis总结

    - **Oracle主键生成**:在Oracle数据库中,可以通过`selectKey`标签配合自定义SQL语句来实现主键生成。 - **示例**: ```xml &lt;selectKey keyProperty="id" resultType="int" order="BEFORE"&gt; SELECT mi_user_...

    MyBatis3.2.4完全自学手册

    ### MyBatis3.2.4完全自学手册 #### 一、快速入门 **1、MyBatis简介** MyBatis起源于Apache的一个开源项目iBatis,在2010年由Apache Software Foundation迁移到Google Code并更名为MyBatis。之后在2013年11月,该...

    mybatis连接oracle实例

    id NUMBER PRIMARY KEY, age NUMBER, username VARCHAR2(50), password VARCHAR2(50) ); ``` 这将创建一个包含`id`(主键)、`age`、`username`和`password`四个字段的表。 2. **配置MyBatis**: 创建...

    中文版mybatis3.2.3开发文档

    此外,MyBatis 还支持使用 `@SelectKey` 注解来执行插入语句后的自增主键获取。 5. **事务管理**:MyBatis 提供了基于编程和声明式的事务管理。在 Spring 环境下,可以使用 Spring 的事务管理器来配合 MyBatis 进行...

    MyBatis知识点总结.ppt

    在Mybatis中,每一个&lt;select&gt;、、、标签,都会被解析为一个MappedStatement对象。 Dao接口里的方法,是不能重载的,因为Mybatis是全限名+方法名的保存和寻找策略。 Dao接口的工作原理是JDK动态代理,Mybatis运行时...

    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, ...

    MyBatis3 教程 中文完整版

    MyBatis支持两种参数映射方式:传入一个Map对象,其中key是参数名,value是参数值;使用注解@Param标记参数。 6. **结果映射** 结果映射主要用于复杂的数据结构映射,例如一对一、一对多、多对多关系的映射,以及...

    mybatis之多对多

    8. **连接查询(Join Queries)**:MyBatis允许我们编写SQL查询来同时获取多方的数据,这通常通过`&lt;join&gt;`标签或者在`&lt;select&gt;`标签内编写JOIN语句实现。 9. **延迟加载(Lazy Loading)**:为了提高性能,MyBatis...

    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 脚本...

Global site tag (gtag.js) - Google Analytics