在做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生成的键值在全世界范围内都是唯一的,避免了主键冲突问题。 - **无序性**:UUID的生成不依赖于任何顺序,不会暴露数据插入的顺序。 - **隐私保护**:相比自增整型主键,UUID更难以关联到特定...
公司实际项目中采用UUID算法生成主键的工具类,有需要的朋友们可以拿去
oracle数据库id为uuid类型时自动生成id的工具类,不再依赖sequence自增长
总结来说,"自动生成主键uuid.zip"中的内容可能涉及到如何在Java中使用UUID生成32位的无序和有序ID,这对于数据库主键或其他需要全局唯一标识的场景非常有用。通过理解UUID的生成机制和结合其他数据,开发者可以定制...
Activiti5 的主键问题解决方案 ...Activiti5 的主键问题可以通过集中替换主键策略和使用 UUID 生成策略来解决。在高并发的情况下,使用 UUID 生成策略可以避免主键重复的问题,从而提高系统的稳定性和可靠性。
本文将深入探讨 Mycat 中主键自增的实现原理、配置以及常见问题。 1. Mycat 主键生成策略 Mycat 支持多种主键生成策略,包括:UNIONID(联合ID)、SEQUENCE(序列号)、TABLE(表序列)、UUID 和 AUTO_INCREMENT...
在Java编程中,UUID(Universally Unique Identifier)是一种标准的128位的唯一标识符,通常用于生成不可预测的全局唯一ID。然而,标准的UUID由32个16进制数字组成,形式上类似于“123e4567-e89b-12d3-a456-...
通过以上步骤,我们成功地在Oracle中创建了表空间、用户、表、序列,设置了主键、外键和约束,并插入了数据。这些操作是构建关系型数据库系统的基本组成部分,对于数据库管理和应用程序开发至关重要。
在实际应用中,我们可以使用 UUID 来生成唯一的 ID,例如在数据库中生成一个唯一的主键。同时,我们也可以使用 UUID 来标识一些信息,例如用户的 ID、订单的 ID 等。 此外,我们还可以使用 UUID 来实现一些安全机制...
使用PostgreSQL将这个gem添加到Rails应用程序中会自动启用UUID主键。 用法 将此宝石添加到您的Rails应用程序中。 安装 将此行添加到应用程序的Gemfile中: gem 'upknit' 然后执行: $ bundle 内部构造 这个gem做...
在Spring Boot项目中,整合MyBatis并利用MySQL实现主键UUID是一种常见的需求,尤其是在分布式系统中,为了保证数据的一致性和唯一性。UUID(Universally Unique Identifier)是一种全局唯一的标识符,它由128位数字...
标签中的“c获得uuid”、“uuid_c”、“c生成uuid”、“c语言生成uuid”都强调了这是关于C语言实现UUID生成的主题。 综合以上信息,这个压缩包的内容很可能是提供了一套C语言的UUID生成工具,它可能包括源代码、...
UUID的主要目的是解决网络系统中的唯一性问题,确保在网络中的任何地方都不会出现重复的标识符。在Android系统中,UUID通常被用来识别设备或者应用程序的实例。 手机UUID在移动应用开发中扮演着重要的角色。它主要...
在实际应用中,PB生成UUID可以用于创建分布式系统中的唯一会话ID、记录日志时的追踪ID、或是构建分布式数据库时的主键等。理解如何在PB中生成和使用UUID对于进行高效的网络通信和数据存储非常重要。通过结合PB的序列...
在Oracle中,创建序列并获取下一个值通常通过`Sequence.nextval`方法完成,可以预定义或采用系统默认的参数。序列在数据库中表现为一个特殊的表,存储着等差数列,由数据库系统自动维护。这样的序列可以用于表级别...
直接通过 dbo.[FunGetUUID32](NEWID())即可获取到32位UUID,非常简单方便。
在实际应用中,UUID常用于数据库主键、分布式系统中的唯一标识、持久化对象的ID等。它的优点在于全局唯一且不依赖网络环境,避免了网络通信带来的延迟问题。但需要注意的是,由于UUID的长度较长(128位),在某些...
在JavaScript中,生成UUID的需求时常出现,例如在生成临时ID、数据库记录的主键或者进行唯一标识时。为了解决这个问题,开发者创建了专门的JS库来生成UUID。 这个压缩包文件"JavaScript的UUid"很可能包含了一个或多...
UUID(Universally Unique Identifier)和GUID(Globally Unique Identifier)是计算机编程中用于标识信息的128位数字。UUID和GUID实际上是一回事,它们遵循相同的规范,只是在不同的上下文中使用不同的名称。UUID...
在实际应用中,UUID广泛应用于数据库主键、分布式任务标识、网络通信中的会话ID等场景。例如,在分布式数据库中,每个节点都可以独立生成UUID,然后将数据插入到全局表中,无需担心键冲突。而在高性能系统中,毫秒级...