中文在线免费看视频_国产成人精品亚洲日本在线观看_亚洲精品第一综合99久久_国产亚洲精品日韩综合网

當前位置: 首頁 / 技術干貨 / 正文
好程序員Java培訓分享Mybatis面試題集合

2020-10-12

Java培訓

  今天好程序員Java培訓老師給大家分享一篇關于Mybatis面試題的詳細介紹,下面我們一起來看一下吧。

好程序員

  1.#{}和${}的區別是什么?

  #{}是預編譯處理,${}是字符串替換。

  Mybatis在處理#{}時,會將sql中的#{}替換為?號,調用PreparedStatement的set方法來賦值;

  Mybatis在處理${}時,就是把${}替換成變量的值。

  使用#{}可以有效的防止SQL注入,提高系統安全性。

  2.通常一個Xml映射文件,都會寫一個Dao接口與之對應,請問,這個Dao接口的工作原理是什么?Dao接口里的方法,參數不同時,方法能重載嗎?

  Dao接口,就是人們常說的Mapper接口,接口的全限名,就是映射文件中的namespace的值,接口的方法名,就是映射文件中MappedStatement的id值,接口方法內的參數,就是傳遞給sql的參數。

  Mapper接口是沒有實現類的,當調用接口方法時,接口全限名+方法名拼接字符串作為key值,可唯一定位一個MappedStatement,舉例:com.mybatis3.mappers.StudentDao.findStudentById,可以唯一找到namespace為com.mybatis3.mappers.StudentDao下面id=findStudentById的MappedStatement。在Mybatis中,每一個、、、標簽,都會被解析為一個MappedStatement對象。  Dao接口里的方法,是不能重載的,因為是全限名+方法名的保存和尋找策略。  Dao接口的工作原理是JDK動態代理,Mybatis運行時會使用JDK動態代理為Dao接口生成代理proxy對象,代理對象proxy會攔截接口方法,轉而執行MappedStatement所代表的sql,然后將sql執行結果返回。  3.Mybatis是如何進行分頁的?分頁插件的原理是什么?   Mybatis使用RowBounds對象進行分頁,它是針對ResultSet結果集執行的內存分頁,而非物理分頁,可以在sql內直接書寫帶有物理分頁的參數來完成物理分頁功能,也可以使用分頁插件來完成物理分頁。  分頁插件的基本原理是使用Mybatis提供的插件接口,實現自定義插件,在插件的攔截方法內攔截待執行的sql,然后重寫sql,根據dialect方言,添加對應的物理分頁語句和物理分頁參數。  4.Mybatis是如何將sql執行結果封裝為目標對象并返回的?都有哪些映射形式?   diyi種是使用標簽,逐一定義列名和對象屬性名之間的映射關系。  第二種是使用sql列的別名功能,將列別名書寫為對象屬性名,比如T_NAMEASNAME,對象屬性名一般是name,小寫,但是列名不區分大小寫,Mybatis會忽略列名大小寫,智能找到與之對應對象屬性名,你甚至可以寫成T_NAMEASNaMe,Mybatis一樣可以正常工作。  有了列名與屬性名的映射關系后,Mybatis通過反射創建對象,同時使用反射給對象的屬性逐一賦值并返回,那些找不到映射關系的屬性,是無法完成賦值的。  5.Xml映射文件中,除了常見的select|insert|update|delete標簽之外,還有哪些標簽?   還有很多其他的標簽,加上動態sql的9個標簽,trim|where|set|foreach|if|choose|when|otherwise|bind等,其中為sql片段標簽,通過標簽引入sql片段,為不支持自增的主鍵生成策略標簽。  6.簡述Mybatis的插件運行原理,以及如何編寫一個插件?   Mybatis僅可以編寫針對ParameterHandler、ResultSetHandler、StatementHandler、Executor這4種接口的插件,Mybatis使用JDK的動態代理,為需要攔截的接口生成代理對象以實現接口方法攔截功能,每當執行這4種接口對象的方法時,就會進入攔截方法,具體就是InvocationHandler的invoke()方法,當然,只會攔截那些你指定需要攔截的方法。實現Mybatis的Interceptor接口并復寫intercept()方法,然后在給插件編寫注解,指定要攔截哪一個接口的哪些方法即可,記住,還需要在配置文件中配置你編寫的插件。  7.一級、二級緩存  1)一級緩存:基于PerpetualCache的HashMap本地緩存,其存儲作用域為Session,當Sessionflush或close之后,該Session中的所有Cache就將清空。  2)二級緩存與一級緩存其機制相同,默認也是采用PerpetualCache,HashMap存儲,不同在于其存儲作用域為Mapper(Namespace),并且可自定義存儲源,如Ehcache。要開啟二級緩存,你需要在你的SQL映射文件中添加一行:   3)對于緩存數據更新機制,當某一個作用域(一級緩存Session/二級緩存Namespaces)的進行了C/U/D操作后,默認該作用域下所有select中的緩存將被clear。  8.Mybatis是否支持延遲加載?如果支持,它的實現原理是什么?   Mybatis僅支持association關聯對象和collection關聯集合對象的延遲加載,association指的就是一對一,collection指的就是一對多查詢。在Mybatis配置文件中,可以配置是否啟用延遲加載lazyLoadingEnabled=true|false。  它的原理是,使用CGLIB創建目標對象的代理對象,當調用目標方法時,進入攔截器方法,比如調用a.getB().getName(),攔截器invoke()方法發現a.getB()是null值,那么就會單獨發送事先保存好的查詢關聯B對象的sql,把B查詢上來,然后調用a.setB(b),于是a的對象b屬性就有值了,接著完成a.getB().getName()方法的調用。這就是延遲加載的基本原理。  9.Mybatis映射文件中,如果A標簽通過include引用了B標簽的內容,請問,B標簽能否定義在A標簽的后面,還是說必須定義在A標簽的前面?   雖然Mybatis解析Xml映射文件是按照順序解析的,但是,被引用的B標簽依然可以定義在任何地方,Mybatis都可以正確識別。  原理是,Mybatis解析A標簽,發現A標簽引用了B標簽,但是B標簽尚未解析到,尚不存在,此時,Mybatis會將A標簽標記為未解析狀態,然后繼續解析余下的標簽,包含B標簽,待所有標簽解析完畢,Mybatis會重新解析那些被標記為未解析的標簽,此時再解析A標簽時,B標簽已經存在,A標簽也就可以正常解析完成了。  10.簡述Mybatis的Xml映射文件和Mybatis內部數據結構之間的映射關系?   Mybatis將所有Xml配置信息都封裝到All-In-One重量級對象Configuration內部。在Xml映射文件中,標簽會被解析為ParameterMap對象,其每個子元素會被解析為ParameterMapping對象。標簽會被解析為ResultMap對象,其每個子元素會被解析為ResultMapping對象。每一個、、、標簽均會被解析為MappedStatement對象,標簽內的sql會被解析為BoundSql對象。

  11、簡述Mybatis的插件運行原理,以及如何編寫一個插件。

  Mybatis僅可以編寫針對ParameterHandler、ResultSetHandler、StatementHandler、Executor這4種接口的插件,Mybatis使用JDK的動態代理,為需要攔截的接口生成代理對象以實現接口方法攔截功能,每當執行這4種接口對象的方法時,就會進入攔截方法,具體就是InvocationHandler的invoke()方法,當然,只會攔截那些你指定需要攔截的方法。

  實現Mybatis的Interceptor接口并復寫intercept()方法,然后在給插件編寫注解,指定要攔截哪一個接口的哪些方法即可,記住,別忘了在配置文件中配置你編寫的插件。

  12、Mybatis動態sql是做什么的?都有哪些動態sql?能簡述一下動態sql的執行原理不?

  Mybatis動態sql可以讓我們在Xml映射文件內,以標簽的形式編寫動態sql,完成邏輯判斷和動態拼接sql的功能,Mybatis提供了9種動態sql標簽trim|where|set|foreach|if|choose|when|otherwise|bind。

  其執行原理為,使用OGNL從sql參數對象中計算表達式的值,根據表達式的值動態拼接sql,以此來完成動態sql的功能。

  13、Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重復?

  不同的xml映射文件,如果配置了namespace,那么id可以重復;如果沒有配置namespace,那么id不能重復;畢竟namespace不是必須的,只是最佳實踐而已。

  原因就是namespace+id是作為Map

  14、MyBatis(IBatis)的好處是什么

  ibatis把sql語句從Java源程序中獨立出來,放在單獨的XML文件中編寫,給程序的維護帶來了很大便利。ibatis封裝了底層JDBCAPI的調用細節,并能自動將結果集轉換成JavaBean對象,大大簡化了Java數據庫編程的重復工作。因為Ibatis需要程序員自己去編寫sql語句,程序員可以結合數據庫自身的特點靈活控制sql語句,因此能夠實現比hibernate等全自動orm框架更高的查詢效率,能夠完成復雜查詢.

  15、什么情況下用注解綁定,什么情況下用xml綁定?

  當Sql語句比較簡單時候,用注解綁定,

  當SQL語句比較復雜時候,用xml綁定,一般用xml綁定的比較多

  16、MyBatis實現一對多有幾種方式,怎么操作的?

  有聯合查詢和嵌套查詢,聯合查詢是幾個表聯合查詢,只查詢一次,通過在resultMap里面配置collection節點配置一對多的類就可以完成;

  嵌套查詢是先查一個表,根據這個表里面的結果的外鍵id,去再另外一個表里面查詢數據,也是通過配置collection,但另外一個表的查詢通過select節點配置。

好程序員公眾號

  • · 剖析行業發展趨勢
  • · 匯聚企業項目源碼

好程序員開班動態

More+
  • HTML5大前端 <高端班>

    開班時間:2021-04-12(深圳)

    開班盛況

    開班時間:2021-05-17(北京)

    開班盛況
  • 大數據+人工智能 <高端班>

    開班時間:2021-03-22(杭州)

    開班盛況

    開班時間:2021-04-26(北京)

    開班盛況
  • JavaEE分布式開發 <高端班>

    開班時間:2021-05-10(北京)

    開班盛況

    開班時間:2021-02-22(北京)

    開班盛況
  • Python人工智能+數據分析 <高端班>

    開班時間:2021-07-12(北京)

    預約報名

    開班時間:2020-09-21(上海)

    開班盛況
  • 云計算開發 <高端班>

    開班時間:2021-07-12(北京)

    預約報名

    開班時間:2019-07-22(北京)

    開班盛況
IT培訓IT培訓
在線咨詢
IT培訓IT培訓
試聽
IT培訓IT培訓
入學教程
IT培訓IT培訓
立即報名
IT培訓

Copyright 2011-2023 北京千鋒互聯科技有限公司 .All Right 京ICP備12003911號-5 京公網安備 11010802035720號

中文在线免费看视频_国产成人精品亚洲日本在线观看_亚洲精品第一综合99久久_国产亚洲精品日韩综合网

            国产精一品亚洲二区在线视频| 毛片不卡一区二区| 精品国产一区久久| 欧美日韩一区二区在线视频| 精品三级在线看| 精品视频1区2区3区| 99久久99久久久精品齐齐| 久久国产剧场电影| 日韩av电影天堂| 亚洲最大色网站| 中文字幕日本乱码精品影院| 久久久亚洲精华液精华液精华液| 欧美一区二区三区喷汁尤物| 欧美色综合网站| 色一情一乱一乱一91av| 成人黄页在线观看| 国产999精品久久| 国产一区二区三区四 | 中文字幕一区二区三区在线不卡| 欧美mv日韩mv亚洲| 欧美成人video| 欧美一级电影网站| 91精品国产综合久久久久久久| 一本色道**综合亚洲精品蜜桃冫| 99久久精品免费| 成人激情动漫在线观看| 成人免费观看av| 丁香婷婷综合网| 国产69精品一区二区亚洲孕妇| 国产一区二区不卡| 国产精品一区二区久激情瑜伽| 亚洲女同一区二区| 亚洲日本在线天堂| 亚洲欧洲综合另类| 一区在线观看视频| ...xxx性欧美| 玉米视频成人免费看| 亚洲黄色尤物视频| 国产片一区二区| 国产精品情趣视频| 国产精品免费aⅴ片在线观看| 国产欧美一区视频| 老鸭窝一区二区久久精品| 免费观看91视频大全| 美国精品在线观看| 国产高清精品网站| 99国产精品视频免费观看| 一本一道久久a久久精品综合蜜臀| 91亚洲国产成人精品一区二区三| 国产一区二区三区免费观看| 国产成人免费网站| 91在线视频官网| 欧美午夜一区二区三区| 欧美一级免费观看| 国产亚洲美州欧州综合国| 国产精品超碰97尤物18| 亚洲国产精品尤物yw在线观看| 午夜久久久影院| 精品伊人久久久久7777人| 六月丁香婷婷色狠狠久久| 国产成人精品亚洲777人妖 | 久久亚洲精华国产精华液| 国产性做久久久久久| 亚洲免费观看高清完整版在线观看| 一区二区三区在线视频免费| 免费人成在线不卡| 成人自拍视频在线观看| aaa欧美色吧激情视频| 在线观看视频欧美| 久久久综合视频| 亚洲精品国产品国语在线app| 精品一区二区三区av| 欧美亚洲高清一区二区三区不卡| 国产欧美日韩视频在线观看| 日韩精品福利网| 91蝌蚪porny九色| 久久久综合激的五月天| 日韩精品国产精品| 欧美在线不卡视频| 中文字幕在线观看一区| 国产精品一区二区无线| 欧美一级免费观看| 亚洲福利视频三区| 日韩美女久久久| 精品在线你懂的| 555www色欧美视频| 亚洲电影视频在线| 97久久人人超碰| 中文字幕精品三区| 国产一区二区不卡老阿姨| 欧美一区二区三区视频免费播放| 一区二区免费在线| 91丨porny丨国产入口| 中文字幕 久热精品 视频在线| 精品综合免费视频观看| 日韩欧美在线影院| 视频一区二区不卡| 在线成人免费视频| 婷婷丁香久久五月婷婷| 欧美三级一区二区| 亚洲午夜久久久久| 欧美在线观看视频一区二区| 成人欧美一区二区三区黑人麻豆 | 亚洲人成人一区二区在线观看| 国产不卡视频一区二区三区| 久久先锋影音av| 国产伦精一区二区三区| 26uuu成人网一区二区三区| 久久99热这里只有精品| 日韩免费高清视频| 狠狠色丁香婷婷综合| 精品国产123| 国产精品一级在线| 日本一区二区成人在线| 白白色 亚洲乱淫| 亚洲欧美一区二区三区极速播放 | 91麻豆精品国产91久久久更新时间 | 亚洲国产一区视频| 欧美日韩免费视频| 秋霞电影网一区二区| 琪琪一区二区三区| 日韩一区二区在线看| 日本成人在线一区| 精品日韩在线观看| 国产福利一区在线| 亚洲欧洲三级电影| 在线免费视频一区二区| 亚洲电影在线播放| 7777精品伊人久久久大香线蕉 | 99国产精品久久久久| 亚洲综合久久久| 91精品国产综合久久福利软件| 奇米777欧美一区二区| 精品国产电影一区二区| 丰满少妇在线播放bd日韩电影| 中文成人av在线| 99久久99久久精品免费看蜜桃| 亚洲综合精品自拍| 欧美一级欧美一级在线播放| 国产在线国偷精品免费看| 国产精品久久国产精麻豆99网站| 91精品91久久久中77777| 日本不卡高清视频| 国产无一区二区| 欧美性大战久久久久久久蜜臀| 日韩精品免费专区| 国产女人aaa级久久久级 | 日韩毛片精品高清免费| 在线电影一区二区三区| 国产99久久久国产精品潘金| 亚洲在线视频一区| 久久综合狠狠综合| 欧美系列一区二区| 国产精品资源在线观看| 一区二区三区美女| www亚洲一区| 欧美在线不卡一区| 国产成人亚洲综合色影视| 亚洲地区一二三色| 国产日韩视频一区二区三区| 欧美视频日韩视频在线观看| 国产精品一区二区三区99| 亚洲小说欧美激情另类| 久久蜜桃香蕉精品一区二区三区| 欧美中文字幕一二三区视频| 国产精品一区一区三区| 天天色图综合网| 亚洲色图第一区| 久久婷婷一区二区三区| 欧美日韩亚洲不卡| 成人avav影音| 日韩三级视频在线看| 91欧美一区二区| 国产在线精品一区二区不卡了 | 日本欧美加勒比视频| 亚洲桃色在线一区| 国产亚洲va综合人人澡精品 | 亚洲一区欧美一区| 国产精品色一区二区三区| 91精品国产综合久久久蜜臀图片| 99精品久久久久久| 国产精品一区不卡| 免费美女久久99| 亚洲午夜羞羞片| 中文字幕日韩一区二区| 国产午夜精品在线观看| 欧美成人欧美edvon| 欧美欧美午夜aⅴ在线观看| 色老汉一区二区三区| 99久久夜色精品国产网站| 国产黄色精品网站| 九九热在线视频观看这里只有精品| 亚洲一区二区欧美激情| 亚洲欧洲三级电影| 中文字幕一区二区三中文字幕| 久久网站最新地址| 精品国产91亚洲一区二区三区婷婷| 9191成人精品久久| 欧美日韩不卡视频| 欧美久久久久久蜜桃|