首页 > 编程知识 正文

一级缓存和二级缓存的区别(hibernate框架介绍)

时间:2023-05-06 00:35:42 阅读:71545 作者:3036

另一方面,Hibernate介绍1,Hibernate是一个ORM框架,即持久层框架,应用于DAO层,对JDBC进行封装,程序可以直接以面向对象的方式完成对数据库的操作2、ORM框架,那么ORM是什么?

O:Object

r :关系

m :映射

ORM是对象关系映射(Object Relational Mapping,简称ORM ) ),关注对象与数据库中对应表之间的关系。 通过编写在对象和数据库之间映射的元数据,可以自动将程序中的对象持久化到关系数据库中。 提供了到数据库的映射,使您可以像操作对象一样从数据库检索数据,而无需使用SQL编码。 二、Hibernate核心配置文件介绍1、hbm.xml

hbm.xml是对象到表映射的配置文件,命名约定:类名. hbm.xml

例如,数据库具有用户表,项目具有用户类,公共类用户{私有int id; 私有字符串用户名称; 私有字符串移动; 创建User.hbm.xml

! - -包含--User类的包名称----hibernate-mapping package=' com.JL.domain '! -类名为User,表名为user-- class name=' user ' table=' user '! -主键映射,属性名称为id,列名称也为id-- id name='id' column='id '! -主键生成策略- -生成器类=' native '//id! -非主键映射,属性和列名称一一对应--property name=' username ' column=' username '/property name=' mobile ' column=' mmn -1.数据库连接配置--property name=' hibernate.connection.driver _ class ' com.MySQL.JDBC.driver/property property name=' hibernate.connection.URL ' JDBC : MySQL ://192.168.1.23:3306/JL/property property name=' hibernate.connection.username ' root/property property name=' hibernate.connection.password 根据不同的方言生成符合当前数据库语法的SQL---property name=' hibernate.dialect ' org.hibernate.dialect.MySQL5dialect-- -- 2.1显示hibernate在运行时执行的sql语句--property name=' hibernate.show _ SQL ' true/property! -- 2.2格式SQL-- property name=' hibernate.format _ SQL ' true/property! -- 2.3自动生成表----property name=' hibernate.hbm2DDL.auto ' create/property! -3.加载映射配置文件---映射资源=' com/JL/domain/user.hbm.XML '/session-factory/hibernate-confilion

kage 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语句查询数据; 三、Hibernate一级缓存、二级缓存 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文件中配置

<property name="hibernate.cache.use_second_level_cache">true</property>

3.配置二级缓存提供商

<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>

4.设置二级缓存并发访问策略,有两种方式(设置哪些数据保存到二级缓存中)
方式1.一种是在hbm.xml文件中配置

<class name="com.jl.domain.User" table="user" ><!-- 类级别缓存 --><cache usage="read-write"/><set name="user" cascade="all-delete-orphan" inverse="true" ><!-- 关联集合级别缓存 --><cache usage="read-write"/></set></class>

方式2.一种是hibernate.cfg.xml

<class-cache usage="read-write" class="com.jl.domain.User" />

5.导入二级缓存的配置文件
在src中 配置 ehcache.xml ,将 ehcache-1.5.0 jar包中 ehcache-failsafe.xml 改名 ehcache.xml 放入 src 。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。