02.Hibernate配置文件之映射配置文件
映射文件,即xxx.hbm.xml的配置文件
<class>标签:用来将类与数据库表建立映射关系
属性:
name:类中的全路径
table:表名(如果类与表名一致,那么table属性可以省略)
catalog:数据库的名称(一般不需要写)
子标签:
<id>标签:用来将类中的属性和表中的主键建立映射,id就是用来配置主键的.
属性:
name:类中的属性名
column:表中的字段名(如果类中的属性名和表中的字段名相同,可以省略)
length:数据的长度。(如果数据库建立好了,可以不写;如果没创建好,生成表结构是,length最好指定)
主键的类型和生成策略在文章后面介绍
<property>标签:将类中的属性与表中的字段建立映射
属性:
name:类中的属性名
column:表中的字段名(如果类中的属性名和表中的字段名相同,可以省略)
length:数据的长度
type:数据类型(一般不需要写)
Hibernate的数据类型:type="string"
Java的数据类型:type="Java.lang.String"
数据库字段的数据类型:<column name="xxx" sql-type="varchar"/>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <!-- 配置类和表结构的映射 --> <class name="com.hibernateday1.domain.Customer" table="cst_customer" catalog="hibernate_day01"> <!-- 配置id name:JavaBean的属性 column:表结构的字段 --> <id name="cust_id" column="cust_id"> <!-- 主键的生成策略 --> <generator class="native"/> </id> <!-- 配置其他属性 --> <property name="cust_name"> <column name="cust_name" sql-type="varchar"/> </property> <property name="cust_user_id" column="cust_user_id" /> <property name="cust_create_id" column="cust_create_id" /> <property name="cust_source" column="cust_source" type="string"/> <property name="cust_industry" column="cust_industry" type="java.lang.String"/> <property name="cust_level" column="cust_level"/> <property name="cust_linkman" column="cust_linkman"/> <property name="cust_phone" column="cust_phone"/> <property name="cust_mobile" column="cust_mobile"/> </class> </hibernate-mapping>
主键的类型
- 自然主键:对象本身的一个属性作为主键。
- 代理主键:为对象单独创建一个字段,最为主键。(开发中推荐的使用方式)
主键的生成策略
- 1.increment :适用于short,int,long作为主键
不是使用的数据库自动增长机制,Hibernate提供的一种增长机制
当前数据库最大值+1作为新纪录的主键
问题:不能再并发访问个集群情况下使用
- 2.indentity:适用于short,int,long作为主键,但是必须使用在有自动增长的数据库中,采用的是数据库底层的增长机制
底层使用的是数据库的增长机制(auto_increment),想Oracle数据库没有自动增长机制
- 3.sequence:适用于short,int,long作为主键,底层使用的是序列的增长方式
Oracle实现自动增长,需要使用序列
- 4.uuid:☆☆☆☆☆适用于char,varchar类型作为主键
使用随机的字符串作为主键
- 5.native:☆☆☆☆☆本地策略,根据底层数据库的不同,自动选择适合该数据库的生成策略(short,int,long)
MySQL:indentity
Oracle:sequence
- 6.assigned:主键生成不要Hibernate管理,必须手动设置主键