配置文件之映射文件
映射文件通常保存在和实体bean的同一个包下,命名格式建议为:类名.hbm.xml,例如Customer.hbm.xml。
<hibernate-mapping>标签
:根节点
<class>标签
: 用来将类与数据库表建立映射关系,包含以下属性
- name:类的全路径
- table :表名,(类名与表名一致,那么table属性也可以省略)
- catalog:数据库的名称,基本上都会省略不写
<id>标签
: 用来将类中的属性与表中的主键建立映射,id标签就是用来配置主键的,包含以下属性:
- name :类中的属性名
- column :表中的字段名.(如果类中的属性名与表中的字段名一致,那么column可以省略.)
- length:字段的程度,如果数据库已经创建好了,那么length可以不写。如果没有创建好,生成表结构时,length最好指定。
<generator>标签
:主键的生成策略,一共有6种:
-
increment:适用于short,int,long作为主键.不是使用的数据库自动增长机制.
Hibernate中提供的一种增长机制,即
先进行查询 :select max(id) from user; 再进行插入:获得最大值+1作为新的记录的主键.
问题:不能在集群环境下或者有并发访问的情况下使用. -
identity:适用于short,int,long作为主键。但是这个必须使用在有自动增长数据库中(如mysql).采用的是数据库底层的自动增长机制.
底层使用的是数据库的自动增长(auto_increment).而Oracle数据库是没有自动增长则不能采用这种策略了. -
sequence:适用于short,int,long作为主键.底层使用的是序列的增长方式.
Oracle数据库底层没有自动增长,想自动增长需要使用序列. -
uuid:适用于char,varchar类型的作为主键.
使用随机的字符串作为主键. -
native:本地策略.根据底层的数据库不同,自动选择适用于该种数据库的生成策略.(short,int,long)
- 如果底层使用的MySQL数据库:相当于identity.
- 如果底层使用Oracle数据库:相当于sequence.
-
assigned:主键的生成不用Hibernate管理了.必须手动设置主键.
在上面6种策略当中,只有native和uuid策略是最常用的
<property>标签
: 用来将类中的普通属性与表中的字段建立映射,包含以下属性:
- name: 类中的其他属性名
- column:表中的字段名.(如果类中的属性名与表中的字段名一致,那么column可以省略.)
- length:数据长度
- type:数据类型(一般都不需要编写,如果写需要按着规则来编写)
- Hibernate的数据类型 type=“string”
- Java的数据类型 type=“java.lang.String”
- 数据库字段的数据类型添加子节点
<column name="name" 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="blog.csdn.net.mchenys.domain.Customer" table="cst_customer">
<!-- 配置类属性和表结构字段的映射
name属性:JavaBean的属性
column属性:表结构的字段
-->
<!--配置主键属性 -->
<id name="cust_id" column="cust_id">
<!-- 主键的生成策略 native表示由hibernate维护-->
<generator class="native" />
</id>
<!-- 配置其他的属性 -->
<property name="cust_name" column="cust_name" />
<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" />
<property name="cust_industry" column="cust_industry" />
<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>
配置文件之核心文件
核心配置文件必须放在web项目的src目录下,命名格式必须是hibernate.cfg.xml。
<hibernate-configuration>
标签:根节点
<session-factory>标签
:指定会话工厂,用于创建session用的,一个数据库对应一个SessionFactory标签。
<property>标签
:用于设置各种属性
<mapping>标签
:用于指定映射配置文件的路径,hibernate只有通过这里配置的路径才能找到javabean和数据库表的对应关系,也就是Xxx.hbm.xml文件。
5大必要属性包括:
设置数据库连接信息(占4个):
- hibernate.connection.driver_class – 连接数据库驱动程序
- hibernate.connection.url – 连接数据库URL
- hibernate.connection.username – 数据库用户名
- hibernate.connection.password – 数据库密码
设置方言(1个)
- hibernate.dialect – 操作数据库方言
可选的配置
- hibernate.show_sql – 显示SQL
- hibernate.format_sql – 格式化SQL
- hibernate.hbm2ddl.auto – 通过映射转成DDL语句
- create – 每次都会创建一个新的表,没什么意义。
- create-drop – 每次都会创建一个新的表,当执行结束之后,将创建的这个表删除,没什么意义。
- update – 如果有表,使用原来的表.没有表,创建一个新的表.同时支持新增字段,当不支持删除字段,通常使用这个。
- validate – 如果有表,使用原来的表.同时校验映射文件与表中字段是否一致如果不一致就会报错.
上面提到的这些属性其实都可以在hibernate下载的包里面找到,具体路径是在hibernate解压根目录\project\etc\hibernate.properties
下面是一个完整核心配置文件的配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<!-- 记住:先配置SessionFactory标签,一个数据库对应一个SessionFactory标签 -->
<session-factory>
<!-- 必须要配置的参数有5个,4大参数,数据库的方言 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">1234</property>
<!-- 数据库的方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 可选配置 -->
<!-- 显示SQL语句,在控制台显示 -->
<property name="hibernate.show_sql">true</property>
<!-- 格式化SQL语句 -->
<property name="hibernate.format_sql">true</property>
<!-- 生成数据库的表结构
update:如果没有表结构,创建表结构。如果存在,不会创建,可动态添加字段(新增属性和映射即可),不能删除字段
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 映射配置文件,需要引入映射的配置文件 -->
<mapping resource="blog/csdn/net/mchenys/domain/Customer.hbm.xml" />
</session-factory>
</hibernate-configuration>