ORM(Object Relational Mapping) 是对象到关系的映射,它的作用是在关系数据库与对象之间建立一个自动映射,将关系数据库中的表映射成为对象(持久化类)。
Hibernate通过持久化类(*.java)、映射文件(*.hbm.xml)和配置文件(*.cfg.xml)操作关系型 数据库。
Hibernate中最重要的3个类: 配置类(Configuration)、会话工厂类(SessionFactory)和会话类(Session)
Configuration:数据库驱动、数据库URL、数据库用户名、数据库用户名密码、数据库适配器(dialect)
SessionFactory:会话工厂类是生产Session的工厂,保存了当前数据库中所有的映射关系。它是一个线程安全类。
Session:Hibernate中数据库持久化的核心,负责Hibernate中所有持久化操作(增、删、改、查)。它是一个非线程安全类,不要多线程共享一个Session
获取Hibernate
可以通过MyEclipse向项目添加Hibernate模块,也可以导入Hibernate包
Hibernate配置文件(*.cfg.xml)
数据库驱动、数据库连接URL、数据库连接用户名、数据库连接用户密码、Hibernate方言、打印SQL语句、映射文件
持久化类
默认构造方法(必选)、标识属性、为属性声明访问器
Hibernate映射
持久化类的与表的映射配置
持久化类中属性与表中字段的映射配置(主键、外键、普通属性)
实体关联关系:多对一单向关联、多对一双向关联、一对一主键关联、一对一外键关联、多对多关联
实体继承关系:SuperClass、SubClassA、SubClassB
类继承树映射成一张表:只有一张表包含父类和子类的所有字段信息,通过type字段区分不同实体对象的信息
每个子类映射成一张表:父类和子类创建3张表,分别保存各自的字段信息,通过id联系。
每个具体类映射成一张表:为SubClassA、SubClassB创建两个表,表中字段为父类字段和字段组合
系统性能优化:延时加载 和 缓存
延时加载:load()方法,load()方法加载持久化对象时,它返回的是一个未初始化的代理,直到调用代理的某个方法是Hibernate才会访问数据库。
Product product =(Product) session.get(Product.class,new Integer("1"));
lazy属性,通过设置持久类映射文件中的<property>元素中的lazy属性
<property name = "username" type = "string" length ="45" lazy = "true">
<column name = "username">
</property>
缓存:一级缓存(Session 缓存)和二级缓存(SessionFactory 缓存)
同一个Session中可以共享一级缓存
不同Session间可以共享二级缓存
Hibernate未提供二级缓存的产品化实现,需要单独配置(Hibernate 配置文件中开启二级缓存并导入相应包、持久化类中指定缓存策略、项目classpath 根目录中加入缓存配置文件ehcache.xml)
查询数据中get和load方法的区别
get方法会立刻访问数据,load方法只有在返回的代理对象被调用时才会发出SQL访问数据