分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

学习之hibernate下册

发布时间:2023-09-06 01:30责任编辑:苏小强关键词:暂无标签
QBC(Query By Criteria)
@Test ???public void getList(){ ???????SessionFactory factory = HibernateUtils.getSessionFactory(); ???????Session session = factory.getCurrentSession(); ???????session.beginTransaction(); ???????// ???????Criteria criteria = session.createCriteria(Person.class); ???????List<Person> list = criteria.list(); ???????for(Person person : list){ ???????????System.out.println(person); ???????} ???????session.getTransaction().commit(); ???????factory.close(); ???}
分页查询
@Test ???public void getPage(){ ???????SessionFactory factory = HibernateUtils.getSessionFactory(); ???????Session session = factory.getCurrentSession(); ???????session.beginTransaction(); ???????// ???????Criteria criteria = session.createCriteria(Person.class); ???????criteria.setFirstResult(0); ???????criteria.setMaxResults(2); ???????List<Person> list = criteria.list(); ???????for(Person person : list){ ???????????System.out.println(person); ???????} ???????session.getTransaction().commit(); ???????factory.close(); ???}
排序查询
条件查询


GT: Greater Than , >
GE: Greater than or Equivalent with , >=
LT: Less than, <
LE: Less than or Equivalent with, <=
EQ:equal with, ==
NE: Not equal with, /=

离线查询

先进行查询语句的拼装, 和以往在查询的时候拼装不同,往往是再此进行优化的设置。

@Test ???public void detachedCriteria(){ ???????//假设此处是service层,在此组装查询条件 ???????DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Person.class); ???????detachedCriteria.add(Restrictions.like("name", "%p%")); ???????detachedCriteria.add(Restrictions.gt("age", 32)); ???????// dao ???????SessionFactory factory = HibernateUtils.getSessionFactory(); ???????Session session = factory.getCurrentSession(); ???????session.beginTransaction(); ???????//采用从业务层传递过来对象进行查询 ???????Criteria criteria = detachedCriteria.getExecutableCriteria(session); ???????List<Person> list = criteria.list(); ???????for(Person person : list){ ???????????System.out.println(person); ???????} ???????????????session.getTransaction().commit(); ???????factory.close(); ???}
缓存

缓存(Cache): 计算机领域非常通用的概念。它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写硬盘(永久性数据存储源)的频率,从而提高应用的运行性能。缓存中的数据是数据存储源中数据的拷贝。缓存的物理介质通常是内存
缓存:程序<--(内存)-->硬盘

1.hibernate 提供缓存机制:一级缓存、二级缓存

  1. 一级缓存:session级别缓存,在一次请求中共享数据。
  2. 二级缓存:sessionFactory级别缓存,整个应用程序共享一个会话工厂,共享一个二级缓存。
  3. SessionFactory的缓存两部分:
    a)内置缓存:使用一个Map,用于存放配置信息,预定义SQL语句等,提供给Hibernate框架自己使用,对外只读的。不能操作。
    b)外置缓存:使用另一个Map,用于存放用户自定义数据。默认不开启。外置缓存hibernate只提供规范(接口),需要第三方实现类。外置缓存有成为二级缓存。

1.适合放入二级缓存中的数据:

  • a)很少被修改
  • b)经常被访问
  • c)不是很重要的数据, 允许出现偶尔的并发问题

2.不适合放入二级缓存中的数据:

  • a)经常被修改
  • b)财务数据, 绝对不允许出现并发问题

缓存供应商:
1.EHCache: 可作为进程(单机)范围内的缓存, 存放数据的物理介质可以是内存或硬盘, 对 Hibernate 的查询缓存提供了支持。--支持集群。(
2.OpenSymphony `:可作为进程范围内的缓存, 存放数据的物理介质可以是内存或硬盘, 提供了丰富的缓存数据过期策略, 对 Hibernate 的查询缓存提供了支持
3.SwarmCache: 可作为集群范围内的缓存, 但不支持 Hibernate 的查询缓存
4.JBossCache:可作为集群范围内的缓存, 支持 Hibernate 的查询缓存(

  1. 导入jar包:ehcache-1.5.0.jar/ commons-logging.jar/ backport-util-concurrent.jar
  1. 开启二级缓存
  2. 确定二级缓存提供商
  3. 确定需要缓存内容
    1. 配置需要缓存的类

    2. 配置需要缓存的集合

  4. 配置ehcache自定义配置文件
    非严格读写(notstrict-read-write)不保证Cache和数据库之间的数据库的一致性。使用此策略时,应该设置足够的缓存过期时间,否则可能从缓存中读出脏数据。当一些数据极少改变,并且当这些数据和数据库有一部份不量影响不大时,可以使用此策略。

解读它的配置文件

 <defaultCache ???????????maxElementsInMemory="10000" // cache中最多保存对象的数量 ???????????eternal="false" // 缓存中的对象是否永久 ???????????timeToIdleSeconds="120" // 缓存数据的钝化时间(设置对象在过期之前的空闲时间) ???????????timeToLiveSeconds="120" // 缓存数据的生存时间(设置对象在过期之前的生存时间),如果用到再次加载 ???????????overflowToDisk="true" // 内存不足时,是否采用磁盘储存。 ???????????memoryStoreEvictionPolicy=" LRU " // 内存不足时对对象的清楚策略ehcache中缓存的三种情况策略FIFO:先进先出LFU:一直以来很少被使用LRU:最近很少被使用,清楚离储存数据的时间戳最远的对象
查询缓存

1.查询缓存又称为三级缓存
2.查询缓存默认不使用。需要手动开启
3.查询缓存:将HQL语句与 查询结果进行绑定。通过HQL相同语句可以缓存内容。
a)默认情况Query对象只将查询结果存放在一级和二级缓存,不从一级或二级缓存获取。
b)查询缓存就是让Query可以从二级缓存获得内容。

使用步骤
1.开启二级缓存
2.在查询query对象,设置缓存内容(注意:存放和查询 都需要设置)

@Test ???/** ????* 查询集合 ????*/ ???public void testQueryCache(){ ???????SessionFactory factory = HibernateUtils.getSessionFactory(); ???????Session session = factory.getCurrentSession(); ???????session.beginTransaction(); ???????// ???????Query query = session.createQuery("from Person"); ???????//设置使用查询缓存 ???????query.setCacheable(true); ???????query.list(); ???????// ???????session.getTransaction().commit(); ???????//开启一个新的session ???????Session session2 = factory.getCurrentSession(); ???????session2.beginTransaction(); ???????Query query2 = session2.createQuery("from Person"); ???????query2.setCacheable(true); ???????query2.list(); ???????session2.getTransaction().commit(); ???????????????factory.close(); ???}
批量处理

批量插入
批量更新
批量删除

整合c3p0连接池
配置事务隔离级别
  1. 乐观锁
  2. 悲观锁
整合篇章

学习之hibernate下册

原文地址:http://www.cnblogs.com/jwlxtf/p/8046224.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved