Hibernate配置文件包括两种:
主配置文件:hibernate.cfg.xml,整个hibernate项目只有一个,它包含三部分内容:
1. 连接数据库信息:连接数据库字符串、连接数据库用户名,密码、驱动程序名称、方言。
1. 自己的属性配置:properties
2. 映射文件位置:指向多个映射文件位置
映射文件:多个,一般是一个表一个(多对多是三个表两个)。命名方式:表名.hbm.xml
一个映射文件使java项目中一个实体类与数据库一张表形成对应关系。
a) catalog值数据库名称,name指向实体类,必须是全名,包名+类名。
b) id只能出现一次 ,表示主键。
c) columm一定指的是数据库表列名,property,id指的是实体类属性名。
Hibernate反向工程做的三件事情:
1. 生成一个实体类,pojo类并实现了Serializable接口。
2. 生成映射文件。
3. 在主配置文件中指向生成的映射文件。
持久化:将程序数据在瞬时状态和持久状态之间转换的一种机制.
DAO:是一种程序数据访问层(持久化层)的设计思想,或者说DAO模式是持久化层的一个实现。
ORM:全称是Object-Relational-Mapping 即 对象关系映射--完成应用程序对象数据到关系型数据映射机制。
ORM和DAO的关系:ORM是DAO针对接口的关系型数据库的一种实现,本质就是一个DAO实现类。
Hibernate和ORM的关系:hibernate框架就是ORM思想的一个实现。
ORM框架与JDBC的关系:凡是java程序要与数据库交互,必须使用JDBC,Hibernate等框架只是把JDBC进行了封装.
Hibernate的及时加载和延迟加载
及时加载:session.get(class,int x);不管是否使用马上加载- -从数据库中取出数据加载到内层,优点:响应速度快,效率高。缺点:占用资源多;
延迟加载:session.load(class,int x);代码执行后并不马上执行sql语句从数据库中获取数据,而是在使用对象时候才加载,如果使用此状态,session要一直处于open状态。有点:响应速度慢。缺点:占用资源少;
Hibernate对象的三种状态
1.临时状态(未受管理状态):新创建的对象,临时态数据库中不一定有与之对应的数据。
2.持久化状态(管理状态):对对象进行持久化操作,包括save,delete,update,get,load,saveOrUpdate操作对象会变成持久态,持久态的数据在事务提交时会自动与数据库对应表自动匹配(把程序对象值赋给数据库表值)。
3.游离状态(未管理状态):session.clear(),session.close();对象变为游离态,游离态数据库中有与之对应的数据,游离态一定是由持久态转变的。
主键关系形成的一对一
形成:
外键表的外键既是外键表的主键,又是主键表的外键。
不允许使用延迟加载,lazy的值都为false----全部是即及时加载。
外键关系形成的一对一
形成:
就是普通的一对多关系,在给多的一方的外键加了一个唯一约束。
主键方依然是及时加载,但外键方只能是延迟加载 lazy值都是true。
HQL