關鍵時刻,第一時間送達!java
閱讀本文須要5分鐘 底部獲取全棧資源程序員
Mybatis中如何執行批處理?
使用BatchExecutor完成批處理。web
Mybatis都有哪些Executor執行器?它們之間的區別是什麼?
Mybatis有三種基本的Executor執行器,SimpleExecutor、ReuseExecutor、BatchExecutor。面試
SimpleExecutor:每執行一次update或select,就開啓一個Statement對象,用完馬上關閉Statement對象。sql
ReuseExecutor:執行update或select,以sql做爲key查找Statement對象,存在就使用,不存在就建立,用完後,不關閉Statement對象,而是放置於Map<String, Statement>內,供下一次使用。簡言之,就是重複使用Statement對象。數據庫
BatchExecutor:執行update(沒有select,JDBC批處理不支持select),將全部sql都添加到批處理中(addBatch()),等待統一執行(executeBatch()),它緩存了多個Statement對象,每一個Statement對象都是addBatch()完畢後,等待逐一執行executeBatch()批處理。與JDBC批處理相同。編程
做用範圍:Executor的這些特色,都嚴格限制在SqlSession生命週期範圍內。緩存
Mybatis中如何指定使用哪種Executor執行器?
在Mybatis配置文件中,能夠指定默認的ExecutorType執行器類型,也能夠手動給DefaultSqlSessionFactory的建立SqlSession的方法傳遞ExecutorType類型參數。微信
Mybatis是否能夠映射Enum枚舉類?
Mybatis能夠映射枚舉類,不單能夠映射枚舉類,Mybatis能夠映射任何對象到表的一列上。映射方式爲自定義一個TypeHandler,實現TypeHandler的setParameter()和getResult()接口方法。session
TypeHandler有兩個做用,一是完成從javaType至jdbcType的轉換,二是完成jdbcType至javaType的轉換,體現爲setParameter()和getResult()兩個方法,分別表明設置sql問號佔位符參數和獲取列查詢結果。
Mybatis映射文件中,若是A標籤經過include引用了B標籤的內容,請問,B標籤可否定義在A標籤的後面,仍是說必須定義在A標籤的前面?
雖然Mybatis解析Xml映射文件是按照順序解析的,可是,被引用的B標籤依然能夠定義在任何地方,Mybatis均可以正確識別。
原理是,Mybatis解析A標籤,發現A標籤引用了B標籤,可是B標籤還沒有解析到,尚不存在,此時,Mybatis會將A標籤標記爲未解析狀態,而後繼續解析餘下的標籤,包含B標籤,待全部標籤解析完畢,Mybatis會從新解析那些被標記爲未解析的標籤,此時再解析A標籤時,B標籤已經存在,A標籤也就能夠正常解析完成了。
簡述Mybatis的Xml映射文件和Mybatis內部數據結構之間的映射關係?
Mybatis將全部Xml配置信息都封裝到All-In-One重量級對象Configuration內部。在Xml映射文件中,<parameterMap>標籤會被解析爲ParameterMap對象,其每一個子元素會被解析爲ParameterMapping對象。
<resultMap>標籤會被解析爲ResultMap對象,其每一個子元素會被解析爲ResultMapping對象。
每個<select>、<insert>、<update>、<delete>標籤均會被解析爲MappedStatement對象,標籤內的sql會被解析爲BoundSql對象。
JDBC編程有哪些不足之處,MyBatis是如何解決這些問題的?
一、數據庫連接建立、釋放頻繁形成系統資源浪費從而影響系統性能,若是使用數據庫連接池可解決此問題。
解決:在SqlMapConfig.xml中配置數據連接池,使用鏈接池管理數據庫連接。
二、Sql語句寫在代碼中形成代碼不易維護,實際應用sql變化的可能較大,sql變更須要改變java代碼。
解決:將Sql語句配置在XXXXmapper.xml文件中與java代碼分離。
三、向sql語句傳參數麻煩,由於sql語句的where條件不必定,可能多也可能少,佔位符須要和參數一一對應。
解決: Mybatis自動將java對象映射至sql語句。
四、對結果集解析麻煩,sql變化致使解析代碼變化,且解析前須要遍歷,若是能將數據庫記錄封裝成pojo對象解析比較方便。
解決:Mybatis自動將sql執行結果映射至java對象。
MyBatis編程步驟是什麼樣的?
一、 建立SqlSessionFactory
二、 經過SqlSessionFactory建立SqlSession
三、 經過sqlsession執行數據庫操做
四、 調用session.commit()提交事務
五、 調用session.close()關閉會話
MyBatis與Hibernate有哪些不一樣?
1.Mybatis和hibernate不一樣,它不徹底是一個ORM框架,由於MyBatis須要程序員本身編寫Sql語句。
mybatis能夠經過XML或註解方式靈活配置要運行的sql語句,並將java對象和sql語句映射生成最終執行的sql,最後將sql執行的結果再映射生成java對象。
2.Mybatis學習門檻低,簡單易學,程序員直接編寫原生態sql,可嚴格控制sql執行性能,靈活度高,很是適合對關係數據模型要求不高的軟件開發。
例如互聯網軟件、企業運營類軟件等,由於這類軟件需求變化頻繁,一但需求變化要求成果輸出迅速。
可是靈活的前提是mybatis沒法作到數據庫無關性,若是須要實現支持多種數據庫的軟件則須要自定義多套sql映射文件,工做量大。
3.Hibernate對象/關係映射能力強,數據庫無關性好,對於關係模型要求高的軟件(例如需求固定的定製化軟件)若是用hibernate開發能夠節省不少代碼,提升效率。
可是Hibernate的學習門檻高,要精通門檻更高,並且怎麼設計O/R映射,在性能和對象模型之間如何權衡,以及怎樣用好Hibernate須要具備很強的經驗和能力才行。
總之,按照用戶的需求在有限的資源環境下只要能作出維護性、擴展性良好的軟件架構都是好架構,因此框架只有適合纔是最好。
使用MyBatis的mapper接口調用時有哪些要求?
一、Mapper接口方法名和mapper.xml中定義的每一個sql的id相同。
二、Mapper接口方法的輸入參數類型和mapper.xml中定義的每一個sql 的parameterType的類型相同。
三、Mapper接口方法的輸出參數類型和mapper.xml中定義的每一個sql的resultType的類型相同。
四、Mapper.xml文件中的namespace便是mapper接口的類路徑。
之後將持續爲你們蒐集面試題。整理的很差也但願你們多多提出寶貴的意見。
END
更多高質量視頻資源請查看《高級社區》,底部還有驚喜
公衆號輸入:全棧資源
另外小編還創建了資源互換微信羣,羣內只留300人,將不斷視頻資源互換,須要進入的能夠掃下面二維碼,加好友以後回覆加羣。
本羣嚴禁伸手黨和其它博主進入,謝謝,定時清理!!!
是否是很棒!!!分享一下吧,小夥伴們!!!
上一篇文章《mybatis面試題二》
是否是很棒!!!分享一下吧,小夥伴們!!!
本文分享自微信公衆號 - Java研發軍團(ityuancheng)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。