1.隐射文件的配置
每一个model都有个一个相应的隐射文件,命名规范:模型类.hbm.xml, 位置可以任意,但是建议放在model的同级包下。
- class:映射类
属性:
name:要映射的model的全路径
table:model映射到数据库的表名
2.属性的映射
property:属性的映射
属性:
name:模型类的属性名
column:映射到表中的列名
type:hibernate提供的数据类型,可以由java的数据类型转换成数据库中的数据类型
length:映射到数据库中的字段的长度
not-null:非空,true false
unique-key: 唯一约束的键名3.主键映射
<!--id
是主键映射的配置
-->
<id name="userId" column="user_id">
<!--generator主键映射的策略-->
<generator class="assigned"></generator>
</id>
映射策略:
assigned:手动指定id,在实际项目中基本不用
increment:通过获得当前id的最大值的方式然后在最大值上加1来指定主键,在实际项目中不去使用,因为有并发安全问题
Hibernate: select max(user_id) from t_user
Hibernate: insert into t_user (uname, gender, birthday, user_id) values (?, ?, ?, ?)
- 如:下图如果A先插入数据库中的主键最大值就是2,B这时来插入就出现了主键重复。
identity:使用mysql的自增,前提是model类的oid是数值类型,映射column也是数值类型。这种自增没有并发问题,因为主键的自增策略是由数据库管理(有锁机制)。
sequence:是Oracle数据库的自增策略。
native:是智能的自增策略,会根据数据库的方言来翻译到底是identify/sequence
uuid:通过hibernate生成一个32位的不重复的字符串,要求oid是字符串类型,相应的数据的id也是varchar,这种策略在实际项目中大量使用。
建议使用uuid,性能高。