映射文件详解
hibernate映射文件:实现POJO与DB表的映射配置
为方便维护一般将其放置在POJO同一目录下,并且命名为POJOName.hbm.xml;虽然一个映射文件可以配置多个POJO与DB表的映射关系,但一般一个映射文件只配置一个POJO映射数据库表的映射关系;
<?xml version="1.0" encoding="UTF-8"?>
<!--指定hibernate映射文件的DTD信息 -->
<!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 :持久化类的全路径
table : 对应数据库表名(类名与表名一致可以省略)
catalog :数据库名
-->
<class name="com.hibernate.demo1.Customer" table="cst_customer">
<!--id标签配置
建立类中的属性与表中的主键对应
1.name:标识属性名
2.column:对应数据库表的主键字段名
3.length:长度(当数据库中没有表,可以在代码中建立,运行程序的时候建立表)
4.type:数据类型
-->
<id name="cust_id" column="cust_id">
<!--generator标签配置
generator指定主键的生成策略
主键生成策略:
increment :hibernate中提供的自动增长机制,适用于long,short,int类型生成唯 一标识。在单线程程序适用
identity:适用short,int,long类型的主键,使用的是数据库底层的自动增强机制。适用于底层的自动增长机制的数据库有(mysql,mssql),但是Oracle是没有自动增长
sequence:适用short,int,long类型的主键,采用的是序列的方式(Oracle支持序列),mysql不支持
uuid:适用于字符串类型的主键,使用hibernate随机的方式生成字符串主键
native:本地策略,可以在identity和 sequence之间进行自动切换
assigned:hibernate放弃外键的管理,需要用户自行编写程序 或用户自己设置
foreign:外部的,一对一的一种关联映射的情况下使用
-->
<generator class="native"></generator>
</id>
<!-- 建立类中的普通属性和表中的字段名对应
1.name 类中的属性名
2.column 表中的字段名(当字段名与持久化类对应的属性名一致时可以省略)
3.length 长度
4.not-null 不允许为空
5.type 数据类型
6.unique 唯一
-->
<property name="cust_name" column="cust_name"></property>
<property name="cust_source" column="cust_source"></property>
<property name="cust_industry" column="cust_industry"></property>
<property name="cust_level" column="cust_level"></property>
</class>
</hibernate-mapping>
核心配置文件详解
hibernate核心配置文件的配置方式有两种
一种:属性文件的方式
hibernate.properties
(属性文件的方式不能引入映射文件,需要手动编写代码加载映射文件)
一种:xml文件的方式
hibernate.cfg.xml
在开发中比较常用xml的方式配置;通常将核心配置文件放置src目录下;
<?xml version="1.0" encoding="UTF-8"?>
<!---->
<!--hibernate核心配置文件的DTD信息-->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!--hibernate-configuration标签是连接配置文件的根元素-->
<hibernate-configuration>
<!---->
<session-factory>
<!--指定连接数据库所用的驱动-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- //localhost:3306/ -->
<!--指定连接数据库的url-->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/数据库名</property>
<!--指定连接数据库的用户名-->
<property name="hibernate.connection.username">root</property>
<!--指定连接数据库的密码-->
<property name="hibernate.connection.password">rootroot</property>
<!-- 配置Hibernate的方言 -->
<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>
<!--
自动建表 :hibernate.hbm2ddl.auto
none:不使用hibernate自动建立数据库
create :如果数据库中已经有表,删除,重新创建;如果没有,新建表
create-drop :如果数据库中已经有表,执行操作,再删除表;如果没有,新建,执行操作后再删除表
update:如果有表,使用原有的表,如果没有,创建新的表,(可以更新表结构)
validate:如果没有表,不会创建表,只会使用数据库中原有的表
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 引入映射文件 -->
<mapping resource="com/hibernate/demo1/Customer.hbm.xml" />
</session-factory>
</hibernate-configuration>