Hibernate配置文件
hibernate程序中存在一个hibernate.cfg.xml的文件,该文件就是hibernate的配置文件,主要用于配置数据库的连接、事务管理以及指定Hibernate本身的配置信息和Hibernate映射文件信息。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.url"><![CDATA[
jdbc:mysql://localhost:3306/Bank?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT]]></property>
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<mapping class="table.BankCustomerInfoEntity" resource="table/BankCustomerInfoEntity.hbm.xml" />
</session-factory>
</hibernate-configuration>
hibernate.cfg.xml文件中的核心配置属性:
属性名 | 取值 | 说明 |
---|---|---|
hibernate.connection.driver_class | 驱动类名 | 设置数据库的驱动类 |
hibernate.connection.url | URL | 设置连接数据可得URL |
hibernate.connection.username | 用户名 | 设置连接数据库的用户名 |
hibernate.connection.password | 密码 | 设置连接数据库的密码 |
hibernate.dialect | 方言类名 | 针对不同的数据库提供的方言类名,允许Hibernate针对特定的数据库生成优化的SQL语句 |
hibernate.show_sql | true或false(默认) | 是否输出Hibernate操作数据库使用的SQL语句 |
hibernate.format_sql | true或false(默认) | 是否格式化输出的SQL语句 |
在hibernate.cfg.xml中使用mapping指定Hibernate映射文件,mapping有如下核心属性:
属性名 | 取值 | 说明 |
---|---|---|
class | 包名称.类名称 | 与数据表关联的实体类名称 |
resource | 映射文件路径 | 关联数据表与实体类的配置文件路径 |
Hibernate映射文件
Hibernate映射文件主要用于配置实体类与数据表之间的映射关系,在这个配置文件中,需要指定类/表映射配置、主键映射配置和属性/字段映射配置。映射文件命名方式为:className.hbm.xml。
<?xml version='1.0' encoding='utf-8'?>
<!--定义XML文件的文档结构,必须按照指定的顺序与名称编写文件-->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 定义简单Java类的完整名称,通过反射加载-->
<!-- 每一个映射文件都要求有一个与之对应的POJO类存在-->
<!-- name属性描述的是POJO类 ,而table属性描述的是这个类对应的数据表-->
<class name="table.BankCustomerInfoEntity" table="bank_customer_info" schema="bank">
<id name="bankCustomerId" type="java.lang.String" column="bank_customer_id" >
<generator class="native" />
</id>
<property name="bankCustomerAdr" column="bank_customer_adr" type="java.lang.String" />
<property name="bankCustomerCard" column="bank_customer_card" type="java.lang.String" />
<property name="bankCustomerDate" column="bank_customer_date" type="java.sql.Timestamp" />
<property name="bankAgentId" column="bank_agent_id" type="java.lang.String" />
</class>
</hibernate-mapping>
Hibernate应与实体类放在一起,在相同的包中,hibernate-mapping元素是每一个Hibernate映射文件的根元素,class元素时根元素hibernate-mapping元素的子元素,用以定义一个持久化类与数据表的映射关系。class元素常用属性如下:
属性名 | 是否必须 | 取值 | 说明 |
---|---|---|---|
name | 否 | 类名 | 持久化类或接口的Java全定义名称 |
table | 否 | 表名,默认是类名 | 对应的数据库表名 |
schema | 否 | 数据库schema名称 | 覆盖在根hibernate-mapping元素中指定的schema名称 |
catalog | 否 | 数据库catalog名称 | 覆盖在根hibernate-mapping元素中指定的catalog名称 |
id元素用于定义主键。大多数POJO类都有一个属性可以为每一个实例作为唯一的标识,id元素定义了该属性到数据库表主键字段的映射,id元素的常用属性如下:
属性名 | 是否必须 | 取值 | 说明 |
---|---|---|---|
name | 否 | 类名 | 持久化类的标识属性的名字‘ |
type | 否 | 数据类型 | 标识生成的主键字段的Java类型 |
column | 否 | 字段名称(默认为属性值) | 主键字段的名称 |
length | 否 | 一个数值 | 指定主键字段的长度 |
generator元素是id元素的子元素,用于指定主键的生成器,在一般开发中我们只会用到2种类型:
- assigned : 指派模式,用于业务主键,由Java应用程序负责生成标识符。
- native :自动模式,用于逻辑主键,由数据库自己负责生成标识符。
property元素用于持久化类的属性与数据表字段的映射,其常用的属性如下:
属性名 | 是否必须 | 取值 | 说明 |
---|---|---|---|
name | 是 | 类中的属性名称 | 持久化类的属性名 |
column | 否 | 表字段名称,默认为属性名字 | 对应的数据库表的字段名 |
type | 否 | 数据类型 | 指定对应数据库表中字段的类型 |
unique | 否 | true或false(默认) | 使用DDL为该字段添加唯一约束 |
not-null | 否 | true或false(默认) | 使用DDL为该字段添加可否为非空的约束 |
hibernate核心类库
- 取得配置文件信息:org.hibernate.cfg.Configuration 。所有的数据库连接信息包括映射信息都保存在hibernate.cfg.xml文件中,而整个Hibernate想要执行程序,那么自然需要读取文件,所以Configuration类的主要功能就是读取所有的配置资源信息,也就是说如果想要打开数据库,也需要Configuration类,Configuration有如下主要方法:
构造:public Configuration();
读取默认资源(hibernate.cfg.xml):public Configuration configure() throws HibernateException;
读取指定资源:public Configuration configure(String resource) throws HibernateException;
创建SessionFactory:public SessionFactory buildSessionFactory(ServiceRegistry serviceRegistry) throws HibernateException;
- 数据库的连接管理都由SessionFactory负责,而在SessionFactory里面需要控制缓存的操作(暂不考虑)SessionFactory可以打开新的数据库操作——Session,方法如下:
打开Session:public Session openSession() throws HibernateException;
- 数据库连接对象:org.hibernate.Session,负责所有数据的处理操纵及事务控制,此类有如下方法:
保存数据:public Serializable save(Object object);
返回主键
修改数据:public void update(Object object);
没有返回值
删除数据:public void delete(Object object);
没有返回值
根据ID读取:public <T>T load(Class<T> theClass, Serializable id);
根据ID读取:public <T>T get(Class<T> entityType, Serializable id);
创建Criteria查询:public Criteria createCriteria(Class persistentClass );
创建Query查询:public Query createQuery(String queryString);
创建并启用一个事务:public Transaction beginTransaction ();
创建事务:public Transaction getTransaction ();
- 事务处理接口:org.hibernate.Transaction。所有的Hibernate操作都不是自动提交的,全部交给Transaction来处理,Transaction有如下几个重要操做方法:
事务提交,执行更新:public void commit();
事务回滚:public void rollback();
打开事务:public void begin();
,如果使用的是beginTransaction ()方法创建的事务,此操作自动执行。