JAVA面试题大全(十一)

1、为什么要使用 hibernate?

  • 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码
  • 基于jdbc的主流持久化框架,是一个优秀的ORM实现,很大程度的简化了dao层的编码工作
  • 使用java的反射机制
  • 性能好,是一个轻量级框架,映射灵活,支持很多关系型数据库,从一对一到多对多的各种复杂关系

2、什么是 ORM 框架? 

ORM(Object Relation Mapping)对象关系映射

通过类与数据库表的映射关系,将对象持久化到数据库中

常见的ORM框架有Hibernate、Mybatis、EclipseLink、JFinal

3、hibernate 中如何在控制台查看打印的 sql 语句?

在 Hibernate 中,可以通过以下几种方式在控制台查看打印的 SQL 语句:

  1. 配置日志级别:在 Hibernate 的配置文件(如hibernate.cfg.xml)中,将日志级别设置为DEBUGTRACE。这样,Hibernate 会在控制台打印更多详细的信息,包括执行的 SQL 语句。

  2. 使用日志框架:将 Hibernate 与日志框架(如 Log4j 或 SLF4J)集成,并在日志配置文件中设置适当的日志级别。这样可以更灵活地控制日志输出,并将 SQL 语句打印到指定的日志文件中。

  3. 开启 Hibernate 的显示 SQL 功能:在 Hibernate 的配置文件中,设置show_sql属性为true。这样,Hibernate 会在执行 SQL 语句时将其打印到控制台。

  4. 使用 Hibernate 的拦截器:编写自定义的拦截器类,实现org.hibernate.EmptyInterceptor接口,并在preFlush方法中获取当前执行的 SQL 语句,并将其打印到控制台。

4、hibernate 有几种查询方式?

HQL,QBC(Query By Criteria),原生SQL查询

5、hibernate 实体类可以被定义为 final 吗?

可以,但是这种做法不好。因为Hibernate会使用代理模式在延迟关联的情况下提高性能,如果把实体类定义成final类之后,因为java不允许对final类进行扩展,所以hibernate就无法再使用代理了,从而影响性能。

6、在 hibernate 中使用 Integer 和 int 做映射有什么区别?

如果使用基本类型变量int,如果数据库中对应的存储数据是null,使用PO类进行获取数据会出现类型转换异常。

如果使用你的是对象类型Integer则不会报错。

7、get()和 load()的区别?

get:get方法被调用时会立即发出SQL语句

load:当调用load方法的时候会返回一个目标对象的代理对象,在这个代理对象中只存储了目标对象的ID值,只有当调用除ID值以外的属性值的时候才会发出SQL查询。

8、说一下 hibernate 的缓存机制?

Hibernate 的缓存机制是其性能优化的重要手段之一。Hibernate 的缓存分为一级缓存和二级缓存。

  1. 一级缓存:也称为会话级缓存,是 Hibernate 中默认启用的缓存。它与当前的会话相关联,存储了从数据库中查询到的对象。当再次访问同一个对象时,Hibernate 会从一级缓存中获取,而不是再次查询数据库,从而提高了性能。
  2. 二级缓存:也称为进程级或应用级缓存,是在一级缓存的基础上进一步扩展的缓存。它可以在多个会话之间共享缓存的数据,从而减少了对数据库的访问次数。Hibernate 提供了多种二级缓存实现,如 Ehcache、Redis 等。

Hibernate 的缓存机制通过以下方式提高性能:

  1. 减少数据库访问次数:通过缓存已经查询到的对象,避免了重复查询数据库,从而减少了数据库的负载和响应时间。
  2. 提高数据访问效率:缓存中的数据可以直接访问,无需进行数据库查询和结果映射,提高了数据访问的效率。
  3. 支持事务隔离级别:Hibernate 的缓存可以与数据库的事务隔离级别配合使用,确保在事务提交之前,缓存中的数据与数据库中的数据保持一致。

需要注意的是,缓存机制虽然可以提高性能,但也可能带来一些问题,如缓存一致性、缓存过期等。因此,在使用缓存时,需要根据具体的业务需求和数据访问模式进行合理的配置和管理。

9、hibernate 是如何工作的?

  1. 读取并解析配置
  2. 读取并解析映射信息
  3. 创建Session Factory
  4. 打开Session
  5. 创建事务Transaction
  6. 持久化操作
  7. 提交事务
  8. 关闭Session
  9. 关闭SessionFactory

10、hibernate 对象有哪些状态?

  • Transient(瞬时):对象刚new出来,还没设ID,设了其他值
  • Persistent(持久):调用了save()、saveOrUpdate(),就变成Persistent
  • Detached(托管):当session close()完之后,变成Detached

 11、hibernate 实体类必须要有无参构造函数吗?为什么?

必须,因为hibernate框架会调用这个默认构造方法来构造实例对象。

如果没有提供任何构造方法,虚拟机会自动提供默认构造方法,如果开发人员提供了其他有参数的构造方法的话,虚拟机就不再提供默认构造方法,这时必须手动把无参构造器写出来。

12、在 hibernate 中 getCurrentSession 和 openSession 的区别是什么? 

openSession:每次使用都是打开一个新的对象,而且使用完需要调用close方法关闭session

getCurrenctSession:如果已经有session,就使用旧的,如果没有再打开新的。

一般情况下都是使用getCurrenctSession

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/14953.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【STL】C++ list 基本使用

目录 一 list 常见构造 1 空容器构造函数(默认构造函数) 2 Fill 构造函数 3 Range 构造函数 4 拷贝构造函数 二 list迭代器 1 begin && end 2 rbegin && rend 三 list 容量操作 四 list 修改操作 1 assign 2 push_front &a…

【深度学习中的数据预处理技巧:提升模型性能的关键步骤】

文章目录 前言数据标准化(Normalization)数据增强(Data Augmentation)缺失值处理(Handling Missing Values)特征编码(Feature Encoding)结论 前言 在深度学习领域,数据预…

牛客NC362 字典序排列【中等 DFS Java/Go/PHP】

题目 题目链接: https://www.nowcoder.com/practice/de49cf70277048518314fbdcaba9b42c 解题方法 DFS,剪枝Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回…

【小笔记】如何在docker中更新或导入neo4j数据?

如何在docker中更新或导入neo4j数据? (1)背景: 我尝试了4.4.9和5.19.0版本的Neo4j社区版,基于他们的镜像创建容器后,需要导入我准备好的csv文件或dump文件,因为数据量非常大,所以采…

2024电工杯数学建模B题Python代码+结果表数据教学

2024电工杯B题保姆级分析完整思路代码数据教学 B题题目:大学生平衡膳食食谱的优化设计及评价 以下仅展示部分,完整版看文末的文章 import pandas as pd df1 pd.read_excel(附件1:1名男大学生的一日食谱.xlsx) df1# 获取所有工作表名称 e…

HarmonyOS-MPChart绘制一条虚实相接的曲线

本文是基于鸿蒙三方库mpchart(OpenHarmony-SIG/ohos-MPChart)的使用,自定义绘制方法,绘制一条虚实相接的曲线。 mpchart本身的绘制功能是不支持虚实相接的曲线的,要么完全是实线,要么完全是虚线。那么当我…

面试总结之:socket线路切换

"socket线路切换"通常指的是在网络通信过程中,根据当前网络状态或策略来动态更换数据传输路径的技术。这种技术可以提高通信的可靠性和性能。 在实际应用中,线路切换可能涉及到多种技术,例如: 负载均衡:根据每条路径的当前负载情况,动态地选择一条较为空闲的路…

MySql超大Sql文件导入效率优化 —— 筑梦之路

使用场景 日常我们对mysql数据库、mariadb数据库进行定时备份,而随着时间增长,导出来的备份文件越来越大,使用备份sql文件进行还原的时候,大文件非常慢,有些要执行很长时间,效率很低。 如何优化&#xff…

根据多个坐标经纬度获取到中心点的经纬度,scala语言

文章目录 前言scala 代码 总结 前言 Scala 语言 通过多个经纬度坐标点, 计算出中心点, 这里使用的是 Scala 语言,其他的语言需要自行转换。求出来的并不是原有的点,而是原有点的中心位置的点。 scala 代码 package com.dw.process.midimport java.lang.Double.pa…

C语言 | Leetcode C语言题解之第97题交错字符串

题目&#xff1a; 题解&#xff1a; bool isInterleave(char* s1, char* s2, char* s3) {int n strlen(s1), m strlen(s2), t strlen(s3);int f[m 1];memset(f, 0, sizeof(f));if (n m ! t) {return false;}f[0] true;for (int i 0; i < n; i) {for (int j 0; j &l…

基于UDP的tftp的文件传输

#define SER_PORT 69 #define SER_IP "192.168.125.71" #define CLT_PORT 6666 #define CLT_IP "192.168.125.158" int main(int argc, const char *argv[]) {//创建套接字文件描述符int cfd socket(AF_INET,SOCK_DGRAM,0);if(cfd -1){perror("sock…

vue2-computed,vue3+watch 前端实现列表搜索,结合filter+some+indexOf

vue2 computed实现 computed: {FBAAddressListComputed () {if (!this.fbaInput) return this.FBAAddressListconst lowerCaseInput this.fbaInput.toLowerCase()return this.FBAAddressList.filter((item) > {return [item.fbaCode, item.zipCode, item.countryCode, ite…

六(3)、RTKLIB源码解析 — [postpos]: execses(antpos, outhead, procpos)

目录 一、antpos() 1.1 avepos() 1.2 getstapos() 二、outhead() 三、procpos() 3.1 inputobs() 3.1.1 nexto

牛客周赛 Round 42

小红叕战小紫 #include<bits/stdc.h> using namespace std; void solve(){string s;cin>>s;if(s.length()<1)cout<<"yukari";else cout<<"kou"<<endl; } int main(){ios::sync_with_stdio(false), cin.tie(0), cout.tie…

Qt时间类、日期类、时间日期类介绍

一.时间类&#xff08;QTime&#xff09; Qt中的时间类QTime是用来处理时间的类&#xff0c;它可以表示一个特定的时间&#xff0c;精确到毫秒。QTime类提供了一些方法来访问和操作时间&#xff0c;例如获取小时、分钟、秒以及毫秒部分&#xff0c;还可以进行时间的比较和运算。…

Python列表,元组,集合,字典详解一篇搞懂

目录 介绍 列表(List) 集合(Set) 字典(Dict) 元组(Tuple) 列表 列表定义 ​编辑 列表切片 列表常用方法 append extend ​编辑 insert ​编辑 remove pop ​编辑 clear ​编辑 列表修改元素 sort 升序 倒序 reverse count ​编辑 index 浅拷贝和深拷贝 …

《书生·浦语大模型实战营》第一课 学习笔记:书生·浦语大模型全链路开源体系

文章大纲 1. 简介与背景智能聊天机器人与大语言模型目前的开源智能聊天机器人与云上运行模式 2. InternLM2 大模型 简介3. 视频笔记&#xff1a;书生浦语大模型全链路开源体系内容要点从模型到应用典型流程全链路开源体系 4. 论文笔记:InternLM2 Technical Report简介软硬件基础…

基于Java的地震震中附近城市分析实战

目录 前言 一、空间数据说明 1、空间查询 二、Java后台开发 1、模型层设计与实现 2、控制层设计与实现 三、Leaflet地图开发 1、地震震中位置展示 2、附近城市展示 3、成果展示 总结 前言 随着全球气候变化和地壳活动的不断演变&#xff0c;地震作为一种自然灾害&…

第十三节:带你梳理Vue2 : watch侦听器

官方解释:> 观察 Vue 实例变化的一个表达式或计算属性函数。回调函数得到的参数为新值和旧值。表达式只接受监督的键路径。对于更复杂的表达式&#xff0c;用一个函数取代<br/>## 1. 侦听器的基本使用侦听器可以监听data对象属性或者计算属性的变化watch是观察属性的…

现代C++ 如何使用 Lambda 使代码更具表现力、更容易理解?

使用 Lambda 使代码更具表现力 一、Lambda VS. 仿函数二、总结 一、Lambda VS. 仿函数 Lambda 是 C11 中最引人注目的语言特性之一。它是一个强大的工具&#xff0c;但必须正确使用才能使代码更具表现力&#xff0c;而不是更难理解。 首先&#xff0c;要明确的是&#xff0c;…