Hibernate 相关特性
1. Hibernate一般使用hql进行查询,但也有sql执行的方法
Native sql 查询,。需要注意的是,使用Native SQL查询可能会破坏Hibernate的缓存机制,并可能导致性能问题
String sql = "SELECT * FROM users WHERE age > :age";
Query query = session.createNativeQuery(sql, User.class);
query.setParameter("age", 18);
List<User> users = query.getResultList();
2. hibernate的查询年龄大于18的用户
HQL
String hql = "FROM User WHERE age > 18";
List<User> users = session.createQuery(hql, User.class).getResultList();
Criteria API
CriteriaBuilder cb = session.getCriteriaBuilder();
CriteriaQuery<User> query = cb.createQuery(User.class);
Root<User> root = query.from(User.class);
query.select(root).where(cb.gt(root.get("age"), 18));
List<User> users = session.createQuery(query).getResultList();
3. hql和sql的区别
对象模型不同:HQL是面向对象的查询语言,用于查询Hibernate映射的对象模型,而SQL是面向关系模型的查询语言,用于查询关系型数据库中的数据。
语法不同:HQL语法与SQL语法有些类似,但也有很多不同点。例如,HQL使用实体类名和属性名代替表名和列名,使用关键字FROM代替SELECT,使用关键字JOIN代替INNER JOIN或LEFT OUTER JOIN等。
映射不同:在Hibernate中,实体类和数据库表之间需要进行映射,而HQL查询的是实体类,而不是数据库表。这意味着在HQL中不需要考虑表之间的关系,而是通过对象关系进行查询,这也是HQL的一大优势。
执行方式不同:HQL查询是在Hibernate的一级缓存中执行的,因此可以避免多次查询数据库。而SQL查询则是直接查询数据库中的数据。
性能不同:由于HQL查询是在Hibernate的一级缓存中执行的,因此可以提高查询效率。同时,HQL还可以利用Hibernate的缓存机制来进一步提高性能。而SQL查询则没有这些优势,通常需要通过数据库索引等方式来提高查询效率。
4. HQL查询的是实体类,而不是数据库表
在Hibernate中,HQL查询的是实体类,而不是数据库表,这意味着开发者可以使用面向对象的方式进行数据查询和操作,而无需关注底层数据库表的具体实现。
在HQL中,查询语句的主体是实体类,而不是数据库表。例如,以下HQL查询语句查询所有用户的用户名和年龄:
SELECT u.userName, u.age FROM User u
在这个查询语句中,User代表的是Hibernate映射的实体类,而不是底层数据库表。开发者只需要知道实体类的属性名称,就可以完成数据查询和操作,而无需了解数据库表的详细信息。
这种面向对象的查询方式具有很大的优势,因为它能够更好地体现对象模型的特性,避免了开发者直接操作数据库的复杂性和繁琐性,使开发工作更加简单和高效。同时,HQL查询也可以利用Hibernate的缓存机制,提高数据查询和操作的性能。
5.跨平台
不同的数据库平台的SQL语句可能会有所不同。不同的数据库平台有着不同的实现方式、不同的语法、不同的数据类型等等,这些因素都会影响SQL语句的编写。
例如,在MySQL中,字符串类型的字段可以使用单引号或双引号表示,而在Oracle数据库中,字符串类型的字段只能使用单引号表示;MySQL中的LIMIT语法用于限制查询结果的数量,而在Oracle数据库中则需要使用ROWNUM语法实现类似的功能。此外,还有一些特定的函数、操作符和语法,在不同的数据库平台上也有着不同的实现方式。
因此,在使用不同的数据库平台时,需要针对具体的数据库平台来编写SQL语句,以保证SQL语句的正确性和可执行性。这也是ORM框架(如Hibernate和MyBatis)的一个重要作用,它们可以自动地将Java对象转换为适用于不同数据库平台的SQL语句,并进行适当的优化和调整。
所以,Hibernate具有较好的跨数据库平台兼容性,可以支持多种关系型数据库,包括MySQL、Oracle、SQL Server等。而MyBatis也支持多种数据库,但需要针对不同的数据库进行特定的配置和优化。
6. DTO和DAO
在Hibernate中,通常使用的是实体类(Entity Class)而不是数据访问对象(Data Access Object,DAO)。实体类是与数据库表映射的Java类,它包含了与数据库表中的字段相对应的属性,以及与数据库表中的记录相对应的操作方法。在Hibernate中,通过实体类可以进行对象与关系的映射,从而实现了对象关系映射(ORM)的功能。
另一方面,数据访问对象(DAO)是一种设计模式,它的主要作用是将数据访问逻辑与业务逻辑分离开来,使得系统更加灵活和可维护。在使用DAO模式时,通常会定义一个数据访问接口(DAO接口),以及一个具体的数据访问实现类(DAO实现类),DAO实现类封装了与数据库的交互细节,包括SQL语句的编写、数据库连接的管理等等。
在Hibernate中,由于使用了ORM框架,因此不再需要手动编写SQL语句,也不需要手动管理数据库连接等细节,因此通常不需要使用DAO模式。同时,由于Hibernate的实体类已经具有了数据访问的功能,因此通常也不需要再定义额外的数据访问接口和实现类。不过,在某些特定的场景中,可能会需要使用DAO模式来进一步封装数据访问的细节,以便更好地管理数据访问逻辑。
7. demo
@Entity
@Table(name = "user")
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(name = "username")private String username;@Column(name = "password")private String password;// 省略getter和setter方法
}
public interface UserRepository extends JpaRepository<User, Long> {List<User> findByUsername(String username);
}
@SpringBootApplication
@EnableJpaRepositories(basePackages = "com.example.demo.repository")
@EntityScan(basePackages = "com.example.demo.entity")
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}
相关文章:
Hibernate 相关特性
1. Hibernate一般使用hql进行查询,但也有sql执行的方法 Native sql 查询,。需要注意的是,使用Native SQL查询可能会破坏Hibernate的缓存机制,并可能导致性能问题 String sql "SELECT * FROM users WHERE age > :age"; Query …...
【研究生学术英语读写教程翻译 中国科学院大学Unit1-Unit8】
Unit1 Descartes Was Wrong 笛卡尔错了:“他人在,故我在” Unit2 Are we ready for the next volcanic catastrophe?我们准备好应对下一次火山灾难了吗? Unit3 Theorists,experimentalists and the bias in popular physics理论家,实验家和大众物理学的偏见 unit4 Magic Nu…...
ListView 控件的使用
第一步:找到ListView的控件通过findViewById 找到ListView的控件 ListView listView findViewById(R.id.listView);第二步:创建Bean类 得到set和get的方法解析获取的数据创建Bean类 得到set和get的方法public class Bean {String nanm""; pub…...
域控制器搭建以及成员加入
需要iso:windows server 2016软件使用:vmwarewindows server 2016系统搭建自己选iso,一直下一步就可以安装完成。(记得要设置密码)(密码要求大小写字母数字符号)等待就能安装完成。安装和配置Ac…...
利用 MLP(多层感知器)和 RBF(径向基函数)神经网络解决的近似和分类示例问题(Matlab代码实现)
目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨💻4 Matlab代码 💥1 概述 1、径向基神经网络 径向基函数网络是由三层构成的前向网络:第一层为输入层,节点个数的能与输入的维数&…...
进阶C语言——数据的存储【详解】
文章目录1. 数据类型介绍1.1 类型的基本归类2. 整形在内存中的存储2.1 原码、反码、补码2.2 大小端介绍2.3 练习3. 浮点型在内存中的存储3.1 一个例子3.2 浮点数存储的规则1. 数据类型介绍 前面我们已经学习了基本的内置类型: char //字符数据类型 short //短整型 …...
KUKA机器人修改机器人名称和IP地址的具体方法示例
KUKA机器人修改机器人名称和IP地址的具体方法示例 修改机器人名称 如下图所示,首先切换用户组到管理员,输入默认密码:kuka, 如下图所示,点击菜单键—投入运行—机器人数据, 如下图所示,此时可以看到机器人的名称为rrr445, 如下图所示,修改之后,点击左侧的“”…...
【数据分析师求职面试指南】必备基础知识整理
数据分析师基础知识统计 数据分析知识基础概念随机变量常用特征正态分布与大数定律、中心极限定律假设检验模型、数据挖掘知识常用概念数据集划分欠拟合过拟合模型分类方法常见模型介绍线性回归模型:逻辑回归模型决策树模型随机森林模型Boosting模型XGBoost模型模型…...
《开关电源宝典 降压电路(BUCK)的原理与应用》
嗨,硬件攻城狮或电源工程师同行们,我想写本专门解析BUCK电源电路的书籍,以下是“前言”内容的部分摘录以及当前的目录,当前已经完成22万多字500多页了,即使如此,离真正出版书籍,还有很长的路要走…...
R语言基础(一):注释、变量
R语言用于统计分析和绘制图表等操作。不同于Java等其它语言,R用于统计,而不是做一个网站或者软件,所以R的一些开发习惯和其它语言不同。如果你是一个编程小白,那么可以放心大胆的学。如果你是一个有编程基础的人,那么需…...
Java 集合进阶(二)
文章目录一、Set1. 概述2. 哈希值3. 元素唯一性4. 哈希表5. 遍历学生对象6. LinkedHashSet7. TreeSet7.1 自然排序7.2 比较器排序8. 不重复的随机数二、泛型1. 概述2. 泛型类3. 泛型方法4. 泛型接口5. 类型通配符6. 可变参数7. 可变参数的使用一、Set 1. 概述 Set 集合特点&am…...
小孩用什么样的台灯比较好?2023眼科医生青睐的儿童台灯推荐
小孩子属于眼睛比较脆弱的人群,所以选购护眼台灯时,选光线温和的比较好,而且调光、显色效果、色温、防蓝光等方面也要出色,否则容易导致孩子近视。 1、调光。台灯首先是照度高,国AA级+大功率发光࿰…...
Ubuntu c++ MySQL数据库操作
mysql安装sudo apt-get install updatesudo apt-get install mysql-server libmysqlclient-dev mysql-workbenchmysql启动/重启/停止sudo service mysql start/restart/stop登录mysql命令:mysql -uroot -p错误异常:解决办法:修改mysqld.cnf配…...
C++11:lambda表达式
文章目录1. 概念2. 语法3. 示例示例1示例2示例3示例44. 捕捉方式基本方式隐式和混合补充5. 传递lambda表达式示例6. 原理7. 内联属性1. 概念 lambda表达式实际上是一个匿名类的成员函数,该类由编译器为lambda创建,该函数被隐式地定义为内联。因此&#…...
【Android -- 开源库】表格 SmartTable 的基本使用
介绍 1. 功能 快速配置自动生成表格;自动计算表格宽高;表格列标题组合;表格固定左序列、顶部序列、第一行、列标题、统计行;自动统计,排序(自定义统计规则);表格图文、序列号、列标…...
自动化测试实战篇(9),jmeter常用断言方法,一文搞懂9种测试字段与JSON断言
Jmeter常用的断言主要有,JSON断言和响应断言这两种方式。 断言主要就是帮助帮助人工进行快速接口信息验证避免繁杂的重复的人工去验证数据 第一种响应断言Apply to:表示应用范围测试字段:针对响应数据进行不同的匹配响应文本响应代码响应信息…...
vue-virtual-scroll-list虚拟列表
当DOM中渲染的列表数据过多时,页面会非常卡顿,非常占用浏览器内存。可以使用虚拟列表来解决这个问题,即使有成百上千条数据,页面DOM元素始终控制在指定数量。 一、参考文档 https://www.npmjs.com/package/vue-virtual-scroll-li…...
C++学习笔记(以供复习查阅)
视频链接 代码讲义 提取密码: 62bb 文章目录1、C基础1.1 C初识(1) 第一个C程序(2)注释(3)变量(4)常量(5)关键字(6)标识符命名规则1.2 …...
备份时间缩短为原来 1/4,西安交大云数据中心的软件定义存储实践
XEDP 统一数据平台为西安交通大学云平台业务提供可靠的备份空间和强大的容灾能力,同时确保数据安全。西安交通大学(简称“西安交大”)是我国最早兴办、享誉海内外的著名高等学府,是教育部直属重点大学。学校现有兴庆、雁塔、曲江和…...
我国近视眼的人数已经超过了六亿,国老花眼人数超过三亿人
眼镜是一种用于矫正视力问题、改善视力、减轻眼睛疲劳的光学器件,在我们的生活中不可忽略的一部分,那么我国眼镜市场发展情况是怎样了?下面小编通过可视化互动平台对我国眼镜市场的状况进行分析。我国是一个近视眼高发的国家,据统…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
