- 1、Hibernate是一种ORM框架,也就是持久层的框架,应用于DAO层,是对JDBC的一种封装,可以让程序直接通过面向对象的方式去完成对数据库的操作,可以做到不用手写SQL语句就能完成对数据库的各种操作。
- 2、ORM框架,那么什么是ORM?
O:Object
R:Relational
M:Mapping
ORM就是对象关系映射(Object Relational Mapping,简称ORM),关注的是对象和数据库中对应表的关系。通过描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。提供了对数据库的映射,不用SQL编码,能够像操作对象一样从数据库中获取数据。
- 1、hbm.xml
hbm.xml是对象和表映射的配置文件,命名规则: 类名.hbm.xml
例如数据库有一个user表,在项目中有一个User类,做如下关联:
public class User {
private int id;
private String username;
private String mobile;
}
编写User.hbm.xml
- 2、hibernate.cfg.xml
com.mysql.jdbc.Driver jdbc:mysql://192.168.1.23:3306/jl root 123456 org.hibernate.dialect.MySQL5Dialect true true create
- 3、测试
package com.jl.domain;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
public class Test {
public static void main(String[] args) {
//创建对象
User user = new User();
user.setUsername("张三");
user.setMobile("13111111234");
//获取加载配置管理类
Configuration configuration = new Configuration();
//默认加载src/目录下的hibernate.cfg.xml配置文件
configuration.configure();
//创建Session工厂对象
SessionFactory factory = configuration.buildSessionFactory();
//得到Session对象
Session session = factory.openSession();
//开启事务
Transaction transaction = session.getTransaction();
transaction.begin();
//把数据保存到数据库中
session.save(user);
//提交事务
transaction.commit();
//关闭Session
session.close();
}
}
上面代码执行完成,数据库就会自动建表,并且包数据存入数据库中。
- 4、其他操作:
session.save(obj); // 保存一个对象
session.update(obj); // 更新一个对象
session.saveOrUpdate(obj); // 保存或者更新的方法
session.get(javaBean.class, int id); // 传入对应的class和id就可以查询
session.load(javaBean.class, int id); // 支持懒加载,
get和load都是根据主键查询,区别是session.get调用就发送SQL语句查询数据库,而session.load会延迟加载,调用后并不会马上发送SQL语句,而是后面用到这个对象的时候才会发送SQL语句查询数据;
- 1、一级缓存
一级缓存是Hibernate框架自带的,我们无法手动干预,由hibernate自己管理,一级缓存是session级别的缓存,只有在使用同一个session操作数据库才会生效。
一级缓存常见操作:
1) flush : 修改一级缓存数据,针对内存操作, 需要在session执行flush操作时,将缓存变化同步到数据库,只有在 缓存数据 与 快照区 不同时,生成update 语句;
2) clear : 清除所有对象 一级缓存 ;
3) evict : 清除一级缓存 指定对象 ;
4) refresh :重新查询数据库,更新快照和一级缓存; - 2、二级缓存
二级缓存是sessionFactory缓存,它可以被多个session共享。
1)二级缓存的并发策略:
transactional : 提供Repeatable Read事务隔离级别 ,缓存支持事务,发生异常的时候,缓存也能够回滚;
read-write : 提供Read Committed事务隔离级别, 更新缓存的时候会锁定缓存中的数据;
nonstrict-read-write : 导致脏读, 很少使用 ;
read-only: 数据不允许修改 ,只能查询;
2)二级缓存配置步骤:
1.导入jar包
ehcache-1.5.0.jar,依赖 backport-util-concurrent 和 commons-logging
2.开启二级缓存,在hibernate.cfg.xml文件中配置
true
3.配置二级缓存提供商
org.hibernate.cache.EhCacheProvider
4.设置二级缓存并发访问策略,有两种方式(设置哪些数据保存到二级缓存中)
方式1.一种是在hbm.xml文件中配置
方式2.一种是hibernate.cfg.xml
5.导入二级缓存的配置文件
在src中 配置 ehcache.xml ,将 ehcache-1.5.0 jar包中 ehcache-failsafe.xml 改名 ehcache.xml 放入 src 。



