系列文章目录
一、SQL、Hibernate和对象类型对应
代码里面怎么去对应数据库里面的数据类型
二、hibernate主键的生成策略讲解——重点
generator:id的生成策略
increment:也会自动增长id,但是它的这种增长是自己Hibernate实现
执行select max(id) 查询,这种会有线程并发问题(多线程同时执行max,哪个最大,直接懵逼,id同时加1,后面必有一个插不进去)
简单来说这种就是按照最大的后面来,如果id是 1,2,15,后面它就会自动生成16
sequence:一般在oracle数据库才用
hilo:hibernate自己实现的id规则【不用,不用学】
native:【经常常用】
如果是mysql数据库,id会自动增长-不会去查max Id 是mysql内部实现的,不存在线程问题
(假如,我们插入两条数据,id分别为1,2,此时我们吧2删了,再插入,会是3,而不是2,因为mysql内部记录了2已经用过了,而increment则会是2,因为max是1,1+1 是2,它们的原理是不同的)
如果是oracle数据库,会自动增长,sequence
uuid:【经常常用】一个长字符串,需要把模型的id改成字符串
保存的时候,不用自己设置ID,hibernate会设置id
assigned:要手动设置id属性(id可以不是String类型,也可以是String类型)
注意:uuid的模型是有要求的,改完数据类型之后,get、set 也要重新改一下 返回的数据类型,也应该是String,并且数据库也要是String类型对应的类型
我们直接把表删了,让hibernate自动帮我们设置数据类型即可
注意如果原来的表存在可能插不进,要删掉,因为原来的表 id是 int类型 我们uuid的 id数据类型 是String
assigned:要手动设置id属性注意,id可以不是String类型,也可以是String类型或者int类型
总结
1、基本类型无法表达null,包装类默认值是null,当对于默认值有业务意义的时候需要使用包装类,很多情况下我们都需要使用包装类
2、我们一定要知道有一个概念,那就是数据类型实际上是有一个对应关系的
3、generator:id的生成策略,这三个常用的必须掌握
native:【经常常用】
如果是mysql数据库,id会自动增长
如果是oracle数据库,会自动增长,sequence
uuid:【经常常用】一个长字符串,需要把模型的id改成字符串
保存的时候,不用自己设置ID,hibernate会设置id