hibernate id生成器
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于hibernate id生成器内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在hibernate id生成器相关知识领域提供全面立体的资料补充。同时还包含 h6、hack、hadoop 的知识内容,欢迎查阅!
hibernate id生成器相关知识
-
关于Hibernate的oracle主键id生成策略uuid、native和sequence 1.uuid是产生一个32位的字符串,所以在数据库主键字段的大小上必须要大于等于32位。另外如果之前在库表设置了触发器和sequence,那么即使是采用uuid主键生成策略,那么hibernate在做插入时,uuid将会失效,而是采用sequence中的值作为主键id。相当于先用uuid做主键id,但是在插入之前又被sequence中的值覆盖掉了。这点必须注意。删除掉该表的触发器即可恢复。 2.native 意味着主键生成机制的实现方式将交给hibernate决定。hibernate 将根据底层数据库适配器dialect 的定义,采用不同数据库特定的主键生成方式。(对于SQLServer和MySQL自动采用自增字段,对于oracle自动采用Sequence生成主键) 注意:在这种情形下,hibernate会默认使用名为hibernate_sequence的序列,如果oracle中没有设置,Console控制台将会产生“Hib
-
Hibernate用oracle sequence生成ID配置TMP_EMP中的ID是根据序列SQ_TMP_EMP来生成的,需要在TmpEmp.hbm.xml中设置:<id name="id" type="long"> <column name="ID" not-null="true" sql-type="NUMBER" unique="true"/> <generator class="sequence"> <param name="sequence">SQ_TMP_EMP</param> &n
-
封装一个流水号ID生成器:id-spring-boot-starter概述 ID号生成器(或:全局唯一ID生成器)是服务端系统的基础设施,而且ID号这个东西基本搞后端开发的程序员天天都要接触。而关于ID生成的算法现在业界首屈一指的当属Snowflake雪花算法。 UidGenerator正是百度开源的一款基于Snowflake雪花算法实现的高性能唯一ID生成器。在本号前文中已经详细使用过UidGenerator,但使用过程还是比较繁杂,还需要自己去引UidGenerator组件的源码,感觉有点不方便。为此本文基于UidGenerator,再来封装一套更利于Spring Boot项目使用的ID号生成组件,命名为id
-
Spring Boot 工程集成全局唯一ID生成器 Vesta本文内容脑图如下: 文章共 760字,阅读大约需要 2分钟 ! 概 述 在前一篇文章 《Spring Boot工程集成全局唯一ID生成器 UidGenerator》 中给大家推荐了一款由百度开发的基于 Snowflake算法实现的全局唯一ID生成器 UidGenerator,而本文则给大家再度推荐一款优秀的全局唯一ID生成器,名叫 Vesta。 Vesta 是艳鹏大佬的开源作品,基于Java开发,其体验地址 在此。Vesta 是一款通用的 ID产生器,互联网俗称统一发号器,其具有几大很具有优势的特性: 全局唯一 粗略有序 可反解
hibernate id生成器相关课程
hibernate id生成器相关教程
- 2.3 主键生成器 使用注解 @GeneratedValue 指定生成器类型后,Hibernate 一般情况下会自动创建对应的生成器对象,如前面指定类型为 IDENTITY,则创建生成 org.hibernate.id.IdentityGenerator 对象。如果需要个性化定制生成器对象,则需要显示指定生成器对象,如为 Oracle 数据库指定主键生成器时,则配置可如下:XML 映射方式:<id name="stuId" type="Integer" column="stuId"> <generator class="sequence"> <param name="sequence">mySeq</param> </generator></id>注解映射方式:@Id@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="mySeqIdGen")@SequenceGenerator(name="mySeqIdGen",sequenceName="mySeq")public Integer getStuId() { return stuId;}@SequenceGenerator 注解显示指明使用 org.hibernate.id.SequenceGenerator 生成器对象,并指定使用数据库中的命名为 mySeq 的序列化器。其它主键生成器的使用本文不再复述,抛砖引玉,学习者可自行深入!
- 2.1 主键生成器 主键是关系数据库中的概念,目的是唯一标识表中记录,保证实体数据的完整性。关系数据库中表与表中数据的关系描述需依赖主键实现 ;另有外键概念,所谓外键是在另一张表中对引用表的主键值的引用称呼。主外键关系指在不同的表中通过共同的字段信息建立起表中数据依赖(引用)关系。回到 Hibernate 的世界!先展示一段代码:Student student = new Student(2, "Configuration老二", "男");session.save(student);上面的代码功能:把应用程序中的数据写入到数据库中,没毛病呀!来!没毛病找点毛病出来:实际操作时,要求 Hibernate 把程序中 stuId 属性的值插入到表中同名的 stuId 主键字段中。主键有什么特点?唯一性!回答得对。请问在应用程序中构建数据时,如何确保赋值给 stuId 的值在表中不存在!这就是问题所在。如何解决?使用 Hibernate 主键生成器。所谓主键生成器其作用就是在 Hibernate 向表中插入数据时,负责生成表中数据记录的主键。Hibernate 主键生成器 API 介绍:Hibernate 的主键生成器(generator)都实现了 org.hibernate.id.IdentityGenerator 接口; public class IdentityGenerator extends AbstractPostInsertGenerator { …… }开发者可以遵循这个接口规范提供自己的主键生成方案;Hibernate 内置有较多主键生成器,主键生成器都有自己的实现类,并提供有快捷名称方便在注解或 XML 中引用。常用主键生成器一览:org.hibernate.id.IncrementGenerator(increment):对 long、short 或 int 的数据列生成自动增长主键;org.hibernate.id.IdentityGenerator(identity): 适用于 SQL server,MySql 等支持自动增长列的数据库,适合 long、short 或 int 数据列类型;org.hibernate.id.SequenceGenerator(sequecne):适用 oracle,DB2 等支持 Sequence 的数据库,适合 long、short 或 int 数据列类型;org.hibernate.id.UUIDGenerator(uuid):对字符串列的数据采用 128 - 位 uuid 算法生成唯一的字符串主键;org.hibernate.id.Assigned(assigned):由应用程序指定,也是默认生成策略。默认使用 assigned 生成器。这种方案要求开发者在应用程序中提供自己的主键生成算法:调用保存方法之前,先带着指定的值往数据库中跑一趟,检索是否存在重复,如果有,再试其它值;调用保存方法之前,先检索到表中 stuId 字段值的最大值,返回应用程序后递增 1,用于 stuId 新值。如果多个用户同时向数据中插入数据,这种方案会出问题,不适合并发操作环境。使用 assigned 生成器除非有一个很完美的解决方案,否则建议只用于学习或测试环境。本课程使用的是 Mysql 数据库,最佳选择 identity 生成器,主键值交给数据库的自动增长列自动生成。
- 2.2 使用主键生成器重构代码 在 Student 类的标识属性(stuId)上标注如下注解; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) public Integer getStuId() { return stuId; }简单得难以置信!空灵而干净!!使用 @GeneratedValue 注解确定主键生成器类型。GenerationType 是一个枚举类型,有如下几个选择:AUTO:Hibernate 区分数据库系统,自动选择最佳策略;IDENTITY: 适合具有自动增长类型的数据库,如 MySql……SEQUENCE: 适合如 Oracle 类型数据库;TABLE: 使用 Hibernate 提供的 TableGenerator 生成器,不常用。为了更好观察生成的新数据,重建数据库中的表。主配置文件中修改或添加如下配置信息; <property name="hbm2ddl.auto">create</property>执行插入数据实例; // 打开事务 try{ transaction = session.beginTransaction(); // 添加一条学生信息,此处没有指定学生编号 Student student = new Student("Hibernate 01", "男"); session.save(student); transaction.commit(); } catch(Exception e) { transaction.rollback(); } finally { session.close(); }进入 Mysql 系统查看,表结构中 stuId 自动设为主键,且为自动递增;查看表中数据,主键值自动生成;试着多加几条数据,别忘记修改如下配置信息。 <property name="hbm2ddl.auto">update</property>大功告成!!
- 3.快速生成控制器 若想要单应用 app\controller 目录下快速生成控制器和方法,可以使用如下命令:php think make:controller test如下图所示:生成的控制器文件内容如下:<?phpdeclare (strict_types = 1);namespace app\controller;use think\Request;class test{ /** * 显示资源列表 * * @return \think\Response */ public function index() { // } /** * 显示创建资源表单页. * * @return \think\Response */ public function create() { // } /** * 保存新建的资源 * * @param \think\Request $request * @return \think\Response */ public function save(Request $request) { // } /** * 显示指定的资源 * * @param int $id * @return \think\Response */ public function read($id) { // } /** * 显示编辑资源表单页. * * @param int $id * @return \think\Response */ public function edit($id) { // } /** * 保存更新的资源 * * @param \think\Request $request * @param int $id * @return \think\Response */ public function update(Request $request, $id) { // } /** * 删除指定资源 * * @param int $id * @return \think\Response */ public function delete($id) { // }}Tips: 其中快速生成几种常见的方法名,如果只想生成控制器可以使用 php think make:controller test --plain。
- 2. 生成器对象和生成器函数 有些概念是我们必须要理解的,前面在学习迭代器的时候,我们学习了迭代协议和迭代器协议,实现一个迭代器需要满足这两个协议才算是一个真正的迭代器。而本节的生成器和生成器函数也是如此,我们也需要知道生成器对象和生成器函数概念和它们直接的关系。Generator 就是我们说的生成器,它包含两个概念 生成器对象和生成器函数。首先,要理解的是生成器对象和迭代器的关系,生成器对象是遵守迭代协议和迭代器协议实现的 Iterable 接口,可以理解生成器对象其实也是一个迭代器;然后,我们需要理解什么是生成器函数,生成器函数是由 function * 来定义的,并且返回结果是一个 Generator 对象。生成器是一个特殊的函数,在调用后会返回一个生成器对象,这个生成器对象是遵守可迭代协议和迭代器协议实现的 Iterable 接口。生成器可以使用 yield 关键字来暂停执行的生成器函数:function* generator() { yield 'a'; yield 'b';}var gen = generator(); // Object [Generator] {}
- TypeScript 生成器(Generator) 迭代器和生成器这两个概念总是很容易混淆,经过上节的学习我们知道迭代器是一个对象,那么本节首先要记住:生成器是一种能够中途停止,然后从停止的地方继续运行的函数。可以借助 yield 或 return 停止函数运行。
hibernate id生成器相关搜索
-
h1
h6
hack
hadoop
halt
hana
handler
hanging
hash
hashtable
haskell
hatch
hbase
hbuilder
hdfs
head
header
header php
headers
headerstyle