在做oracle开发时候经常会遇见主键自增问题,oralce可以了使用序列方式实现主键自增也可以使用uuid方式。
我选择后者,但是今天做项目时候用mybatise想获取插入记录的UUID主键,研究了半天看了官方文档才明白怎么办。
我使用oralce的sys_guid()函数来获取UUID。感觉这种方式对代码侵入少,不用在java中再做处理了。
MyBatise中有一个叫做selectKey的标签,主要是用于获取主键的。
这个标签中主要的属性是
写道
keyProperty selectKey 语句结果应该被设置的目标属性。 Can be a comma separated list of property names if multiple generated columns are expected.
resultType 结果的类型。MyBatis 通常可以算出来,但是写上也没有问题。 MyBatis 允许任何简单类型用作主键的类型,包括字符串。
order 这可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那 么它会首先选择主键, 设置 keyProperty 然后执行插入语句。 如果 设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素- 这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用。
statementType 和前面的相 同,MyBatis 支持 STA TEMENT ,PREPARED 和 CALLABLE 语句的映射类型,分别代表 PreparedStatement 和 CallableStatement 类型。
resultType 结果的类型。MyBatis 通常可以算出来,但是写上也没有问题。 MyBatis 允许任何简单类型用作主键的类型,包括字符串。
order 这可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那 么它会首先选择主键, 设置 keyProperty 然后执行插入语句。 如果 设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素- 这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用。
statementType 和前面的相 同,MyBatis 支持 STA TEMENT ,PREPARED 和 CALLABLE 语句的映射类型,分别代表 PreparedStatement 和 CallableStatement 类型。
其中主要是order这个属性由于我是先利用oralce的函数生成UUID,所以要选择before。
我的配置是这样的
<insert id="insert" parameterType="com.wangxiaowei.jqueryui.system.vo.TSystemDepartment"> <selectKey keyProperty="id" resultType="String" order="BEFORE"> select sys_guid() from dual </selectKey> insert into T_SYSTEM_DEPARTMENT (ID,DEPNAME, SUPERID, SORT, STATE) values ( #{id,jdbcType=VARCHAR},#{depname,jdbcType=VARCHAR}, #{superid,jdbcType=DECIMAL}, #{sort,jdbcType=DECIMAL}, #{state,jdbcType=DECIMAL}) </insert>
selectkey中先获取UUID值,通过keyProperty属性告诉mybatise把这个UUID值赋予实体对象的哪个属性。这样生成的insert语句中就已经有UUID的主键值了。
Mybatise会自动在你传入insert方法的参数实体的ID属性的值变成主键值。
测试用例
@Test public void addDepartment(){ TSystemDepartment systemDepartment = new TSystemDepartment(); systemDepartment.setDepname("部门测试1"); systemDepartment.setSort(1); systemDepartment.setState(1); systemDepartment.setSuperid(0); Integer id = systemDepartmentMapper.insert(systemDepartment); System.out.println(systemDepartment.getId()); //输出的值就是数据库中生成的UUID值了。NB。 Assert.assertSame(id, 1); }
相关推荐
公司实际项目中采用UUID算法生成主键的工具类,有需要的朋友们可以拿去
oracle数据库id为uuid类型时自动生成id的工具类,不再依赖sequence自增长
Hibernate用UUID作为主键的Demo,采用Java默认的方法,来生成对应的ID后,存储到数据库中
最近自己开发时需要一个16位纯数字的UUIDUtil,所以封装了一个纯数字16位的UUIDUtil,返回Long型UUid,希望可以帮到大家!
使用PostgreSQL将这个gem添加到Rails应用程序中会自动启用UUID主键。 用法 将此宝石添加到您的Rails应用程序中。 安装 将此行添加到应用程序的Gemfile中: gem 'upknit' 然后执行: $ bundle 内部构造 这个gem做...
使用Java的Util.UUID生成32位的有序与无序id
mycat 主键自增代码
主要给大家介绍了关于spring boot整合mybatis利用Mysql实现主键UUID的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
手机UUID!
ID ID(Hex) Name ID ID(Hex) Name ID ID(Hex) Name 1 0001 US7ASCII 2 0002 WE8DEC 3 0003 WE8HP 4 0004 US8PC437 5 0005 WE8EBCDIC37 6 0006 WE8EBCDIC500 7 0007 WE8EBCDIC1140 8 0008 WE8EBCDIC285 9 0009
在Laravel中使用UUID或Ulid作为可选键或主键。 composer require riipandi/laravel-optikey 该软件包添加了一个非常简单的特征,可以为您的模型自动生成UUID或Ulid。 快速开始 更新您的架构 首先,您需要在迁移中...
UUID适合长传使用,有效避免重名问题.还可以自己定义其生成的文件名的类型
前言:在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处?...
用于Oracle VirtualBox 虚拟机复制后不能注册硬盘问题
本资源为原创. 其中剖析了hibernate+JPA对主键的生成方式的分类,以及在真实项目中如何使用,并且剖析各种数据库间的主键序列(sequence)原理以及使用.
PB生成UUID
主要介绍了java获取UUID与UUID的校验,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
uuid 生成不重复ID3万个 检测到重复就重试生成,把生成的id好,写入txt文档中
java 生成8位UUID,解决UUID2太长的问题,欢迎下载。后续代码,陆续放出
利用UUID生成完全不重复的数字 package com.example.uuid; import java.util.UUID; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View....