主键生成策略---- Hibernate框架学习
叙:在之前的hibernate框架搭建入门中需要配置映射文件和核心配置文件,而在实体类的映射文件配置中有一个配置项是主键生成策略,当时并没有深入地学习,只是知道常用的有“native”的生成策略,那么,轻风暖云今天将会对主键生成策略的几个策略属性进行详细学习和记录。
主键生成策略
学习主键生成策略首先要明白什么是主键生成策略、它能够干什么等等,其次才是学习它由哪些种类及相应信息、如何使用它等,记得某位xxx家曾说过,带着疑问去学习,带着目的去学习(pass:我也不知道是谁说的~~~),因此,我们先就主键生成策略这个概念进行了解,然后再进行理论性的、深层次的学习;
主键生成策略介绍
所谓的主键生成策略,就是Hibernate提供了多种生成主键值的方法,因为,在平时开发中主键的设置不允许由用户来操作,一般交由数据库,手动编写程序设置,在hibernate框架中为了减少编写设置主键的代码量,所以出现了几种适用于各种情况下的主键生成策略;
因此,我们从上面了解到主键生成策略的一些信息归纳为:
- 什么是主键生成策略:hibernate中为了减少编写设置主键信息代码的量产生的一个辅助功能;
- 主键生成策略能干啥:根据业务需要,手动配置各种主键的生成管理机制,减少程序员的编码量;
那么,接下来就是学习主键生成策略的种类及相应信息和使用方法了;
主键生成的策略种类
既然是配置好的功能能直接使用就说明需要有一定的局限性,即:每种策略对应一种情况;总结为七种策略,下面详细的进行学习;
序号 | 策略名 | 介绍 | 备注 |
---|---|---|---|
1 | incerment | hibernate中提供的一种自动增长机制,适用于short、int、long等类型的主键。只能在单线程中使用; | 运行机制:首先发送一条语句:select max(id) from table_name ;获得现存数据的最大ID值,然后让ID+1作为下一条存进来的数据的ID; |
2 | indentity | 适用于short、int、long等类型的主键,使用的是数据库底层的自动增长机制 | MySQL、MSSQL均具有自动增长机制,Oracle不具有,因此只是用于对MySQL、MSSQL数据库操作 |
3 | sequence | 适用于short、int、long等类型的主键,采用的是序列机制 | Oracle具有序列机制,MySQL没有,因此只适用于Oracle数据库的操作 |
4 | UUID | 适用于字符串类型的主键,使用hibernate框架中的随机方式生成字符串类型的主键; | UUID的标准型式包含32个16进制数字,以连字号分为五段,形式为8-4-4-4-12的32个字符。示例:550e8400-e29b-41d4-a716-446655440000 |
5 | native | 本地主键生成策略,可以在identity和sequence两种策略方式中自动切换; | 最常用的一种生成策略 |
6 | assigned | 使用此策略后意为hibernate放弃对外键的管理权 | 使用此策略后需要用户自己手动编写程序或设置主键的信息; |
7 | foreigen | 一对一的一种关联映射情况下使用的(了解即可) | 限制性比较大,一般不使用 |
总结:主键是short、int、long类型的时候可以使用native,若主键是字符串类型的则使用uuid类型策略,特殊情况特殊考虑;
主键生成策略的使用
学习完主键生成的各种策略后就可以学习其使用方法了,下面的代码就是在映射文件中写入这个实体类映射的数据库表的主键生成策略(比较拗口,但是多读几遍会恍然大悟~~~);
<id name="cust_id" >
<generator class="native"></generator>
</id>
解释:
从这个代码片段中得知:
- 主键生成策略配置在映射文件中的主键设置标签(
<id></id>
)间 - 主键生成策略的标签是
<generator class="XXX"></generator>
,将主键生成的策略名替换了class的属性值“xxx”即可;
使用很方便简单,毕竟这个主键生成策略的目的就是减少程序员编写主键配置信息的代码,所以越简单当然约好啦!