Hibernate框架详解(四)

2023-11-18

Hibernate查询方式

  • (1)对象导航查询:根据id查询某个班级,再查询这个班级里面的所有学生
  • (2)OID查询:根据id查询某一条记录,返回对象
  • (3)HQL查询:利用Query对象,写HQL语句实现查询
  • (4)QBC查询:利用Criteria对象实现查询
  • (5)本地sql查询:利用SQLQuery对象,使用普通sql实现查询

 

对象导航查询

对象导航查询是根据已经加载的对象,查询到它的关联对象。

需求:查询某个班级中的所有学生,使用对象导航查询

实现:

	public void testDemo(){
		Configuration cfg=new Configuration();
		cfg.configure();
		
		SessionFactory sessionFactory=cfg.buildSessionFactory();
		Session session=sessionFactory.openSession();
		Transaction transaction=session.beginTransaction();
		
		
		Classes classes=session.get(Classes.class, 4);
		Set<Student> s=classes.getcStudents();
		for(Student student:s){
			System.out.println(student);
		}
		

		transaction.commit();
		session.close();
		sessionFactory.close();
	}

 

OID查询

OID查询主要指用session的get方法加载某条记录对应的对象

需求:根据id属性查询某个班级

实现:

	public void testDemo(){
		Configuration cfg=new Configuration();
		cfg.configure();
		
		SessionFactory sessionFactory=cfg.buildSessionFactory();
		Session session=sessionFactory.openSession();
		Transaction transaction=session.beginTransaction();
		
		
		Classes classes=session.get(Classes.class, 4);
		
		transaction.commit();
		session.close();
		sessionFactory.close();
	}

 

HQL查询

  • HQL(Hibernate Query Language)是面向对象的查询语言,它和sql查询语言很相似
  • HQL与SQL的区别:SQL操作数据表和字段,HQL操作实体类和属性
  • 使用HQL查询操作步骤:第一步:创建Query对象,写HQL语句;第二步:调用Query对象里面的方法得到结果

常用的HQL语句:

  • 查询所有:from  实体类名称
  • 条件查询:from  实体类名称  where  实体类属性名称=? and 实体类属性名称=?

                         from  实体类名称  where  实体类属性名称  like ?

  • 排序查询:from  实体类名称  order by 实体类属性名称  asc/desc

 

(1)查询所有

需求:查询所有学生记录

步骤:第一步:创建Query对象,写HQL语句;第二步:调用Query对象中的list方法,得到结果

语句:from 实体类名称

实现:

public void testDemo(){
		Configuration cfg=new Configuration();
		cfg.configure();
		
		SessionFactory sessionFactory=cfg.buildSessionFactory();
		Session session=sessionFactory.openSession();
		Transaction transaction=session.beginTransaction();
		
		//创建Query对象
		Query query=session.createQuery("from Student");
		//调用list方法得到结果
		List<Student> list=query.list();
		//通过for循环遍历结果集
		for(Student stu : list){
			System.out.println(stu);
		}
		
		transaction.commit();
		session.close();
		sessionFactory.close();
	}

 

(2)条件查询

语法:from  实体类名称  where  实体类属性名称=? and 实体类属性名称=?(条件查询)

          from  实体类名称  where  实体类属性名称  like ?(模糊查询)

实现:

public void testDemo(){
		Configuration cfg=new Configuration();
		cfg.configure();
		
		SessionFactory sessionFactory=cfg.buildSessionFactory();
		Session session=sessionFactory.openSession();
		Transaction transaction=session.beginTransaction();
		
		//创建Query对象
		//select * from Student where sid=? and sname=?;

		Query query = session.createQuery("from Student s where s.sid=? and s.sname=? ");
		//设置条件值,第一个参数表示位置(从0开始),第二个参数表示具体参数值
        
        //按位置绑定参数
		query.setParameter(0, 3);
		query.setParameter(1, "张三");

		//调用query对象中的list方法
		List<Student> list=query.list();

		for(Student s:list){
			System.out.println(s);
		}
		
		transaction.commit();
		session.close();
		sessionFactory.close();
	}

模糊查询:

	public void testDemo(){
		Configuration cfg=new Configuration();
		cfg.configure();
		
		SessionFactory sessionFactory=cfg.buildSessionFactory();
		Session session=sessionFactory.openSession();
		Transaction transaction=session.beginTransaction();
		
		//创建Query对象
		Query query=session.createQuery("from Student s where s.sname like ?");
		//设置占位符的值
		query.setParameter(0, "%李%");
		//调用query对象的list方法
		List<Student> list=query.list();
		for(Student s:list){
			System.out.println(s.getSname());
		}
		
		transaction.commit();
		session.close();
		sessionFactory.close();
	}

结果:

 

(3)排序查询

语法:from 实体类名称  order by 实体类属性名称  asc/desc

实现:

	public void testDemo(){
		Configuration cfg=new Configuration();
		cfg.configure();
		
		SessionFactory sessionFactory=cfg.buildSessionFactory();
		Session session=sessionFactory.openSession();
		Transaction transaction=session.beginTransaction();
		
		Query query=session.createQuery("from Student s order by s.sid desc ");
		List<Student> list=query.list();
		
		for(Student student : list){
			System.out.println(student.getSid()+"   :  "+student.getSname());
		}
		
		transaction.commit();
		session.close();
		sessionFactory.close();
	}

结果:

 

(4)分页查询

  • 分页功能是很常见的功能,如果结果集数据量很大,比如几万行数据,放在一个页面显示的话数据量太大,不如分页显示,每次显示100条。
  • Mysql实现分页:使用关键字limit

  • 在HQL中实现分页:hibernate中的Query对象封装了setFirstResult和setMaxResults两个方法实现分页操作

效果图:

实现:

	public void testDemo(){
		Configuration cfg=new Configuration();
		cfg.configure();
		
		SessionFactory sessionFactory=cfg.buildSessionFactory();
		Session session=sessionFactory.openSession();
		Transaction transaction=session.beginTransaction();
		Query query=session.createQuery("from Student");
		
		//设置分页数据开始位置
		query.setFirstResult(0);
		//设置分页数据每页记录数
		query.setMaxResults(2);
		
		List<Student> list=query.list();
		for(Student student:list){
			System.out.println(student.getSid()+"   +   "+student.getSname());
		}
		
		transaction.commit();
		session.close();
		sessionFactory.close();
	}

 

(5)投影查询

投影查询:查询部分字段的值

select sname from student;

语法:select  实体类属性名称1,实体类属性名称2  from 实体类名称

实现:

	public void testDemo(){
		Configuration cfg=new Configuration();
		cfg.configure();
		
		SessionFactory sessionFactory=cfg.buildSessionFactory();
		Session session=sessionFactory.openSession();
		Transaction transaction=session.beginTransaction();
		
		Query query=session.createQuery("select sname from Student");
		List<Object> list=query.list();
		for(Object obj:list){
			System.out.println(obj);
		}
		
		
		transaction.commit();
		session.close();
		sessionFactory.close();
	}

结果:

 

(6)聚集函数使用

常用的聚集函数:count,sum,avg,max,min

需求:查询数据表中的记录数

语法:select count(*) from 实体类名称

实现:

	public void testDemo(){
		Configuration cfg=new Configuration();
		cfg.configure();
		
		SessionFactory sessionFactory=cfg.buildSessionFactory();
		Session session=sessionFactory.openSession();
		Transaction transaction=session.beginTransaction();
		
		Query query=session.createQuery("select count(*) from Student");
		Object obj=query.uniqueResult();
		System.out.println(obj);

		
		
		transaction.commit();
		session.close();
		sessionFactory.close();
	}

结果:

 

QBC查询

  • QBC(Query By Criteria)是Hibernate提供的另一种查询对象的方式
  • 使用QBC查询,不需要使用语句,直接使用方法实现
  • QBC查询,使用Criteria对象,操作的是实体类和属性
  • 使用步骤:第一步:创建Criteria对象;第二步:调用相关方法得到结果

(1)查询所有

需求:查询所有学生记录

实现:

	public void testDemo(){
		Configuration cfg=new Configuration();
		cfg.configure();
		
		SessionFactory sessionFactory=cfg.buildSessionFactory();
		Session session=sessionFactory.openSession();
		Transaction transaction=session.beginTransaction();
		
		Criteria criteria=session.createCriteria(Student.class);
		List<Student> list=criteria.list();
		for(Student s:list){
			System.out.println(s.getSname());
		}

			
		transaction.commit();
		session.close();
		sessionFactory.close();
	}

 

(2)条件查询

HQL的条件查询可以在HQL语句中设置条件值,但是QBC使用封装的方法设置条件值

QBC查询使用Restrictions对象编写查询条件,在Restictions类中提供了大量的静态方法来创建查询条件,如下所示:

需求:根据学id和姓名进行查询

实现:

public void testDemo(){
		Configuration cfg=new Configuration();
		cfg.configure();
		
		SessionFactory sessionFactory=cfg.buildSessionFactory();
		Session session=sessionFactory.openSession();
		Transaction transaction=session.beginTransaction();
		
		//创建Criteria对象
		Criteria criteria=session.createCriteria(Student.class);
		//使用Criteria对象中的add方法设置条件值
		criteria.add(Restrictions.eq("sid", 3));
		criteria.add(Restrictions.eq("sname","王富贵"));
		//调用list方法,得到结果
		List<Student> list=criteria.list();
		for(Student student:list){
			System.out.println(student.getSname());
		}
		
		transaction.commit();
		session.close();
		sessionFactory.close();
	}

结果:

模糊查询:

需求:查询姓名中有“李”的所有学生

	public void testDemo(){
		Configuration cfg=new Configuration();
		cfg.configure();
		
		SessionFactory sessionFactory=cfg.buildSessionFactory();
		Session session=sessionFactory.openSession();
		Transaction transaction=session.beginTransaction();
		
		//创建Criteria对象
		Criteria criteria=session.createCriteria(Student.class);
		//使用Criteria对象中的add方法设置条件值
		criteria.add(Restrictions.like("sname", "%李%"));

		//调用list方法,得到结果
		List<Student> list=criteria.list();
		for(Student student:list){
			System.out.println(student.getSname());
		}
		
		transaction.commit();
		session.close();
		sessionFactory.close();
	}

结果:

 

(3)排序查询

需求:按照学生id,倒序查询所有学生

实现:

	public void testDemo(){
		Configuration cfg=new Configuration();
		cfg.configure();
		
		SessionFactory sessionFactory=cfg.buildSessionFactory();
		Session session=sessionFactory.openSession();
		Transaction transaction=session.beginTransaction();
		
		//创建Criteria对象
		Criteria criteria=session.createCriteria(Student.class);
		//设置对哪个属性进行排序,并设置排序方式
		criteria.addOrder(Order.desc("sid"));

		//调用list方法,得到结果
		List<Student> list=criteria.list();
		for(Student student:list){
			System.out.println(student.getSname());
		}
		
		transaction.commit();
		session.close();
		sessionFactory.close();
	}

结果:

 

(4)分页查询

在QBC中实现分页:hibernate中的Criteria对象封装了setFirstResult和setMaxResults两个方法实现分页操作

需求:分页查询,从0开始,每页显示两个。开始位置计算公式: (当前页-1*每页记录数

实现:

	public void testDemo(){
		Configuration cfg=new Configuration();
		cfg.configure();
		
		SessionFactory sessionFactory=cfg.buildSessionFactory();
		Session session=sessionFactory.openSession();
		Transaction transaction=session.beginTransaction();
		
		//创建Criteria对象
		Criteria criteria=session.createCriteria(Student.class);
		//设置开始位置
		criteria.setFirstResult(0);
		//设置每页显示记录数
		criteria.setMaxResults(2);

		//调用list方法,得到结果
		List<Student> list=criteria.list();
		for(Student student:list){
			System.out.println(student.getSname());
		}
		transaction.commit();
		session.close();
		sessionFactory.close();
	}

结果:

 

(5)统计查询

需求:统计学生表中的记录数

实现:

	public void testDemo(){
		Configuration cfg=new Configuration();
		cfg.configure();
		
		SessionFactory sessionFactory=cfg.buildSessionFactory();
		Session session=sessionFactory.openSession();
		Transaction transaction=session.beginTransaction();
		
		//创建Criteria对象
		Criteria criteria=session.createCriteria(Student.class);
		//设置操作(设置统计功能)
		criteria.setProjection(Projections.rowCount());
		//调用uniqueResult方法得到结果
		Object object=criteria.uniqueResult();
		System.out.println(object);


		transaction.commit();
		session.close();
		sessionFactory.close();
	}

结果:

 

(6)离线查询

  • 离线查询使用DetachedCriteria对象,它可以脱离session来使用。而Criteria对象必须由session对象来创建,即必须现有session才可以生成Criteria对象,而DetachedCriteria对象可以在其他层对条件进行封装。
  • 在以后的SSH整合中,会经常使用DetachedCriteria对象,其主要优点是做一些比较复杂的条件查询时,往往会在web层向service层传递很多参数,业务层也会将这些参数传递给dao层,最后在dao层中拼接SQL完成查询。有了离线查询以后,可以直接在web层将数据封装好,传递到service层,再传递到dao层完成查询。

实现:

	public void testDemo(){
		Configuration cfg=new Configuration();
		cfg.configure();
		
		SessionFactory sessionFactory=cfg.buildSessionFactory();
		Session session=sessionFactory.openSession();
		Transaction transaction=session.beginTransaction();
		
		DetachedCriteria detachedCriteria=DetachedCriteria.forClass(Student.class);
		Criteria criteria=detachedCriteria.getExecutableCriteria(session);
		List<Student> list=criteria.list();
		for(Student student : list){
			System.out.println(student.getSname());
		}

		transaction.commit();
		session.close();
		sessionFactory.close();
	}

结果:

 

 

HQL多表查询

(1)Mysql中多表查询

内连接

 

左外连接

右外连接

参考:https://blog.csdn.net/plg17/article/details/78758593

 

(2)HQL实现多表查询

HQL多表查询:

  •  内连接
  •  左外连接
  •  右外连接
  •  迫切内连接
  •  迫切左外连接

HQL内连接

1 内连接查询hql语句写法:以客户和联系人为例

1from  Customer  c  inner  join  c.setLinkMan

返回listlist里面每部分是数组形式

2 演示迫切内连接

1)迫切内连接和内连接底层实现一样的

2)区别:使用内连接返回list中每部分是数组,迫切内连接返回list每部分是对象

3hql语句写法

- from  Customer  c  inner  join  fetch  c.setLinkMan

 

 

HQL左外连接

1 左外连接hql语句:

1from  Customer  c  left  outer  join  c.setLinkMan

2)迫切左外连接from  Customer  c  left  outer  join  fetch  c.setLinkMan

 

2 左外连接返回list中每部分是数组,迫切左外连接返回list每部分是对象

1 右外连接hql语句:

1from  Customer  c  right  outer  join  c.setLinkMan

 

 

Hibernate检索策略

(1)hibernate检索策略分为两类:

立即查询:根据id查询,调用get方法,一调用get方法马上发送语句查询数据库

结果:

 

延迟查询:根据id查询,调用load方法,调用load方法不会马上发送语句查询数据,只有得到对象里面的其他值的时候才会发送语句查询数据库

结果:

 

(2)延迟查询分为两类:

类级别延迟:根据id查询返回实体类对象,调用load方法,不会马上发送语句。

结果:

 

关联级别延迟:查询某个班级,再查询这个班级中的所有学生。查询这个班级中的所有学生是否需要延迟,这个过程称为关联级别延迟。

结果:

关联级别延迟操作

(1)在映射文件中进行配置实现

根据班级得到所有学生,在班级映射文件中进行配置

(2)在set标签上使用属性

fetch:值select(默认使用)

lazy:

  • --true:延迟(默认)
  • --false:不延迟
  • --extra:极其延迟

实现:lazy属性值为true,即开启延迟

实现:lazy属性值为false,即关闭延迟

调用get方法之后,直接发送两条sql语句。

实现:lazy属性值为extra,极其延迟/极其懒惰

要什么值给什么值(查询set集合数量,只查询count)

 

 

Hibernate批量抓取

需求:查询所有的班级,返回list集合,遍历list集合,得到每个班级,得到每个班级的所有学生

实现:

问题:上面操作代码,发送多条sql语句,性能不高

解决:批量抓取

在班级的映射文件中,set标签里配置batch-size属性,值越大,发送语句越少。

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hibernate框架详解(四) 的相关文章

  • 程序员必读书目推荐

    1 Effective Java Joschua 稍许过时 但没有替代java方面的书 2 Effectvie C Scott Meyer 3 More Effective C Scott Meyer的书是非常非常好书 每次读都感到汗颜 自
  • MyBatis3框架详解(二)

    一 MyBatis全局配置文件 MyBatis的全局配置文件包含设置 settings 和属性 properties 信息 文档结构如下 二 全局配置文件中 引入dtd约束 目的 为了在全局配置文件 mybatis config xml 中
  • 一篇文章入门MyBatis3

    要使用mybatis 需要在类路径下建立一个配置文件 名称为mybatis config xml mybatis中的总配置文件 mybatis config xml
  • Web框架安全

    模板引擎与XSS防御 XSS攻击是在用户的浏览器上执行的 其形成过程则是在服务器端页面渲染时 注入了恶意的HTML代码导致的 从MVC架构来说 是发生在View层 因此使用 输出编码 的防御方法更加合理 这意味着需要针对不同上下文的XSS攻
  • MyBatis3框架详解(四)

    一 select元素 select标签元素是用来定义查询操作的 id属性 唯一标识符 用来引用这条语句 需要和接口的方法名一致 parameterType属性 参数类型 可以不传 mybatis会根据TypeHandler自动推断 resu
  • hibernate框架入门

    1 在IDE中创建java项目 比较简单不再演示 2 创建source folder 命名为Hibernate3 在Hibernate下载文件中找到我们所需要的三个配置文件和所有jar包 拷贝所需jar文件 构建依赖包 3 提供hibern
  • 一份超详细的Spring4常用知识清单!

    文章目录 1 Spring 是什么 2 Spring模块结构 3 Spring核心 3 1 IOC 和 DI 3 2 Spring 容器 4 Spring中Bean 4 1 IOC 容器中 Bean 的生命周期方法 4 2 在 Spring
  • 成为技术传播者(二):Why and Why NOT

    前文 成为技术传播者 一 写在前面 Contributing to Eclipse的开篇第一句话说得很有味道 Humans need to feel nurtured and cared for Humans also need to nu
  • 用Vue.js开发一个电影App的前端界面

    我们要构建一个什么样的App 我们大多数人使用在线流媒体服务 如Netflix 观看我们最喜欢的电影或者节目 这篇文章将重点介绍如何通过使用vue js 2 建立一个类似风格的电影流媒体WEB交互界面 见上图 最终的产品可以去这里找 htt
  • 一篇文章入门Hibernate框架

    什么是Hibernate 一个框架 一个Java领域的持久化框架 一个ORM框架 什么叫持久化操作 和数据库相关的各种操作 对象的增删改查 什么是ORM 对象 关系映射 ORM思想 将关系数据块中表中的记录映射成为对象 以对象的形式展现 程
  • 一份超详细的SpringMVC4常用知识清单!

    文章目录 1 SpringMVC 概述 2 使用 RequestMapping 映射请求 2 1 映射请求参数 请求方法或请求头 2 2 Maping支持通配符 3 PathVariable 映射 URL 绑定的占位符 4 REST 5 请
  • Spring框架详解(三)

    一 代理模式 代理模式 为一个对象提供一个替身 以控制对这个对象的访问 即通过代理对象访问目标对象 这样做的好处就是 可以在目标对象实现的基础上 增强额外的功能操作 即扩展目标对象的功能 被代理对象可以是远程对象 创建开销大的对象或者是需要
  • Spring MVC框架详解(一)

    一 三层架构与MVC模型 我们的开发架构一般都是基于两种形式 一种是C S架构 也就是客户端 服务器架构 另一种是B S架构 也就是浏览器 服务器架构 在JavaEE开发中 几乎都是基于B S架构的开发 在B S架构中 系统标准的三层架构包
  • Hibernate框架详解(三)

    表与表之间的关系 1 一对一 例子 在中国 一个男人只能有一个妻子 一个女人只能有一个丈夫 2 一对多 例子 学生和班级的关系 一个班级可以有多个学生 而一个学生只能属于一个班级 一对多建表 通过外键建立关系 在多的那一方创建字段作为外键
  • Jsf与Spring的整合原理

    Jsf做为Web框架 Spring做为业务层框架 两者可以结合起来用 只要在faces config xml中做一个很简单的配置
  • python Web开发 flask轻量级Web框架

    O flask介绍 Flask是一个使用 Python 编写的轻量级 Web 应用框架 其 WSGI 工具箱采用 Werkzeug 模板引擎则使用 Jinja2 Flask使用 BSD 授权 Flask也被称为 microframework
  • ASP.NET Core3.1 跨平台智能云管理系统源码

    ASP NET Core3 1 跨平台智能云管理系统源码 一个相当不错的系统框架 ASP NET Core3 1 跨平台智能云管理系统 什么是 ASP NET Core ASP NET Core 是一个由微软创建的 用于构建 web 应用
  • Struts2框架详解(二)

    Struts2结果页面配置 全局结果页面 场景 多个action 有相同的方法返回值 且都到同一个结果页面 需求 创建两个action 执行默认的方法execute方法 让两个action的方法都返回success 返回success之后
  • Hibernate框架详解(四)

    Hibernate查询方式 1 对象导航查询 根据id查询某个班级 再查询这个班级里面的所有学生 2 OID查询 根据id查询某一条记录 返回对象 3 HQL查询 利用Query对象 写HQL语句实现查询 4 QBC查询 利用Criteri
  • Nginx的X-Accel-Redirect实现大文件下载

    一 文件下载的几种方式 1 直接给出下载地址 使用静态文件服务器nginx下载 任何人都可以下载 无法控制用户的权限 2 后端流式读取文件内容 设置header后疯狂输出 django文档中提到 可以向HttpResponse传递一个迭代器

随机推荐

  • 基于MindSpore的YOLOv3-DarkNet53网络实现

    基于MindSpore的YOLOv3 DarkNet53网络实现 网络模型介绍 1 backbone Darknet 53 YOLOv3使用Darknet 53提取特征 其借鉴了Darknet 19结构 不同于Darknet 19的是 Da
  • Flutter开发遇到的问题

    一 在AndroidStudio4 1中没有 New Flutter Project 菜单 那是由于你没有安装Flutter插件 需要在setting的插件管理中添加 Flutter 和 dart 插件 二 Flutter SDK 安装参考
  • 微信小程序input禁止空格输入

    用户输入的时候 可能会有输入空格的情况 所以我们要利用简单的正则实时去除空格 利用数据双向绑定的特性同步当前input的value值 下面是源码 wxml
  • 基于SpringBoot的螺蛳粉销售系统计算机毕业设计源码70795

    摘 要 随着供给侧结构性改革的稳步实施 互联网 这一新的国家发展的重要战略手段通过 双创 不但改变了传统的供需关系 还为经济发展带来了新动能 它已经成为产业发展的新引擎 螺顿粉产业就是在 互联网 背景下应运而生且蓬勃发展的 但是 在经济全球
  • 寻你的人生 寻你的选择

    无论如何选择 只要是自己的选择 就不存在对错与后悔 过去的我不会让现在的我满意 现在的我也不会让未来的我满意 当面对前路坎坷 我知道既然当初有胆量去选 那么就该有勇气把后果来承担 有毅力把梦想坚持并实现 我们人生中最大的懒惰 就是当我们明知
  • SonarQube8.7使用配置

    一 sonarQube版本 二 安装 三 配置说明 1 设置检测规则 2 启用pdf输出 一 sonarQube版本 本体 sonarqube 8 7 1 42226版本 插件 sonar findbugs plugin 4 0 3 jar
  • 生成Android的keystore密钥

    打开cmd 进入Jdk的 安装目录下的bin文件夹 输入命令 keytool genkey alias android keystore keyalg RSA validity 20000 keystore android keystore
  • /dev/sdb1 已经挂载或 /mnt/mountpoint3 忙解决办法

    dev sdb1 已经挂载或 mnt mountpoint3 忙解决办法 在挂载硬盘分区的时候 会出现mount dev sdd1 already mounted or data3 busy或者是在执行格式化分区的时候也会出现 dev hd
  • 操作系统重点

    1 1 选择题 1 考研真题 单项选择题 单道批处理系统的主要缺点是 A CPU利用率不高 2 考研真题 单项选择题 提高单机资源利用率的关键技术是 D 多道程序设计技术 3 考研真题 单项选择题 并发性是指若干事件在 发生 A C 同一时
  • Qt智能指针之QScopedPointer

    内存释放的问题是C 中比较头疼的问题 合理的使用智能指针能有效的帮助我们减少忘记释放内存 导致的内存泄露问题 本文以Qt中的QScopedPointer为例 通过讲解其用法 从源码深度剖析其实现方式 QScopedPointer的使用原理比
  • IDEA中的“Deployment“ 将项目直接部署到服务器上

    ntelliJ IDEA中的 Deployment 工具栏是一个方便的工具 用于将你的项目直接部署到服务器上 这个工具栏提供了三种部署的方式 1 Web Server在本地电脑上 并且服务器运行目录也在项目目录下 2 Web Server在
  • 【读书笔记】浪潮之巅——公司史篇

    浪潮之巅 公司史 AT T 百年帝国 创立 1877贝尔电话公司 1984年反垄断被拆分 AT T 8家小贝尔公司 1996年重组 AT T 长途电话等电信服务业务 朗讯 专门做程控交换机等设备制造业务 因借钱给各公司买朗讯设备 2000年
  • centos实现集群之间ssh免密(最简单的ssh免密)

    master 1 在虚拟机命令界面输入 ssh keygen t rsa 然后持续回车键 2 ssh copy id 主机名 ssh copy id master ssh copy id slave1 slave1 ssh copy id
  • 811. 子域名访问计数

    网站域名 discuss leetcode com 由多个子域名组成 顶级域名为 com 二级域名为 leetcode com 最低一级为 discuss leetcode com 当访问域名 discuss leetcode com 时
  • 私有部署、重构企业软件,第四范式发布大模型“式说”

    大模型领域再添重要一员 4月26日 第四范式首次向公众展示其大模型产品 式说3 0 并首次提出AIGS战略 AI Generated Software 以生成式AI重构企业软件 式说将定位为基于多模态大模型的新型开发平台 提升企业软件的体验
  • GYM-102920-L. Two Buildings(决策单调性+分治)

    题目链接 题目大意 求一段序列的 h i h j j i 的最大值 step1 转化一下题意 h i h j j i h j h i j i 令a i h i b i h i 然后全部转化为两种坐标 i a i i b i 这样题目就转化成
  • 物联网技术周报第31期:Linux基金会宣布微内核项目Zephyr

    本文转载至 http www infoq com cn news 2016 02 iot weekly 31 utm campaign infoq content utm source infoq utm medium feed utm t
  • linux的开机启动和密码破解

    linux的开机启动 linux启动流程 Centos开机修改密码 kali开机修改密码 centso启动 rcx文件 chkconfig命令 centos给grub设置密码 压缩解压 gzip bzip2 tar tar gzip tar
  • 韦东山数码相框项目进度一

    数码相框进度一 项目需求分析 程序架构 点阵字符显示 参考文章 韦东山数码相框任务需求分析 项目需求分析 程序架构 1 为了提高程序的复用性 将应用程序分为两个进程 进程之间通过socket套接字进行通信 2 两个进程下通过多线程框架 完成
  • Hibernate框架详解(四)

    Hibernate查询方式 1 对象导航查询 根据id查询某个班级 再查询这个班级里面的所有学生 2 OID查询 根据id查询某一条记录 返回对象 3 HQL查询 利用Query对象 写HQL语句实现查询 4 QBC查询 利用Criteri