`
wang19841229
  • 浏览: 96733 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

MyBatise关于Oracle中UUID主键返回问题

 
阅读更多

在做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 类型。

  其中主要是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);
		
	}

 

 

分享到:
评论

相关推荐

    Hibernate用UUID作为主键的Demo

    - **全局唯一性**:UUID生成的键值在全世界范围内都是唯一的,避免了主键冲突问题。 - **无序性**:UUID的生成不依赖于任何顺序,不会暴露数据插入的顺序。 - **隐私保护**:相比自增整型主键,UUID更难以关联到特定...

    公司实际项目中采用UUID算法生成主键的工具类

    公司实际项目中采用UUID算法生成主键的工具类,有需要的朋友们可以拿去

    oracle数据库id为uuid类型时自动生成id

    oracle数据库id为uuid类型时自动生成id的工具类,不再依赖sequence自增长

    自动生成主键uuid.zip

    总结来说,"自动生成主键uuid.zip"中的内容可能涉及到如何在Java中使用UUID生成32位的无序和有序ID,这对于数据库主键或其他需要全局唯一标识的场景非常有用。通过理解UUID的生成机制和结合其他数据,开发者可以定制...

    activit5的主键问题

    Activiti5 的主键问题解决方案 ...Activiti5 的主键问题可以通过集中替换主键策略和使用 UUID 生成策略来解决。在高并发的情况下,使用 UUID 生成策略可以避免主键重复的问题,从而提高系统的稳定性和可靠性。

    mycat 主键自增代码

    本文将深入探讨 Mycat 中主键自增的实现原理、配置以及常见问题。 1. Mycat 主键生成策略 Mycat 支持多种主键生成策略,包括:UNIONID(联合ID)、SEQUENCE(序列号)、TABLE(表序列)、UUID 和 AUTO_INCREMENT...

    返回Long型UUid

    在Java编程中,UUID(Universally Unique Identifier)是一种标准的128位的唯一标识符,通常用于生成不可预测的全局唯一ID。然而,标准的UUID由32个16进制数字组成,形式上类似于“123e4567-e89b-12d3-a456-...

    oracle_创建表空间、表、主键、外键、序列.docx

    通过以上步骤,我们成功地在Oracle中创建了表空间、用户、表、序列,设置了主键、外键和约束,并插入了数据。这些操作是构建关系型数据库系统的基本组成部分,对于数据库管理和应用程序开发至关重要。

    浅谈java获取UUID与UUID的校验

    在实际应用中,我们可以使用 UUID 来生成唯一的 ID,例如在数据库中生成一个唯一的主键。同时,我们也可以使用 UUID 来标识一些信息,例如用户的 ID、订单的 ID 等。 此外,我们还可以使用 UUID 来实现一些安全机制...

    upknit:用于Rails + Postgresql的自动UUID主键启动器

    使用PostgreSQL将这个gem添加到Rails应用程序中会自动启用UUID主键。 用法 将此宝石添加到您的Rails应用程序中。 安装 将此行添加到应用程序的Gemfile中: gem 'upknit' 然后执行: $ bundle 内部构造 这个gem做...

    spring boot整合mybatis利用Mysql实现主键UUID的方法

    在Spring Boot项目中,整合MyBatis并利用MySQL实现主键UUID是一种常见的需求,尤其是在分布式系统中,为了保证数据的一致性和唯一性。UUID(Universally Unique Identifier)是一种全局唯一的标识符,它由128位数字...

    uuid.rar_C获得UUID_UUID C_c生成uuid_c语言生成uuid_uuid

    标签中的“c获得uuid”、“uuid_c”、“c生成uuid”、“c语言生成uuid”都强调了这是关于C语言实现UUID生成的主题。 综合以上信息,这个压缩包的内容很可能是提供了一套C语言的UUID生成工具,它可能包括源代码、...

    UUID封装直接调用直接下载用

    UUID的主要目的是解决网络系统中的唯一性问题,确保在网络中的任何地方都不会出现重复的标识符。在Android系统中,UUID通常被用来识别设备或者应用程序的实例。 手机UUID在移动应用开发中扮演着重要的角色。它主要...

    PB生成UUID.zip

    在实际应用中,PB生成UUID可以用于创建分布式系统中的唯一会话ID、记录日志时的追踪ID、或是构建分布式数据库时的主键等。理解如何在PB中生成和使用UUID对于进行高效的网络通信和数据存储非常重要。通过结合PB的序列...

    真实项目中关于主键生成方式的剖析(JPA)

    在Oracle中,创建序列并获取下一个值通常通过`Sequence.nextval`方法完成,可以预定义或采用系统默认的参数。序列在数据库中表现为一个特殊的表,存储着等差数列,由数据库系统自动维护。这样的序列可以用于表级别...

    自动生成32位UUID的函数

    直接通过 dbo.[FunGetUUID32](NEWID())即可获取到32位UUID,非常简单方便。

    jdk与javauuidgenerator生成uuid

    在实际应用中,UUID常用于数据库主键、分布式系统中的唯一标识、持久化对象的ID等。它的优点在于全局唯一且不依赖网络环境,避免了网络通信带来的延迟问题。但需要注意的是,由于UUID的长度较长(128位),在某些...

    javascript生成uuid的js库文件

    在JavaScript中,生成UUID的需求时常出现,例如在生成临时ID、数据库记录的主键或者进行唯一标识时。为了解决这个问题,开发者创建了专门的JS库来生成UUID。 这个压缩包文件"JavaScript的UUid"很可能包含了一个或多...

    uuid.rar_uuid

    UUID(Universally Unique Identifier)和GUID(Globally Unique Identifier)是计算机编程中用于标识信息的128位数字。UUID和GUID实际上是一回事,它们遵循相同的规范,只是在不同的上下文中使用不同的名称。UUID...

    uuid.zip_uuid

    在实际应用中,UUID广泛应用于数据库主键、分布式任务标识、网络通信中的会话ID等场景。例如,在分布式数据库中,每个节点都可以独立生成UUID,然后将数据插入到全局表中,无需担心键冲突。而在高性能系统中,毫秒级...

Global site tag (gtag.js) - Google Analytics