HQL查询&连接池&二级缓存

Hibernate编程指南-概述、快速构建、HQL初步 Hibernate 概述 Hibernate ORM使开发人员可以更轻松地编写其数据超出应用程序进程寿命的应用程序。作为对象/关系映射(ORM)框架,Hibernate关注数据持久性,因为它适用于关系数据库(通过JDBC)。 Hibernate使您可以遵循自然的面向对象习惯用法(包括继承,多态性,关联,组合和Java集合框架)来开发持久类。 Hibernate不需要接口或基类来用于持久类,并使任何类或数据结构都可以持久化。 Hibernate支持延迟初始化,多种获取策略以及具有自动版本控制和时间戳记的乐观锁 阅读详情


一、hibernate查询

1.查询方式:

  1. Get/load主键查询

  2. 对象导航查询

  3. HQL查询,  Hibernate Query language  hibernate 提供的面向对象的查询语言。

  4. Criteria 查询,   完全面向对象的查询(Query ByCriteria  ,QBC)

  5. SQLQuery, 本地SQL查询

    缺点:不能跨数据库平台:如果该了数据库,sql语句有肯能要改

    使用场景: 对于复杂sql,hql实现不了的情况,可以使用本地sql查询。

------------------------------------------------------------------------------------------------------

1.HQL查询

public class App {
	
	private static SessionFactory sf;
	static {
		sf = new Configuration()
			.configure()
			.addClass(Dept.class)   
			.addClass(Employee.class)   // 测试时候使用
			.buildSessionFactory();
	}

	/*
	 * 1)	Get/load主键查询
		2)	对象导航查询
		3)	HQL查询,  Hibernate Query language  hibernate 提供的面向对象的查询语言。
		4)	Criteria 查询,   完全面向对象的查询(Query By Criteria  ,QBC)
		5)	SQLQuery, 本地SQL查询

	 */
	@Test
	public void all() {
		
		Session session = sf.openSession();
		session.beginTransaction();
		
		//1) 主键查询
//		Dept dept =  (Dept) session.get(Dept.class, 12);
//		Dept dept =  (Dept) session.load(Dept.class, 12);
		
		//2) 对象导航查询
//		Dept dept =  (Dept) session.get(Dept.class, 12);
//		System.out.println(dept.getDeptName());
//		System.out.println(dept.getEmps());
		
		// 3)	HQL查询
		// 注意:使用hql查询的时候 auto-import="true" 要设置true,
		//  如果是false,写hql的时候,要指定类的全名
//		Query q = session.createQuery("from Dept");
//		System.out.println(q.list());
		
		// a. 查询全部列
//		Query q = session.createQuery("from Dept");  //OK
//		Query q = session.createQuery("select * from Dept");  //NOK, 错误,不支持*
//		Query q = session.createQuery("select d from Dept d");  // OK
//		System.out.println(q.list());

		// b. 查询指定的列  【返回对象数据Object[] 】
//		Query q = session.createQuery("select d.deptId,d.deptName from Dept d");  
//		System.out.println(q.list());
		
		// c. 查询指定的列, 自动封装为对象  【必须要提供带参数构造器】
//		Query q = session.createQuery("select new Dept(d.deptId,d.deptName) from Dept d");  
//		System.out.println(q.list());
		
		// d. 条件查询: 一个条件/多个条件and or/between and/模糊查询
		// 条件查询: 占位符
//		Query q = session.createQuery("from Dept d where deptName=?");
//		q.setString(0, "财务部");
//		q.setParameter(0, "财务部");
//		System.out.println(q.list());
		
		// 条件查询: 命名参数
//		Query q = session.createQuery("from Dept d where deptId=:myId or deptName=:name");
//		q.setParameter("myId", 12);
//		q.setParameter("name", "财务部");
//		System.out.println(q.list());
		
		// 范围
//		Query q = session.createQuery("from Dept d where deptId between ? and ?");
//		q.setParameter(0, 1);
//		q.setParameter(1, 20);
//		System.out.println(q.list());
		
		// 模糊
//		Query q = session.createQuery("from Dept d where deptName like ?");
//		q.setString(0, "%部%");
//		System.out.println(q.list());
		

		// e. 聚合函数统计
//		Query q = session.createQuery("select count(*) from Dept");
//		Long num = (Long) q.uniqueResult();
//		System.out.println(num);
		
		// f. 分组查询
		//-- 统计t_employee表中,每个部门的人数
		//数据库写法:SELECT dept_id,COUNT(*) FROM t_employee GROUP BY dept_id;
		// HQL写法
//		Query q = session.createQuery("select e.dept, count(*) from Employee e group by e.dept");
//		System.out.println(q.list());
		
	
		
		
		session.getTransaction().commit();
		session.close();
	}
	
	// g. 连接查询
	@Test
	public void join() {
		
		Session session = sf.openSession();
		session.beginTransaction();
		
		//1) 内连接   【映射已经配置好了关系,关联的时候,直接写对象的属性即可】
//		Query q = session.createQuery("from Dept d inner join d.emps");
		
		//2) 左外连接
//		Query q = session.createQuery("from Dept d left join d.emps");

		//3) 右外连接
		Query q = session.createQuery("from Employee e right join e.dept");
		q.list();
		
		session.getTransaction().commit();
		session.close();
	}
	
	// g. 连接查询 - 迫切连接
	@Test
	public void fetch() {
		
		Session session = sf.openSession();
		session.beginTransaction();
		
		//1) 迫切内连接    【使用fetch, 会把右表的数据,填充到左表对象中!】
//		Query q = session.createQuery("from Dept d inner join fetch d.emps");
//		q.list();
		
		//2) 迫切左外连接
		Query q = session.createQuery("from Dept d left join fetch d.emps");
		q.list();
		
		session.getTransaction().commit();
		session.close();
	}
	
	// HQL查询优化
	@Test
	public void hql_other() {
		Session session = sf.openSession();
		session.beginTransaction();
		// HQL写死
//		Query q = session.createQuery("from Dept d where deptId < 10 ");
		
		// HQL 放到映射文件中
		Query q = session.getNamedQuery("getAllDept");
		q.setParameter(0, 10);
		System.out.println(q.list());
		
		session.getTransaction().commit();
		session.close();
	}
}

2.criteria查询

//4)	Criteria 查询,
	@Test
	public void criteria() {
		
		Session session = sf.openSession();
		session.beginTransaction();
		
		Criteria criteria = session.createCriteria(Employee.class);
		// 构建条件
		criteria.add(Restrictions.eq("empId", 12));
//		criteria.add(Restrictions.idEq(12));  // 主键查询
		
		System.out.println(criteria.list());
		
		
		session.getTransaction().commit();
		session.close();
	}


3.本地SQL语句查询


 

// 5)	SQLQuery, 本地SQL查询
	// 不能跨数据库平台: 如果该了数据库,sql语句有肯能要改。
	@Test
	public void sql() {
		
		Session session = sf.openSession();
		session.beginTransaction();
		
		SQLQuery q = session.createSQLQuery("SELECT * FROM t_Dept limit 5;")
			.addEntity(Dept.class);  // 也可以自动封装
		System.out.println(q.list());
		
		session.getTransaction().commit();
		session.close();
	}

分页查询

分页SQL:

         先查询总记录数,再分页查询。

// 分页查询
	@Test
	public void all() {
		
		Session session = sf.openSession();
		session.beginTransaction();
		
		 Query q = session.createQuery("from Employee");
		 
		 // 从记录数
		 ScrollableResults scroll = q.scroll();  // 得到滚动的结果集
		 scroll.last();							//  滚动到最后一行
		 int totalCount = scroll.getRowNumber() + 1;// 得到滚到的记录数,即总记录数
		 
		 // 设置分页参数
		 q.setFirstResult(0);
		 q.setMaxResults(3);
		 
		 // 查询
		 System.out.println(q.list());
		 System.out.println("总记录数:" + totalCount);
		
		session.getTransaction().commit();
		session.close();

二、hibernate对连接池的支持

连接池,

         作用: 管理连接;提升连接的利用效率!

         常用的连接池: C3P0连接池

 

Hibernate自带的也有一个连接池,且对C3P0连接池也有支持!

 

Hbm 自带连接池:

         只维护一个连接,比较简陋。

         可以查看hibernate.properties文件查看连接池详细配置:

 

#################################

### Hibernate Connection Pool ###    

#################################

 

hibernate.connection.pool_size 1        【Hbm 自带连接池: 只有一个连接】

 

 

 

###########################

### C3P0 Connection Pool###                      【Hbm对C3P0连接池支持】

###########################

 

#hibernate.c3p0.max_size 2                               最大连接数

#hibernate.c3p0.min_size 2                                最小连接数

#hibernate.c3p0.timeout 5000           超时时间

#hibernate.c3p0.max_statements 100     最大执行的命令的个数

#hibernate.c3p0.idle_test_period 3000    空闲测试时间

#hibernate.c3p0.acquire_increment 2     连接不够用的时候, 每次增加的连接数

#hibernate.c3p0.validate false

 

【Hbm对C3P0连接池支持,  核心类】

 告诉hib使用的是哪一个连接池技术。

#hibernate.connection.provider_classorg.hibernate.connection.C3P0ConnectionProvider

 

Hibernate.cfg.xml 中增加连接池相关配置:

<!-- 【连接池配置】 -->
		<!-- 配置连接驱动管理类 -->
		<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
		<!-- 配置连接池参数信息 -->
		<property name="hibernate.c3p0.min_size">2</property>
		<property name="hibernate.c3p0.max_size">4</property>
		<property name="hibernate.c3p0.timeout">5000</property>
		<property name="hibernate.c3p0.max_statements">10</property>
		<property name="hibernate.c3p0.idle_test_period">30000</property>
		<property name="hibernate.c3p0.acquire_increment">2</property>


三、二级缓存


Hibernate提供的缓存

         有一级缓存、二级缓存。 目的是为了减少对数据库的访问次数,提升程序执行效率!

 

一级缓存:

         基于Session的缓存,缓存内容只在当前session有效,session关闭,缓存内容失效!

         特点:

                   作用范围较小! 缓存的事件短。

                   缓存效果不明显。

二级缓存:

         Hibernate提供了基于应用程序级别的缓存, 可以跨多个session,即不同的session都可以访问缓存数据。 这个换存也叫二级缓存。

         Hibernate提供的二级缓存有默认的实现,且是一种可插配的缓存框架!如果用户想用二级缓存,只需要在hibernate.cfg.xml中配置即可;不想用,直接移除,不影响代码。

         如果用户觉得hibernate提供的框架框架不好用,自己可以换其他的缓存框架或自己实现缓存框架都可以。


二级缓存的使用


#hibernate.cache.use_second_level_cachefalse【二级缓存默认不开启,需要手动开启】

#hibernate.cache.use_query_cache true      【开启查询缓存】

 

## choose a cache implementation                   【二级缓存框架的实现】

 

#hibernate.cache.provider_classorg.hibernate.cache.EhCacheProvider

#hibernate.cache.provider_classorg.hibernate.cache.EmptyCacheProvider

hibernate.cache.provider_classorg.hibernate.cache.HashtableCacheProvider 默认实现

#hibernate.cache.provider_classorg.hibernate.cache.TreeCacheProvider

#hibernate.cache.provider_class org.hibernate.cache.OSCacheProvider

#hibernate.cache.provider_classorg.hibernate.cache.SwarmCacheProvider

 

二级缓存,使用步骤

1) 开启二级缓存

2)指定缓存框架

3)指定那些类加入二级缓存

4)测试

         测试二级缓存!

缓存策略:

<class-cacheusage="read-only"/>     放入二级缓存的对象,只读;

         <class-cacheusage="nonstrict-read-write"/> 非严格的读写

         <class-cacheusage="read-write"/>    读写; 放入二级缓存的对象可以读、写;

         <class-cacheusage="transactional"/>   (基于事务的策略)

 

<!-- 集合缓存[集合缓存的元素对象,也加加入二级缓存] -->

      <collection-cache

usage="read-write" collection="cn.itcast.b_second_cache.Dept.emps"/>

 

查询缓存

list() 默认情况只会放入缓存,不会从一级缓存中取!

   使用查询缓存,可以让list()查询从二级缓存中取!

查询缓存

list() 默认情况只会放入缓存,不会从一级缓存中取!

   使用查询缓存,可以让list()查询从二级缓存中取!

<!--****************** 【二级缓存配置】****************** -->

        <!-- a.  开启二级缓存 -->

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

        <!-- b. 指定使用哪一个缓存框架(默认提供的) -->

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

        <!-- 开启查询缓存 -->

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

        <!-- c. 指定哪一些类,需要加入二级缓存 -->

        <class-cache usage="read-write" class="cn.itcast.b_second_cache.Dept"/>

        <class-cache usage="read-only" class="cn.itcast.b_second_cache.Employee"/>

        <!-- 集合缓存[集合缓存的元素对象,也加加入二级缓存] -->

        <collection-cache usage="read-write" collection="cn.itcast.b_second_cache.Dept.emps"/>

       

App  测试类

 

public class App {

   

    private static SessionFactory sf;

    static {

        sf = new Configuration()

            .configure()

            .addClass(Dept.class)  

            .addClass(Employee.class)   // 测试时候使用

            .buildSessionFactory();

    }

    // 1. 测试二级缓存的使用

    // 没有/有用 二级缓存

    @Test

    public void testCache() {

        Session session1 = sf.openSession();

        session1.beginTransaction();

        // a. 查询一次

        Dept dept = (Dept) session1.get(Dept.class, 10);

        dept.getEmps().size();// 集合

        session1.getTransaction().commit();

        session1.close();

       

        System.out.println("------");

       

        // 第二个session

        Session session2 = sf.openSession();

        session2.beginTransaction();

        // a. 查询一次

        dept = (Dept) session2.get(Dept.class, 10);  // 二级缓存配置好; 这里不查询数据库

        dept.getEmps().size();

       

        session2.getTransaction().commit();

        session2.close();

    }

   

   

    @Test

    public void listCache() {

        Session session1 = sf.openSession();

        session1.beginTransaction();

        // HQL查询  【setCacheable  指定从二级缓存找,或者是放入二级缓存】

        Query q = session1.createQuery("from Dept").setCacheable(true);

        System.out.println(q.list());

        session1.getTransaction().commit();

        session1.close();

       

       

        Session session2 = sf.openSession();

        session2.beginTransaction();

        q = session2.createQuery("from Dept").setCacheable(true);

        System.out.println(q.list());  // 不查询数据库: 需要开启查询缓存

        session2.getTransaction().commit();

        session2.close();

    }

}

 


Hibernate 性能优化:告别慢查询,提升数据库访问性能 Hibernate 作为 ORM 框架,在高并发场景下可能面临性能瓶颈。本文探讨了 Hibernate 的性能优化策略,重点包括缓存机制、查询优化和批量操作。一级缓存和二级缓存可减少数据库访问,提升性能。查询优化通过拆分复杂查询和使用类型安全的 Criteria API 来避免性能问题。批量操作则通过减少数据库交互次数来提高效率。通过这些策略,开发者可以有效提升 Hibernate 的数据库访问性能,避免慢查询问题。 阅读详情

相关推荐

Labview程序框架介绍

当掌握LabVIEW基础知识并达到,理解单个小型模块程序会相对轻松。而若想进一步探索大型程序,就必然需要了解程序框架相关内容。LabVIEW常用的程序架构包括等。在多年工作中,我接触过的众多高级工程师所开发的大型程序,基本都基于这些架构搭建。接下来,将为大家详细介绍这些框架。

Misterlhw的博客 4619

hql二级缓存

为什么需要缓存 拉高程序的性能 关系型数据库:数据与数据之间存在关系(联系)的数据库 mysql/Oracle、sqlserver 非关系型数据库:数据与数据之间是不存在关系的,key-value 1、基于文件存储的数据库:ehcache 2、基于内存存储的数据库:redis、memcache 3、基于文档存储的数据库:mongodb ehcache的使用 2.1 导入相关依赖 n...

jc1121的博客 260

免费,Python蓝桥杯等级考试真题--第10级(含答案解析和代码)

Python中蓝桥杯算是含金量和难度最大的比赛之一,网上可以找到不少真题,不过要么零零散散要么付费才能解锁,而且大都是没答案和解析的,给学习者造成很大困扰。因此本文档打算整理历年等级考试、STEMA、省赛、国赛真题卷和解析,供大家学习参考。

1576

hive学习(二)之Hive的hql操作

一、hive操作 //Hive 显示列名/表头 set hive.cli.print.header=true; //hive设置本地资源执行 set hive.exec.mode.local.auto=true; 1、hive的DDL——data define language数据定义语言 1.1库的定义语言 1)创建数据库 create database if not exists 数据库名...

墨殇 863

Windows10检查Cuda和cuDNN是否安装成功?

简介:根据上篇博客已经完成了CUDA和cuDNN的安装步骤,完成对其的安装。下面将来检查它们是否安装成功。 1 .首先win+R进入CMD,在命令行输入nvcc -V,如下图所示,则表示cuda已经安装成功。 2 .进入到cuda的安装路径,C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\demo_suite,找到如下两个.exe文件: 首先执行:deviceQuery.exe,查看是否出现如下界面: 然后执行bandwid

jhsignal的博客 14万+

阿里云大模型 ACP 认证教材内容突变?这些改动藏着通关密码,不看亏大!

【摘要】核心章节大换血,安全合规融入实战场景,大模型微调用数学深度解析,部署章节带来阿里云产品对比实战攻略,甚至整章内容被替换成藏满学习彩蛋的行业趋势指南。这些改动不仅重塑考试重点,更暗藏官方命题风向——安全合规考场景方案,微调原理考几何解析,部署设计考分析框架。无论你是数学小白还是部署新手,这篇攻略都将带你吃透变动逻辑,附赠急救包和考点清单,帮你抓住这些“隐形加分项”,速来解锁通关秘籍!

davidkorhenn的博客 1755

hibernate(四)

hibernate查询查询概述1) Get/load主键查询 2) 对象导航查询 3) HQL查询, Hibernate Query language hibernate 提供的面向对象的查询语言。 4) Criteria 查询, 完全面向对象的查询(Query By Criteria ,QBC) 5) SQLQuery, 本地SQL查询 缺点:不能跨数据库平台: 如果该

gafeng123456的博客 5145

MIMO技术入门

MIMO:多天线技术,发射端和接收端有多个天线(注意:并不是指多个天线板,而是多套振子,每一套是一个独立的天线。) 4G:2、8天线 5G:4、64天线(64T64R) 手机也是多天线 MIMO实现效果的分类: 1)空间分集 。2)空间复用。3)波束赋形。 空间分集(space diversity) 作用:提升接收质量 利用多个天线发射或者接收一个数据流,避免单个信道衰落对整个链路的影响。(比如你的耳机坏了一只并不影响另一只) 空间复用(space multiplexing) 作用:提升速率 利

About1129的博客 2875

hibernate:真正理解二级缓存和查询缓存

关于hibernate的O/R映射我已经写了多篇文章,并且受到了广泛的欢迎。hibernate不仅仅是社区上一个受欢迎的小孩,他实际上是非常强大一致和可信赖的数据库映射工具。映射Java中的对象到关系型数据库中有很多你需要知道的面。hibernate为了线程简单的启动做了特殊的处理,并为了超复杂的映射提供了便利。 数据库和你的Java对象间的映射一个主要的关注点是性能问题,那些没有花太多时间使用

maoyeqiu的专栏 3896

传感器应用案例:压力传感器在工业自动化中的应用_(13).压力传感器的数据采集与处理

数据采集系统(Data Acquisition System, DAS)是连接传感器和控制系统的重要桥梁。它包括硬件(如数据采集卡、信号调理器)和软件(如数据采集软件、数据处理算法)两部分。信号调理:将传感器输出的模拟信号转换为适合AD转换的信号。AD转换:将模拟信号转换为数字信号。数据传输:将数字信号传输到控制系统或上位机。存储:将采集的数据存储在本地或远程数据库中。实时性:保证数据的实时性和准确性。压力传感器的数据采集与处理是工业自动化中不可或缺的一部分。

2401_87715305的博客 1620

机器人中的数值优化(十三)——QP二次规划

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例

慕羽★的博客 2793

hql(三):二级缓存

hql学习③:二级缓存 一、为什么需要缓存 1、拉高程序的性能 2、什么样的数据需要缓存 很少被修改或根本不改的数据 数据字典 业务场景比如:耗时较高的统计分析sql、电话账单查询sql等 二、数据库 1、数据库关系分类: ① 关系型数据库:数据与数据之间存在关系(联系)的数据库 mysql/Oracle、sqlserver ②非关系型数据库:数据与数据之间是不存在关...

weixin_43163062的博客 216

达摩院高清人像美肤模型ABPN的深入解析及编程实现

本文深入解析了达摩院高清人像美肤模型ABPN的原理,并提供了相应的源代码实现。ABPN模型通过自适应的反投影网络,有效地实现了人像图像的美肤处理。通过进一步的研究和优化,ABPN模型有望在人像美肤领域发挥更大的作用。低频特征提取器用于提取输入图像的低频信息,而反投影网络则负责将低频信息与原始图像结合,生成美肤后的输出图像。通过将输入图像送入ABPN模型,即可得到经过美肤处理后的输出图像。通过对输入图像进行美肤处理,可以有效地去除皮肤上的瑕疵和噪点,提升图像质量和美感。

TechPulseZ的博客 711

Hibernate3.6 入门4:查询_二级缓存_连接池支持

1. HQL查询&amp;lt;span style=&quot;font-size:14px;&quot;&amp;gt;// 1. 聚合函数统计 // 需求: 统计总人数! //Query q = session.createQuery(&quot;select count(*) from User&quot;); //Long count = (Long) q.uniqueResult(); // 返回结果的第一行; 如果结果有多行,报错! /...

Holyn的博客 855

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

hibernate HQL&数据库连接池&二级缓存&当前线程session

一、hibernate查询 1. 查询概述 1)        Get/load主键查询 2)        对象导航查询 3)        HQL查询,  Hibernate Query language  hibernate 提供的面向对象的查询语言。 4)        Criteria 查询,   完全面向对象的查询(Query ByCriteria  ,QBC) 5)   

李卫康的博客 1307

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

hibernate HQL/C3P0数据库连接池/二级缓存/当前线程session

一、hibernate查询 1. 查询概述 1)        Get/load主键查询 2)        对象导航查询 3)        HQL查询,  Hibernate Query language  hibernate 提供的面向对象的查询语言。 4)        Criteria 查询,   完全面向对象的查询(Query ByCriteria  ,Q

lichuanyuelth的博客 522

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Jimoshi_Hibernate 框架学习(四)--事务隔离级别、Hibernate执行SQL、HQL语句、连接池、Hibernate二级缓存

Jimoshi成长经历:前面的笔记后面再慢慢整理-------方便自己 目录:事务隔离级别、Hibernate执行SQL语句、Hibernate执行HQL语句、连接池、Hibernate二级缓存 Hibernate 框架学习(四): 一、事务隔离级别     1、数据库事务的定义(作为单个逻辑工作单元执行的一系列操作)      描述:一个逻辑工作单元要成为事务,必须

Jimoshi 1057

Hibernate查询、连接池、二级缓存

Hibernate第三天: 1. 对象状态 2. session缓存 3. lazy懒加载 4. 映射 一对一对映射 组件/继承映射 目标: 一、hibernate查询 二、hibernate对连接池的支持 三、二级缓存 四、Hibernate与Struts小案...

weixin_30642267的博客 105

Hibernate之三:OBC,二级缓存,乐观锁,悲观锁

1.QBC:条件查询 HQL是面向对象的查询,查询的是对象和对象中的属性 注意:HQL中的关键字不区分大小写,但是类名和属性名区分大小写 2.查询全部 //条件查询对象 Criteria criteria = session.createCriteria(User.class); //得到集合 List&lt;User&gt; list = criteria.list(); 3.查...

yingyunzhizi的博客 273

Hibernate二级缓存以及HQL(三)

Hibernate检索方式 1:Hibernate 提供了以下检索对象的方式 1、导航对象图检索方式:在程序中获得持久的实体对象,通过对象关联,获得相关的实体对象。比如:session.get(Department.class,1); dept.getEmps() 2、OID检索方式:session的get或load根据OID查找对象 3、HQL检索方式:Query接口。使用面向对象的...

weixin_30361641的博客 152

Java第三阶段之Hibernate4查询方式、高级配置

十Hibernate 查询方式 1.Hibernate 查询方式简介 1,导航对象图查询方式; 2,OID 查询方式; 3,本地 SQL 查询方式; 4,HQL 查询方式; 5,QBC 查询方式;(QueryByCriteria) 2.本地 SQL 查询方式 3.HQL 查询方式 HQL(HibernateQueryLanguage)是面向对象的查询语言;是使用最广的一种查询方式; 1,普通查询;...

AthlenaA的博客 648

Hibernate性能优化指南:从缓存配置到SQL调优(避坑版)

本文深入解析Hibernate性能优化策略,涵盖缓存配置、SQL调优及高级优化技巧。通过实战案例展示如何避免N+1查询问题、优化二级缓存配置及批量处理操作,帮助Java开发者提升ORM框架性能,显著降低数据库访问延迟。

weixin_29211309的博客 179

hibernate

hibernate查询、连接池、二级缓存 1. 对象状态  2. session缓存  3. lazy懒加载  4. 映射  一对一对映射  组件/继承映射  目标:  一、hibernate查询  二、hibernate对连接池的支持  三、二级缓存  四、Hibernate与Struts小案例(项目中session的管理方式) 一、hiberna

bestlove12345的博客 1105

【Java Hibernate配置高手进阶】:掌握10个核心技巧,提升系统性能90%

掌握Java Hibernate配置技巧,有效解决ORM性能瓶颈。涵盖二级缓存、批量处理、懒加载优化等10大核心方法,适用于高并发、大数据量场景,显著提升系统响应速度与稳定性,性能提升可达90%,值得收藏。

AlgoChat的博客 470

过一下hibernate4-6(含Log4J)

一. Hibernate 检索策略 检索策略属性 Lazy Lazy取值 说明 true (默认) 延迟检索 ;set 端 一对多 false 立即检索;set 端 一对多 extra 增强延迟检索; set 端 一对多 proxy (默认) 延迟检索;many-to-one 多对一 no-proxy 无代理延迟检索;many-to-one 多对一 (需要编译时...

beeworkshop的博客 219
上一篇: hibernate之关联映射
下一篇: 学习笔记之Spring框架
2YSP
博客等级 码龄10年 12粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值