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.pswp.cn/bicheng/14953.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/14953.shtml
英文地址,請注明出處:http://en.pswp.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;…