主键生成策略

#2020云栖大会#阿里云海量offer来啦!投简历、赢阿里云限量礼品及阿里云ACA认证免费考试资格!>>> hot3.png

主键生成策略 3ea6fecf6df3356a56453955710e9a422c3.gif




  1. 主键分类

  2. 生成策略



0 1 主键分类


主键可分为自然主键和代理主键


什么是自然主键?



  • 主键本身就是表中的一个字段


  • 实体中一个具体的属性,对象本身唯一的特性




什么是代理主键?



  • 主键本身不是表中必须的一个字段


  • 仅仅是额外的一个参数能够标识不同记录




在实际开发当中一般采用那种主键?


    采用代理主键。因为主键是唯一的标识,不方便直接修改,如果主键就是对象的属性比如学生学号作为主键,如果记录时输入错了则不好去修改有悖于开闭原则。采用代理主键对象的所有属性都不是主键,主键由代码自动产生一串唯一的标识,那么所有属性都是普通字段可以方便修改

faef50434e354c84b5234db83e38330c1c3.gif



02 主键生成策略


既然要用代理主键,是属性之外的,所以交给程序自动生成而不是用户输入


一般这个自动生成交给数据库的自动增长来生成唯一标识


在hibernate当中,为了减少程序的编写,内部提供了多种的主键生成策略


increment自动增加策略(整型)


查出最大的主键然后给他加1,就是新插入记录的主键,由程序设置不支持多线程


identity自动增长(整型)使用是数据库底层的增长策略,由数据库设置
sequence自动增长(整型)采用序列的方式
uuid(字符)


使用hibernate中随机生成字符串的主键


native本地策略


在identity和sequence自动切换


assigned

hibernate不会帮你管理主键自己手动调用或通过程序来去生成主键,通过手动设置


mysql自动增长用的是identity,oracle的支持的是sequence。一般使用增长策略用native就好



faef50434e354c84b5234db83e38330c1c3.gif






580af20fe1ddafc7faa8511c5b711fe083d.png bca1a101857c3c5888cd07b59af0b887233.jpg

它,

不仅仅是一个码



本文分享自微信公众号 - IT那个小笔记(qq1839646816)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

posted @ 2019-09-05 20:07  木瓜煲鸡脚  阅读(65)  评论(0)    收藏  举报