在DBMS中可以使用insert语句显示指定自增主键值,但Mybatis中不可,即使指定了也无效,可以使用特殊的方式返回主键。

一、自增主键返回

        mysql自增主键执行insert提交之前,会自动生成一个自增主键值;insert语句在提交之后可以调用mysql函数LAST_INSERT_ID() ,返回auto_increment自增列新记录id值;最后再将自增主键值返回到pojo对象中指定的属性中即可。这个函数只适用于自增主键。

1、标签属性

标签对应的属性含义如下:

keyProperty:返回的主键存储在pojo类中的哪个属性

order:相对于insert语句,select LAST_INSERT_ID() 的执行顺序

resultType:指定select LAST_INSERT_ID() 的结果类型

2、详细代码

 <insert id="insertEmp" parameterType="po.Emp">
<selectKey keyProperty="empno" order="AFTER" resultType="java.lang.Integer">
select LAST_INSERT_ID()
</selectKey>
insert into emp(ename,job) values(#{ename},#{job})
</insert>

可以通过po类的get()方法获取自增主键值,代码如下:

 //返回自增主键
System.out.println(emp.getEmpno());

3、运行结果

二、非自增主键(UUID)返回

使用mysql的uuid()函数生成主键,需要修改表中id字段类型为string,长度设置成36位(设置成35位会出错)。执行思路如下:

① 先通过uuid()查询到主键,将主键输入 到sql语句中。

② 执行uuid()语句顺序相对于insert语句之前执行。

1、数据库设计

2、详细代码

 <insert id="insertEmp" parameterType="po.Emp">
<selectKey keyProperty="empno" order="BEFORE" resultType="java.lang.String">
select uuid()
</selectKey>
insert into emp(empno,ename,job) values(#{empno},#{ename},#{job})
</insert>

可以通过po类的get()方法获取自增主键值,代码如下:

 //返回自增主键
System.out.println(emp.getEmpno());

3、运行结果

三、非自增主键(oracle序列)返回

 <insert  id="insertEmp" parameterType="po.Emp">
<selectKey resultType="java.lang.Integer" order="BEFORE" keyProperty="empno">
SELECT 自定义序列.NEXTVAL FROM EMP
</selectKey>
insert into user(id,username) values(#{id},#{username})
</insert>

Mybatis笔记 – insert语句中主键的返回的更多相关文章

  1. Mybatis「MySQL-Oracle」 中主键自动生成 <selectKey> 序列化

    有时候我们不仅仅是通过返回 int 影响行数来确定数据是否插入成功就行了,因为我们总是会用到这个刚刚插入的自增主键,比如主子表入库,子表需要主表的 id,那这个时候我们再去数据库查就显得有点 low ...

  2. mysql insert插入时实现如果数据表中主键重复则更新,没有重复则插入的四种方法

    [CSDN下载] Powerdesigner 设计主键code不能重复等问题 [CSDN博客] Oracle中用一个序列给两个表创建主键自增功能的后果 [CSDN博客] MySQL自增主键删除后重复问 ...

  3. MyBatis中主键回填的两种实现方式

    主键回填其实是一个非常常见的需求,特别是在数据添加的过程中,我们经常需要添加完数据之后,需要获取刚刚添加的数据 id,无论是 Jdbc 还是各种各样的数据库框架都对此提供了相关的支持,本文我就来和和大 ...

  4. MyBatis 插入记录同时获取主键

    MyBatis 插入记录同时获取主键 MyBatis 插入记录同时获取主键的系统界面 useGeneratedKeys 属性 keyProperty 属性 keyColumn 属性 selectKey ...

  5. Mybatis获取数据库自增主键

    一般我们都为将表中主键列设置为自增,当我们执行插入语句时,比如这样 //测试添加 Employee employee = new Employee(null, "jerry4",n ...

  6. oracle中主键自增

    oracle中主键自增 下面用一个例子来说明自增主键的创建: 1.建用户数据表 drop table dectuser; create table dectuser( userid integer p ...

  7. Mybatis 动态insert语句

    mybatis的一个比较先进的思想是把Sql语句写在了配置xml文件(也支持注解),通过配置文件的方式,免去了一般软件开发的硬编码,当业务需求改变的时候,只需要更改sql语句即可! 下面是个人在学习m ...

  8. cassandra表中主键的类型

    cassandra表中主键的类型及区分? 一.类型及区分 二.参考文章 一.类型及区分 Cassandra的4种Key Primary Key 主键 Composite Key,Compound Ke ...

  9. Mycat探索之旅(4)----Mycat的自增长主键和返回生成主键ID的实现

    说明:MyCAT自增长主键和返回生成主键ID的实现 1) mysql本身对非自增长主键,使用last_insert_id()是不会返回结果的,只会返回0:这里做一个简单的测试 创建测试表 ------ ...

随机推荐

  1. 关闭swap

    #(1)临时关闭swap分区, 重启失效;   swapoff  -a #(2)永久关闭swap分区 sed -ri 's/.*swap.*/#&/' /etc/fstab

  2. react 路由使用react-router-dom

    react 和vue一样都是使用封装history 来进行页面跳转,下面就来说一下react常用的路由插件react-router-dom这个东西在GitHub上 目前是最受欢迎的 首相还是先下载 n ...

  3. idea中添加mysql驱动jia包的方法

    1 将相关jar包拷贝到自己所建的lib 文件夹下  如下图所示 2   选中自己的module  接着选择Project Structure 如下图 3 接着如下图继续操作 如上图完成后  那么我们 ...

  4. Perl 运算符

    Perl 运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号,如: 3+2=5. Perl 语言内置了丰富的运算符,我们来看下常用的几种: 算术运算符 比较运算符 逻辑运算符 赋值运算符 位 ...

  5. PHP ftp_rename() 函数

    定义和用法 ftp_rename() 函数重命名 FTP 服务器上的文件或目录. 如果成功,该函数返回 TRUE.如果失败,则返回 FALSE. 语法 ftp_rename(ftp_connectio ...

  6. NOIp2018集训test-9-6(pm)

    T1T2是洛谷原题.Orz辉神290,被辉神吊起来打. 题 1 包裹快递 二分答案.这题似乎卡精度,不开long double二分500次都过不去. //Achen #include<algor ...

  7. C++ string的大小写转换【转载】

    转载自https://www.cnblogs.com/balingybj/p/4678850.html 将一个string转换成大写或者小写,是项目中经常需要做的事情,但string类里并 没有提供这 ...

  8. [JZOJ 5804] 简单的序列

    思路: 似乎和某次培训的题很像啊... 将左括号记为1,右括号记为-1,那么最终一定加和为0,然后再求最小前缀和. 用dp解决即可. #include <bits/stdc++.h> us ...

  9. faster-rcnn代码阅读-rpn-data层

    这一节讲述rpn-data层,和这一层有关的结构图如下: rpn-data层的prototxt定义如下: layer { name: 'rpn-data' type: 'Python' bottom: ...

  10. Thymeleaf的学习

    1.引入依赖 maven中直接引入 <dependency> <groupId>org.springframework.boot</groupId> <art ...