hibernate一级缓存介绍与实践

来源:互联网 发布:即时语音翻译软件 编辑:程序博客网 时间:2024/06/06 16:33

 

  1).hibernate一级缓存又称为“Session的缓存”。

              Session内置不能被卸载,Session的缓存是事务范围的缓存(Session对象的生命周期通常对应一个数据库事务

              或者一个应用事务)。

              一级缓存中,持久化类的每个实例都具有唯一的OID。

 2).一级缓存的管理:

               evit(Object obj) 将指定的持久化对象从一级缓存中清除,释放对象所占用的内存资源,

                                         指定对象从持久化状态变为脱管状态,从而成为游离对象。

               clear() 将一级缓存中的所有持久化对象清除,释放其占用的内存资源。

               contains(Object obj)判断指定的对象是否存在于一级缓存中。

               flush() 刷新一级缓存区的内容,使之与数据库数据保持同步。

3)一级缓存应用:

             save()。当session对象调用save()方法保存一个对象后,该对象会被放入到session的缓存中。

             get()和load()。当session对象调用get()或load()方法从数据库取出一个对象后,该对象也会被放入到session的缓中。

             使用HQL和QBC等从数据库中查询数据。

4)hibernate一级缓存(默认开启)演示

(1)创建Java项目,整个项目如图所示

 

(2)创建实体类Book(id,name),并且创建book.hbm.xml映射文件

(3)加载hibernate1.cfg.xml文件

<!DOCTYPE hibernate-configuration PUBLIC
 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory name="foo">
        <!-- 配置数据库信息 -->
  <!-- 数据库方言 -->
  <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- 链接数据库 -->
        <property name="connection.url">jdbc:MySQL://127.0.0.1:3306/zk</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.username">root</property>
        <property name="connection.password">1111</property>
        <!-- 其他配置 -->
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.format_sql">false</property>
        <!--
   create:先删除,再创建
   update:如果表不存在就创建,不一样就更新,一样就什么都不做。
   create-drop:初始化时创建表,SessionFactory执行close()时删除表。
   validate:验证表结构是否一致,如果不一致,就抛异常。
   -->
   <property name="hbm2ddl.auto">update</property>
   <mapping resource="com/lqq/dto/book.hbm.xml"/>  
   </session-factory>
</hibernate-configuration>

(4)测试类Test1

//加载hibernate1.cfg.xml文件并创建SessionFactory
 Configuration conf = new Configuration();
 SessionFactory factory = conf.configure("hibernate1.cfg.xml").buildSessionFactory();
 //创建session
 Session session = factory.openSession();
 //获取
 Book book1 = (Book) session.get(Book.class, 1);
 System.out.println(book1);
 Book book2 = (Book) session.get(Book.class, 1);
 System.out.println(book2);
 //关闭session
 session.close();
 //关闭factory
 factory.close();

(5)效果图(注意: 输出结果中只有一条select sql语句)


原创粉丝点击