SSM面試

Mybatis

  • 簡介
  1. mybatis支持普通sql查詢,存儲過程和高級映射的優(yōu)秀持久層框架惩猫,Mybatis消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢查,Mybatis使用簡單的xml或注解用于配置和原始映射震鹉,將接口和Java的POJO(plan old Java Object)普通的Java對象映射成數(shù)據(jù)庫的記錄
  2. 每個(gè)mybatis應(yīng)用程序主要都是使用SqlSessionFaction實(shí)例的易桃,一個(gè)sqlSessionFaction實(shí)例可以通過sqlSessionFactionBuilder獲得,SqlSessionFactionBuilder可以從一個(gè)xml配置文件或者一個(gè)預(yù)定義的配置類的實(shí)例獲得
  3. mybatis有一個(gè)實(shí)用類(Resources)它由很多方法,可以很方便地從類路徑及其他位置加載資源
  • 流程
    • 加載配置并初始化
      • 觸發(fā)條件:加載配置文件
      • 將sql的配置信息加載成為一個(gè)個(gè)mappedStatment對象炭臭,包括了傳入?yún)?shù)映射
      • 配置執(zhí)行的sql語句永脓,結(jié)果集映射配置,存儲在內(nèi)存中
    • 接受調(diào)用請求
      • 觸發(fā)條件:調(diào)用mybatis提供的API
      • 傳入?yún)?shù):為sql的id和傳入?yún)?shù)對象
      • 處理過程:將請求傳遞給下層的請求處理層進(jìn)行處理
    • 處理操作請求
      • 觸發(fā)條件:API接口層傳遞請求過來
      • 傳入?yún)?shù):為sql的id和傳入?yún)?shù)對象
      • 處理過程:
  1. 根據(jù)sql的id查找對應(yīng)的MappedStatment對象
  2. 根據(jù)傳入?yún)?shù)對象解析MappedStatment對象鞋仍,得到最終要執(zhí)行的sql和執(zhí)行傳入的參數(shù)
  3. 獲取數(shù)據(jù)連接常摧,根據(jù)得到最終的sql語句和執(zhí)行傳入?yún)?shù)到數(shù)據(jù)庫執(zhí)行,并得到執(zhí)行結(jié)果
  4. 根據(jù)MappedStatment對象中的結(jié)果映射配置對得到的執(zhí)行結(jié)果進(jìn)行轉(zhuǎn)換處理威创,并得到最終的處理結(jié)果
  5. 釋放連接資源
  6. 返回處理結(jié)果將最終的處理結(jié)果返回
  • 功能架構(gòu)(三層)
  1. API接口層:

提供給外部使用的接口API落午,開發(fā)人員通過本地API操作數(shù)據(jù)庫,接口層接到調(diào)用請求肚豺,就會調(diào)用數(shù)據(jù)處理來完成具體的數(shù)據(jù)處理

  1. 數(shù)據(jù)處理層:

負(fù)責(zé)具體的sql查找溃斋、解析、執(zhí)行和執(zhí)行結(jié)果映射處理等详炬,主要的目的是根據(jù)調(diào)用的請求完成一次數(shù)據(jù)庫的操作

  1. 基礎(chǔ)支持層

負(fù)責(zé)最基礎(chǔ)的功能支撐盐类,包括連接管理、事務(wù)管理呛谜、配置加載和緩存處理在跳,這些都是共用的東西,將他們抽取出來做最基礎(chǔ)的組件隐岛,為上層的數(shù)據(jù)處理層提供最基礎(chǔ)的支撐

  • 框架結(jié)構(gòu)
  1. 加載配置

配置來源于兩個(gè)地方:
1).配置文件中
2).Java代碼的注解猫妙,將sql的配置信息加載為一個(gè)MappedStatment對象(包括傳入?yún)?shù)映射配置,執(zhí)行sql語句聚凹,結(jié)果映射配置)存儲在內(nèi)存中

  1. sql解析

當(dāng)API接口層接收到調(diào)用請求時(shí)割坠,會接收到傳入sql的id和傳入對象(可以是map、JavaBean或基本類型)妒牙,mybatis會根據(jù)sql的id找到對應(yīng)的MappedStatment彼哼,然后傳入?yún)?shù)對象的MappedStatment進(jìn)行解析,解析后可以得到最終的要執(zhí)行的sql語句和參數(shù)

  1. sql執(zhí)行

將最終得到的sql和參數(shù)拿到數(shù)據(jù)庫進(jìn)行執(zhí)行湘今,得到操作數(shù)據(jù)庫的結(jié)果

  1. 結(jié)果映射

將操作數(shù)據(jù)庫的結(jié)果按照映射的配置進(jìn)行轉(zhuǎn)換敢朱,可以轉(zhuǎn)換成HashMap、JavaBean或者基本類型摩瞎,并將最終結(jié)果返回

mybatis中#{}與${}的區(qū)別

  • ${}

properties文件中的占位符拴签,可用于標(biāo)簽屬性值和sql內(nèi)部,屬于靜態(tài)文本替換旗们,比如${driver}會被靜態(tài)替換為com.mysql.jdbc.Driver

  • #{}

sql的參數(shù)占位符蚓哩,Mybatis會將sql中的#{}替換為上渴,在sql執(zhí)行前會使用preparedStatement的參數(shù)設(shè)置方法岸梨,按序給sql喜颁?占位符設(shè)置參數(shù)值,比如ps.setInt(0,ParameterValue),#{item.name}的取值方式為使用反射從參數(shù)對象中獲取item對象的name屬性值盛嘿,相當(dāng)于param.getItem().getName()洛巢。

XML映射文件中,除了常見的select次兆、insert稿茉、updatedelete標(biāo)簽之外芥炭,還有哪些標(biāo)簽

<resultMap>返回值類型漓库、<sql><include>园蝠、<selectKey>加上動(dòng)態(tài)sql的9個(gè)標(biāo)簽(trim渺蒿、whereset彪薛、foreach茂装、ifchoose善延、when少态、otherwisebind)其中<sql>sql片段標(biāo)簽易遣,通過<include>標(biāo)簽引入sql片段彼妻,<selectKey>為不支持自增的主鍵生產(chǎn)策略標(biāo)簽

一個(gè)XML文件都會寫一個(gè)Dao接口與之對應(yīng),工作原理

Dao接口豆茫,常說的mapper接口侨歉,接口的權(quán)限名就是映射文件中的namespace的值,接口的方法名揩魂,就是映射文件MappedStatmentid值幽邓,接口方法的參數(shù)就是傳遞給slq的參數(shù),mapper接口是沒有實(shí)現(xiàn)類的火脉,當(dāng)調(diào)用接口方法時(shí)颊艳,接口權(quán)限名+方法名拼接字符串作為key值,可唯一定位一個(gè)mappedStatment
Dao接口里的方法是不能重載的忘分,因?yàn)槭菣?quán)限名+方法名的保存和尋找策略

Mybatis是如何分頁的

mybatis是使用RowBounds對象進(jìn)行分頁的,針對ResultSet結(jié)果集進(jìn)行的內(nèi)存分頁而非物理分頁白修,可以在sql內(nèi)直接書寫帶有物理分頁的參數(shù)來完成物理分頁的功能

springMVC

  • 是一個(gè)mvc框架妒峦,在web模型中,mvc是一種很流行的框架兵睛,通過把model肯骇、view窥浪、controller分離,把較為復(fù)雜的web應(yīng)用分成邏輯清晰的幾部分,是為了簡化開發(fā)笛丙,減少出錯(cuò)漾脂,或是為了組內(nèi)開發(fā)人員之間的配,總之就是一種分層工作的辦法
  • 是spring的一個(gè)子框架胚鸯,當(dāng)然擁有spring的特性骨稿,如依賴注入,注解:RequestMapping姜钳,專門負(fù)責(zé)映射的url

spring是什么

spring是開源的輕量級的開發(fā)應(yīng)用框架坦冠,目的是用于簡化企業(yè)級應(yīng)用程序開發(fā)

  • 原理

通過配置方式來創(chuàng)建對象,管理對象之間依賴關(guān)系哥桥,我們不需要通過工廠和生成器來創(chuàng)建及管理對象之間的依賴關(guān)系辙浑,這樣我們是不是減少了許多工作,加速了開發(fā)

spring框架除了幫助我們管理對象及其依賴關(guān)系拟糕,還提供了日志記錄判呕、性能統(tǒng)計(jì)、安全控制送滞、異常處理等面向切面的能力侠草,還能幫我們管理最頭疼的數(shù)據(jù)庫事務(wù),本身提供了一套簡單的JDBC訪問實(shí)現(xiàn)累澡,提供與第三方數(shù)據(jù)訪問框架集成(如Hibernate梦抢、JPA)與各種javaEE技術(shù)整合,提供一套自己的web層框架springMVC愧哟,而且還能非常簡單的與第三方web框架集成

  • 作用

能幫助我們根據(jù)配置文件創(chuàng)建及組裝對象之間的依賴關(guān)系(無需重新編譯奥吩,只需要修改配置文件)
spring提供了與第三方數(shù)據(jù)訪問框架無縫集成,而且自己提供了一套JDBC/springMVC框架蕊梧,方便數(shù)據(jù)庫/web層搭建(第三方web【如struts霞赫、JSF】)

為什么需要spring

  1. 應(yīng)用程序

是能完成我們所需的功能的成品,比如:購物網(wǎng)站肥矢、OA系統(tǒng)

  1. 框架

是能夠完成功能的半產(chǎn)品端衰,框架規(guī)定了開發(fā)過程中的整體架構(gòu),提供了基礎(chǔ)功能

  1. 非侵入式設(shè)計(jì)

從框架角度可以理解為甘改,無需繼承框架提供的類

  1. POJO(plan old java Object)簡單的Java對象

它可以包含業(yè)務(wù)邏輯或持久化邏輯旅东,但不擔(dān)當(dāng)任何特殊角色且不繼承或不實(shí)現(xiàn)任何其他java框架的類或接口

  1. 輕量級及重量級

輕量級是相對于重量級而言的,輕量級一般是非入侵性的十艾,所依賴的東西非常少抵代,資源占用非常少,部署簡單忘嫉,極易使用荤牍,重量級相反

  1. 容器

裝對象的對象案腺,因?yàn)榇嬖诜湃搿⒛贸龅炔僮骺党常匀萜鬟€要管理對象的生命周期

  1. 控制反轉(zhuǎn)

即Inversion of Control(IOC)/ 依賴注入(Dependency Injection)劈榨,即由容器控制程序之間的關(guān)系,而非由程序直接操控

  1. Bean

一般指容器管理對象晦嵌,在spring中指springIOC容器管理對象

為什么使用spring

能幫助我們簡化應(yīng)用程序開發(fā)同辣,幫助我們創(chuàng)建和組裝對象,為我們管理事務(wù)耍铜,簡單的mvc框架邑闺,可以把spring看作是一個(gè)超級粘合平臺,能夠把很多技術(shù)整合在一起棕兼,形成一個(gè)整體陡舅,使系統(tǒng)結(jié)構(gòu)更出眾,更優(yōu)秀伴挚,從而加速我們程序開發(fā)

Spring的BeanFactory和ApplicationContext的區(qū)別

spring使用BeanFactory來實(shí)例化配置和管理對象靶衍,但是它只是一個(gè)接口,里面有一個(gè)getBean()方法茎芋,我們一般都不直接用BeanFactory颅眶,而是用它的實(shí)現(xiàn)類ApplicationContext,這個(gè)類會自動(dòng)解析我們配置的applicationContext.xml田弥,然后根據(jù)我們配置的beannew對象涛酗,將new好的對象放進(jìn)一個(gè)Map中,鍵就是我們beanid偷厦,值就是new的對象
BeanFactoryspring中比較原始的Factory商叹,如XMLBeanFactory就是一種典型的BeanFactory,原始的BeanFactory無法支持spring的許多插件只泼,例如:AOP剖笙、web應(yīng)用等
ApplicationContext接口,它由BeanFactory接口派生而來请唱,因而提供BeanFactory所有的功能

容器是spring的核心

  • BeanFactory

spring中比較原始的Factory弥咪,如XMLBeanFactory就是一種典型的BeanFactory,原始的BeanFactory無法支持spring的許多插件十绑,例如:AOP聚至、web應(yīng)用等

  • ApplicationContext

三個(gè)實(shí)現(xiàn)類

  1. classPathXMLApplication:把上下文文件當(dāng)成類路徑資源
  2. FileSystemXMLApplication:從文件系統(tǒng)中的XML文件載入上下文定義信息
  3. XMLWebApplicationContext:從web系統(tǒng)中的XML文件載入上下文定義信息
  • 作用

BeanFactory負(fù)責(zé)讀取Bean配置文檔,管理Bean的加載本橙,實(shí)例化晚岭,維護(hù)Bean之間的依賴關(guān)系,負(fù)責(zé)Bean的生命周期
ApplicationContext除了提供上述BeanFactory所能提供的功能之外,還提供了更完整的框架功能
a. 國際化支持
b. 資源訪問
c. 時(shí)間傳遞(通過實(shí)現(xiàn)ApplicationContextAware接口)

常用的獲取ApplicationContext的方法

  • FileSystemXMLApplicationConrext

從文件系統(tǒng)或者url指定的xml配置文件創(chuàng)建參數(shù)為配置文件名或文件名數(shù)組坦报。

  • classPathXMLApplicationContext

從classPath的xml配置文件創(chuàng)建,可以從jar包中讀取配置文件

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狂鞋,一起剝皮案震驚了整個(gè)濱河市片择,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌骚揍,老刑警劉巖字管,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異信不,居然都是意外死亡嘲叔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進(jìn)店門抽活,熙熙樓的掌柜王于貴愁眉苦臉地迎上來硫戈,“玉大人,你說我怎么就攤上這事下硕《∈牛” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵梭姓,是天一觀的道長霜幼。 經(jīng)常有香客問我,道長誉尖,這世上最難降的妖魔是什么罪既? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮铡恕,結(jié)果婚禮上琢感,老公的妹妹穿的比我還像新娘。我一直安慰自己没咙,他們只是感情好猩谊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著祭刚,像睡著了一般牌捷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涡驮,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天暗甥,我揣著相機(jī)與錄音,去河邊找鬼捉捅。 笑死撤防,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的棒口。 我是一名探鬼主播寄月,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼客冈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了姑尺?” 一聲冷哼從身側(cè)響起灸眼,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎克懊,沒想到半個(gè)月后忱辅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谭溉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年墙懂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扮念。...
    茶點(diǎn)故事閱讀 40,015評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡损搬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扔亥,到底是詐尸還是另有隱情场躯,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布旅挤,位于F島的核電站踢关,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏粘茄。R本人自食惡果不足惜签舞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望柒瓣。 院中可真熱鬧儒搭,春花似錦、人聲如沸芙贫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽磺平。三九已至魂仍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拣挪,已是汗流浹背擦酌。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留菠劝,地道東北人赊舶。 一個(gè)月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親笼平。 傳聞我的和親對象是個(gè)殘疾皇子园骆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)寓调,斷路器遇伞,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL捶牢、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,523評論 0 4
  • 2008年,我開始使用酷狗音樂 2011年亲族,我最后1次用QQ音樂 2012年炒考,我選擇卸載蝦米音樂 2013年,我偶...
    牛奶渭閱讀 638評論 0 0
  • 孫天一 陰云掩新月霎迫, 落花伴水流斋枢。 殘柳飄冬雪, 碎玉罹清袖知给。 亂石隨風(fēng)舞瓤帚, 哀蟬鳴悠愁。 聲聲催腸斷涩赢, 腸斷人依...
    孫然義閱讀 230評論 0 1
  • 今天早上 媽媽說燕子已經(jīng)飛回來了戈次,以前總是過完清明燕子才來的。今年格外早 從早上到上午筒扒,它一直站在那里怯邪,孤身一鳥 ...
    轉(zhuǎn)轉(zhuǎn)zhuan閱讀 889評論 0 0