java - 數(shù)據(jù)庫一條記錄為什么經(jīng)過hibernate查詢變成一個(gè)對(duì)象了呢??
問題描述
今天面試問到了這個(gè)問題,他的意思是讓剖析源碼嗎??突然感覺到好奇怪,,ORM框架,不就是這樣的嗎??求大神解釋。謝了
問題解答
回答1:之前早上出門答得太急了,現(xiàn)在來細(xì)說一下,這里可以提到兩點(diǎn):
持久化
反序列化
那么持久化樓下各位都提到了,即將一個(gè)對(duì)象保存到存儲(chǔ)系統(tǒng)中。在你說到的情況下,是保存到數(shù)據(jù)庫。那么一般是將各個(gè)屬性作為字段,然后保存其中的值成為一條記錄。
然后是反序列化。跟數(shù)據(jù)庫建立連接的是通過socket的,那么毫無疑問是走了網(wǎng)絡(luò),你在網(wǎng)絡(luò)中需要傳輸一個(gè)對(duì)象就得對(duì)其進(jìn)行序列化。也就是說:在通過數(shù)據(jù)庫鏈接拿到 ResultSet 的時(shí)候就已經(jīng)完成了反序列化過程。
回答2:所以先常常sql, 看用下原始的jdbc , 你就知道為什么會(huì)有這框架了
回答3:一般面試官問到JDBC就到底了吧,所以@泊浮目 所說的反序列化我覺得不是面試官的意思。用原生的JDBC執(zhí)行SQL可以拿到ResultSet對(duì)象,框架不過是從里面取一個(gè)個(gè)字段值,然后封裝到一個(gè)對(duì)象中而已。我的理解就是這樣,也確實(shí)沒看過這種ORM的源碼,雖然我用Mybatis比較順手。
回答4:這個(gè)和反序列化沒什么關(guān)系吧。原始JDBC查詢出的是ResultSet,Hibernate通過xml配置或Anotation知道了ResultSet中字段和對(duì)象屬性的對(duì)應(yīng)關(guān)系,然后通過反射的機(jī)制生成POJO對(duì)象。
回答5:這么巧,你發(fā)問題十六個(gè)小時(shí)后我面試被問到了同樣的問題.我的回答基本和@邢愛明在本問題的回答一致.但是看反應(yīng),感覺并不是面試官想要的.個(gè)人覺得這種問題挺奇葩的.主要get不到其具體想考核哪方面的東西.
還有一個(gè)問題,我確認(rèn)了幾遍確定沒聽錯(cuò),但是到現(xiàn)在也沒弄懂問的是什么..jquery ${}和#{}有什么區(qū)別,注意是大括號(hào)..
相關(guān)文章:
1. html5 - ElementUI table中el-table-column怎么設(shè)置百分比顯示。2. python - 使用readlines()方法讀取文件內(nèi)容后,再用for循環(huán)遍歷文件與變量匹配時(shí)出現(xiàn)疑難?3. 對(duì)mysql某個(gè)字段監(jiān)控的功能4. css - 網(wǎng)頁div區(qū)塊 像蘋果一樣可左右滑動(dòng) 手機(jī)與電腦5. 注冊(cè)賬戶文字不能左右分離6. JavaScript事件7. javascript - 數(shù)組的過濾和渲染8. javascript - table列過多,有什么插件可以提供列排序和選擇顯示列的功能9. html - vue項(xiàng)目中用到了elementUI問題10. javascript - ES6標(biāo)準(zhǔn)入門中l(wèi)et命令提到的for循環(huán)打印i是10,如果不用let怎么替換?
