续上篇博文:【01】框架学习—Hibernate第一个入门案例
8.Hibernate的映射文件
这里只讲解三个主要标签:
<CLASS>标签:用来将类与数据库建立映射关系,其属性有:
name:类的全路径
table:表名(类名和表名一致时可省略)
catalog:数据库名称(一般不写,因为在核心配置文件中会写)
<id>标签:用来将类中的属性与表中的主键建立映射,即id标签是用来配置主键的,其属性有:
name:类中属性名
column:表中字段名(类中属性名与表中字段名一致时可省略)
length:字段的长度。如果表结构没有创建,生成时最好指定,一般不写
注意id子标签< generator>,是主键生成策略,class=”native”表示采用本地数据库的主键递增方式。
<property>标签:用来将类中普通属性与表中的其它字段建立映射,其属性有:
name:类中属性名
column:类中的字段名(类中属性名与表中字段名一致时可省略)
length:字段的长度。如果表结构没有创建,生成时最好指定,一般不写
type:数据类型,一般不写
9.Hibernate的核心配置文件hibernate.cfg.xml
必须的配置
数据库连接的四参数:
hibernate.connection.driver_class:连接数据库驱动程序
hibernate.connection.url:连接数据库URL
hibernate.connection.username:数据库用户名
hibernate.connection.password:数据库密码
方言:
hibernate.dialect:操作数据库方言(每种数据库特有的语言)
加载映射文件
xml方式:<mapping resource="com/iteheima/domain/Customer.hbm.xml" />
properties方式:需要在Java程序中加载
可选的配置
hibernate.show_sql:显示sql语句,但这样显示的sql语句没有格式化
hibernate.format_sql:格式化sql语句
hibernate.hbm2ddl.auto:通过映射转成DDL语句
①create:每次创建一个新的表,覆盖旧的表,用于测试
②create-drop:每次创建一个新的表,执行结束后删除表,用于测试
③update:如果有表,使用原来的表,没有表则创建。同时会更新表结构, 如果类中新增属性时会自动往表中加入字段。开发中常用
④validate:校验映射文件中类属性与表字段名是否匹配,不一致则报错,一般用于项目完成后
10.代码部分—Configuration类
Configuration对象用于配置并且启动Hibernate。
Hibernate应用通过该对象获得对象-关系映射文件中的元数据,以及动态配置Hibernate的属性,然后创建SessionFactory对象。
总结:Configuration加载Hibernate配置文件,获取SessionFactory对象。
其它应用(了解)
Hibernate支持xml和properties类型的配置文件。
xml配置文件:通过Configuration config = new Configuration().configure();加载配置文件。
properties配置文件:通过Configuration config = new Configuration();加载配置文件,但需要自己手动加载映射文件config.addResource(“映射文件路径”);
11.代码部分——SessionFactory接口
1)工厂类,是生成Session对象的工厂类。
2)特点:
*由Configuration通过加载配置文件创建该对象。
*SessionFactory对象中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句。同时,SessionFactory还负责维护Hibernate的二级缓存。
*预定义SQL语句
使用Configuration类创建了SessionFactory对象是已经在SessionFactory对象中缓存了一些SQL语句。
常用的SQL语句是curd(通过主键查询)。
*一个SessionFactory实例对应一个数据库,应用从该对象中获得Session实例。
*SessionFactory是线程安全的,意味着它的一个实例可以被应用的多个线程共享。
*SessionFactory是重量级的,意味着不能随意创建或销毁它的实例。如果只访问一个数据库,只需要创建一个SessionFactory实例,且在应用初始化时完成。
*SessionFactory需要一个较大的缓存,用来存放预定义的SQL语句及实体的映射信息。另外可以配置一个缓存插件,这个插件被称之为Hibernate的二级缓存,被多线程所共享。
3)关于二级缓存的图
4)总结
使用一个SessionFactory最好是应用启动时就完成初始化。
12.代码部分——Session接口
1)概述
Session提供和持久化有关的操作,CURD。
Session是程序与数据库交互操作的一个单线程对象,是Hibernate运作的中心。
Session是线程不安全的。
Session对象有一级缓存,显示执行flush之前,所有的持久化操作的数据都缓存在Session对象处。
2)特点
线程不安全,应避免多线程共用。
Session是轻量级的,每次客户请求分配独立的Session实例,用完后销毁。
Session的一级缓存。
3)常用方法
save(obj):插入记录。
delete(obj):删除记录。
get(Class, id):查询一条记录。
update(obj):更新记录。
saveOrUpdate(obj):保存与修改,数据不存在则保存,已存在则修改。
createQuery():HQL语句的查询方式。
13.代码部分——Transaction接口
1)Transaction是事务的接口
2)常用的方法
commit():提交事务。
rollback():回滚事务。
3)特点
Hibernate框架默认不自动提交事务,需要手动提交事务。
如果没有开启事务,那么每个Session的操作都相当于一个独立的事务。