Hibernate框架介绍,一级缓存二级缓存

本文介绍了Hibernate作为ORM框架的基本概念和作用,它简化了数据库操作,通过面向对象的方式处理数据。详细阐述了核心配置文件hbm.xml和hibernate.cfg.xml的用途,以及如何进行数据库操作如保存、更新等。此外,还讨论了一级缓存和二级缓存的机制,包括它们的管理和并发策略。
摘要由CSDN通过智能技术生成
一、Hibernate介绍
  • 1、Hibernate是一种ORM框架,也就是持久层的框架,应用于DAO层,是对JDBC的一种封装,可以让程序直接通过面向对象的方式去完成对数据库的操作,可以做到不用手写SQL语句就能完成对数据库的各种操作。
  • 2、ORM框架,那么什么是ORM?
    O:Object
    R:Relational
    M:Mapping
    ORM就是对象关系映射(Object Relational Mapping,简称ORM),关注的是对象和数据库中对应表的关系。通过描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。提供了对数据库的映射,不用SQL编码,能够像操作对象一样从数据库中获取数据。
二、Hibernate核心配置文件介绍
  • 1、hbm.xml
    hbm.xml是对象和表映射的配置文件,命名规则: 类名.hbm.xml
    例如数据库有一个user表,在项目中有一个User类,做如下关联:
public class User {
	private int id;
	private String username;
	private String mobile;
}

编写User.hbm.xml

<!--User类所在的包名-->
<hibernate-mapping package="com.jl.domain">

    <!--类名为User,表名为user-->
    <class name="User"  table="user">

        <!--主键映射,属性名为id,列名也为id-->
        <id name="id" column="id">
            <!--主键生成策略-->
            <generator class="native"/>
        </id>
        
        <!--非主键映射,属性和列名一一对应-->
        <property name="username" column="username"/>
        <property name="mobile" column="mobile"/>
    </class>
</hibernate-mapping>
  • 2、hibernate.cfg.xml

<hibernate-configuration>
    <!-- 一个session-factory节点代表一个数据库 -->
    <session-factory>

        <!-- 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">123456</property>
        <!-- 数据库方言配置, hibernate在运行的时候,会根据不同的方言生成符合当前数据库语法的sql   -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>


        <!-- 2. 其他相关配置 -->
        <!-- 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. 加载映射配置文件-->
        <mapping resource="com/jl/domain/User.hbm.xml"/>

    </session-factory>
</hibernate-configuration>
  • 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语句查询数据;
三、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 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值