在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. linux 套接字

    三.命名套接字 之前的socket只是创建了一个没有名字的资源,其他进程无法访问他.所以也无法从它接受消息.只有当bind给套接字绑定了端口和名字后,其他进程才能找到它. 一般服务器是一定要bind, ...

  2. Vultr账号被锁定的几个常见原因

    很多小伙伴使用都在问Vultr账号为什么又是会出现被锁定的情况,今天我们就来了解一下Vultr账号被锁定的几个常见原因. 1.Vultr主机违规使用 按照Vultr主机商的要求,我们的Vultr主机也 ...

  3. js 浮点数计算问题

    //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显.这个函数返回较为精确的加法结果. //调用:jsAdd(arg1,arg2) //返回值:arg1加上arg2的精确 ...

  4. HIVE的高级操作

    二.视图 1.Hive 的视图和关系型数据库的视图区别 和关系型数据库一样,Hive 也提供了视图的功能,不过请注意,Hive 的视图和关系型数据库的数据还是有很大的区别: (1)只有逻辑视图,没有物 ...

  5. CSS——背景及应用

    CSS 可以添加背景颜色和背景图片,以及进行图片设置. none : 无背景图(默认的) url : 使用绝对或相对地址指定背景图像 background-image 属性允许指定一个图片展示在背景中 ...

  6. 嘶吼CTF2019总结(Web部分题目复现以及部分杂项)

    easy calc 这次的比赛自己一题都没有做出来,赛后看题解的时候很难受,其实有很多东西自己其实是可以做出来的,但是思路被限制了,可能这就是菜吧. 首先web题目就是一个easy calc,emmm ...

  7. NX二次开发-获得制图中对象的坐标点UF_DRF_ask_origin

    #include <uf.h> #include <uf_ui.h> #include <uf_drf.h> #include <uf_obj.h> # ...

  8. 奇思妙想:利用野指针和lower_bound()/upper_bound()函数实现整数二分

    众所周知,c++的STL中提供了三个二分查找函数,binary_search(),lower_bound(),upper_bound(),功能分别是找某值是否在数组中出现,找到数组中第一个大于等于某值 ...

  9. Unity 之旋转

    代码如下: bool RotateDelta(Vector3 direction) { direction.y = ; if (direction == Vector3.zero) return tr ...

  10. csv转字典

    with open('filename','r') as csv_f: reader = csv.reader(csv_f) fieldnames = next(reader) csv_reader ...