輕量級(jí)框架技術(shù)復(fù)習(xí)

第一章
【思考題】
1餐抢、 請(qǐng)簡(jiǎn)述Spring框架的優(yōu)點(diǎn)霍转。
2荐绝、 請(qǐng)簡(jiǎn)述什么是Spring的IoC和DI。避消。
【答案】
1低滩、Spring框架的優(yōu)點(diǎn)如下:
(1)非侵入式設(shè)計(jì):Spring是一種非侵入式(non-invasive)框架,它可以使應(yīng)用程序代碼對(duì)框架的依賴(lài)最小化岩喷。
(2)方便解耦恕沫、簡(jiǎn)化開(kāi)發(fā):Spring就是一個(gè)大工廠,可以將所有對(duì)象的創(chuàng)建和依賴(lài)關(guān)系的維護(hù)工作都交給Spring容器管理纱意,大大的降低了組件之間的耦合性婶溯。
(3)支持AOP:Spring提供了對(duì)AOP的支持,它允許將一些通用任務(wù)偷霉,如安全迄委、事務(wù)、日志等進(jìn)行集中式處理类少,從而提高了程序的復(fù)用性叙身。
(4)支持聲明式事務(wù)處理:只需要通過(guò)配置就可以完成對(duì)事務(wù)的管理,而無(wú)需手動(dòng)編程瞒滴。
(5)方便程序的測(cè)試:Spring提供了對(duì)Junit4的支持曲梗,可以通過(guò)注解方便的測(cè)試Spring程序。
(6)方便集成各種優(yōu)秀框架:Spring不排斥各種優(yōu)秀的開(kāi)源框架妓忍,其內(nèi)部提供了對(duì)各種優(yōu)秀框架(如:Struts虏两、Hibernate、MyBatis世剖、Quartz等)的直接支持定罢。
(7)降低了Java EE API的使用難度:Spring對(duì)Java EE開(kāi)發(fā)中非常難用的一些API(如:JDBC、JavaMail等)旁瘫,都提供了封裝祖凫,使這些API應(yīng)用難度大大降低。酬凳。

2惠况、IoC的全稱(chēng)是Inversion of Control,中文名稱(chēng)為控制反轉(zhuǎn)宁仔〕硗溃控制反轉(zhuǎn)就是指在使用Spring框架之后,對(duì)象的實(shí)例不再由調(diào)用者來(lái)創(chuàng)建,而是由Spring容器來(lái)創(chuàng)建权埠,Spring容器會(huì)負(fù)責(zé)控制程序之間的關(guān)系榨了,而不是由調(diào)用者的程序代碼直接控制。這樣攘蔽,控制權(quán)由應(yīng)用代碼轉(zhuǎn)移到了Spring容器龙屉,控制權(quán)發(fā)生了反轉(zhuǎn)。
DI的全稱(chēng)是Dependency Injection满俗,中文稱(chēng)之為依賴(lài)注入转捕。它與控制反轉(zhuǎn)(IoC)的含義相同,只不過(guò)這兩個(gè)稱(chēng)呼是從兩個(gè)角度描述的同一個(gè)概念漫雷。從Spring容器的角度來(lái)看瓜富,Spring容器負(fù)責(zé)將被依賴(lài)對(duì)象賦值給調(diào)用者的成員變量,這相當(dāng)于為調(diào)用者注入了它依賴(lài)的實(shí)例降盹,這就是Spring的依賴(lài)注入与柑。

第二章
【思考題】
1、請(qǐng)簡(jiǎn)述Bean的生命周期蓄坏。
2价捧、請(qǐng)簡(jiǎn)述Bean的幾種裝配方式的基本用法
【答案】
1、Bean的生命周期的整個(gè)執(zhí)行過(guò)程描述如下涡戳。
(1)根據(jù)配置情況調(diào)用Bean構(gòu)造方法或工廠方法實(shí)例化Bean结蟋。
(2)利用依賴(lài)注入來(lái)完成Bean中所有屬性值的配置注入。
(3)如果Bean實(shí)現(xiàn)了BeanNameAware接口渔彰,則Spring調(diào)用Bean的setBeanName()方法傳入當(dāng)前Bean的id值鸟顺。
(4)如果Bean實(shí)現(xiàn)了BeanFactoryAware接口纠屋,則Spring調(diào)用setBeanFactory()方法傳入當(dāng)前工廠實(shí)例的引用。
(5)如果Bean實(shí)現(xiàn)了ApplicationContextAware接口,則Spring調(diào)用setApplicationContext()方法傳入當(dāng)前ApplicationContext實(shí)例的引用憎妙。
(6)如果BeanPostProcessor和Bean關(guān)聯(lián)吮螺,則Spring將調(diào)用該接口的預(yù)初始化方法postProcessBeforeInitialzation()對(duì)Bean進(jìn)行加工操作洗鸵,這個(gè)非常重要斩跌,Spring的AOP就是用它實(shí)現(xiàn)的。
(7)如果Bean實(shí)現(xiàn)了InitializingBean接口炒瘸,則Spring將調(diào)用afterPropertiesSet()方法淤堵。
(8)如果在配置文件中通過(guò)init-method屬性指定了初始化方法,則調(diào)用該初始化方法顷扩。
(9)如果有BeanPsostProcessor和Bean關(guān)聯(lián)拐邪,則Spring將調(diào)用該接口的初始化方法postProcessAfterInitialization()。此時(shí)隘截,Bean已經(jīng)可以被應(yīng)用系統(tǒng)使用了扎阶。
(10)如果在 中指定了該Bean的作用范圍為 scope=“singleton”事富,則將該Bean 放入Spring IoC的緩存池中,將觸發(fā)Spring對(duì)該Bean的生命周期管理乘陪;如果在中指定了該Bean的作用范圍為scope=“prototype”,則將該Bean交給調(diào)用者雕擂,調(diào)用者管理該Bean的生命周期啡邑,Spring不再管理該Bean。
(11)如果Bean實(shí)現(xiàn)了DisposableBean接口井赌,則Spring會(huì)調(diào)用destory()方法將Spring中的Bean銷(xiāo)毀谤逼;如果在配置文件中通過(guò)destory-method屬性指定了Bean的銷(xiāo)毀方法,則Spring將調(diào)用該方法進(jìn)行銷(xiāo)毀仇穗。

2流部、Bean中主要包含三種裝配方式,分別為基于XML的裝配纹坐,基于Annotation的裝配和自動(dòng)裝配枝冀,這三種裝配方式的用法如下:
(1)基于XML的裝配:Spring提供了2種基于XML的裝配方式:設(shè)值注入(Setter Injection)和構(gòu)造注入(Constructor Injection)。設(shè)置注入中的Bean類(lèi)必須提供一個(gè)默認(rèn)的無(wú)參構(gòu)造方法耘子,同時(shí)必須為需要注入的屬性提供對(duì)應(yīng)的setter方法果漾。使用設(shè)值注入時(shí),在Spring配置文件中谷誓,需要使用元素的子元素來(lái)為每個(gè)屬性注入值绒障。使用構(gòu)造注入時(shí),在配置文件里捍歪,需要使用元素的子元素來(lái)定義構(gòu)造方法的參數(shù)户辱,可以使用其value屬性(或子元素)來(lái)設(shè)置該參數(shù)的值。
(2)基于Annotation的裝配:使用基于Annotation的裝配時(shí)糙臼,首先需要使用@Repository庐镐、@Service與@Constroller分別對(duì)實(shí)現(xiàn)類(lèi)進(jìn)行標(biāo)注,然后用@Autowired或@Resource注解對(duì)注入的Bean的屬性進(jìn)行標(biāo)注弓摘,最后在Spring的配置文件中焚鹊,通過(guò)<context:annotation-config />來(lái)開(kāi)啟注解處理器,或使用<context:component-scan base-package=“Bean所在的包路徑”/>的配置方式即可實(shí)現(xiàn)Annotation的裝配韧献。
(3)自動(dòng)裝配:在元素中使用autowire屬性末患,并將其屬性值設(shè)置為byName或者byType即可實(shí)現(xiàn)自動(dòng)裝配。

第三章
【思考題】
1锤窑、請(qǐng)列舉你所知道的AOP專(zhuān)業(yè)術(shù)語(yǔ)并解釋璧针。
2、請(qǐng)列舉你所知道的Spring的通知類(lèi)型并解釋渊啰。
【答案】
1探橱、AOP的專(zhuān)業(yè)術(shù)語(yǔ)包括Aspect申屹、Joinpoint、Pointcut隧膏、Advice哗讥、Target Object、Proxy和Weaving胞枕,對(duì)于這些專(zhuān)業(yè)術(shù)語(yǔ)的解釋?zhuān)唧w如下:
(1)Aspect(切面):在實(shí)際應(yīng)用中杆煞,切面通常是指封裝的用于橫向插入系統(tǒng)功能(如事務(wù)、日志等)的類(lèi)腐泻,如圖3-1中的Aspect决乎。該類(lèi)要被Spring容器識(shí)別為切面,需要在配置文件中通過(guò)元素指定派桩。
(2)Joinpoint(連接點(diǎn)):在程序執(zhí)行過(guò)程中的某個(gè)階段點(diǎn)构诚,它實(shí)際上是對(duì)象的一個(gè)操作,例如方法的調(diào)用或異常的拋出铆惑。在Spring AOP中范嘱,連接點(diǎn)就是指方法的調(diào)用。
(3)Pointcut(切入點(diǎn)):是指切面與程序流程的交叉點(diǎn)员魏,即那些需要處理的連接點(diǎn)彤侍,如圖3-2所示。通常在程序中逆趋,切入點(diǎn)指的是類(lèi)或者方法名盏阶,如某個(gè)通知要應(yīng)用到所有以add開(kāi)頭的方法中,那么所有滿(mǎn)足這一規(guī)則的方法都是切入點(diǎn)闻书。
(4)Advice(通知/增強(qiáng)處理):AOP框架在特定的切入點(diǎn)執(zhí)行的增強(qiáng)處理名斟,即在定義好的切入點(diǎn)處所要執(zhí)行的程序代碼∑敲迹可以將其理解為切面類(lèi)中的方法砰盐,它是切面的具體實(shí)現(xiàn)。
(5)Target Object(目標(biāo)對(duì)象):是指所有被通知的對(duì)象坑律,也被稱(chēng)為被增強(qiáng)對(duì)象岩梳。如果AOP框架采用的是動(dòng)態(tài)的AOP實(shí)現(xiàn),那么該對(duì)象就是一個(gè)被代理對(duì)象晃择。
(6)Proxy(代理):將通知應(yīng)用到目標(biāo)對(duì)象之后冀值,被動(dòng)態(tài)創(chuàng)建的對(duì)象。
(7)Weaving(織入):將切面代碼插入到目標(biāo)對(duì)象上宫屠,從而生成代理對(duì)象的過(guò)程列疗。

2、Spring中的通知按照在目標(biāo)類(lèi)方法的連接點(diǎn)位置浪蹂,可以分為以下5種類(lèi)型:
(1)org.aopalliance.intercept.MethodInterceptor(環(huán)繞通知)
在目標(biāo)方法執(zhí)行前后實(shí)施增強(qiáng)抵栈,可以應(yīng)用于日志告材、事務(wù)管理等功能。
(2)org.springframework.aop.MethodBeforeAdvice(前置通知)
在目標(biāo)方法執(zhí)行前實(shí)施增強(qiáng)古劲,可以應(yīng)用于權(quán)限管理等功能斥赋。
(3)org.springframework.aop.AfterReturningAdvice(后置通知)
在目標(biāo)方法執(zhí)行后實(shí)施增強(qiáng),可以應(yīng)用于關(guān)閉流产艾、上傳文件灿渴、刪除臨時(shí)文件等功能。
(4)org.springframework.aop.ThrowsAdvice(異常通知)
在方法拋出異常后實(shí)施增強(qiáng)胰舆,可以應(yīng)用于處理異常記錄日志等功能。
(5)org.springframework.aop.IntroductionInterceptor(引介通知)
在目標(biāo)類(lèi)中添加一些新的方法和屬性蹬挤,可以應(yīng)用于修改老版本程序(增強(qiáng)類(lèi))

第四章
【思考題】
1缚窿、請(qǐng)簡(jiǎn)述Spring JDBC是如何進(jìn)行配置的。
2焰扳、請(qǐng)簡(jiǎn)述Spring JdbcTemplate類(lèi)中幾個(gè)常用方法的作用倦零。
【答案】
1、在Spring的配置文件中配置JDBC時(shí)吨悍,需要定義了三個(gè)Bean扫茅,分別是dataSource、jdbcTemplate和需要注入類(lèi)的Bean育瓜。在定義jdbcTemplate時(shí)葫隙,需要將dataSource注入到j(luò)dbcTemplate中,而其他需要使用jdbcTemplate的Bean躏仇,也需要將jdbcTemplate注入到該Bean中恋脚,這樣配置完成后,Spring JDBC就可以使用了焰手。

2糟描、在JdbcTemplate類(lèi)中,提供了大量的更新和查詢(xún)數(shù)據(jù)庫(kù)的方法书妻,我們就是使用的這些方法來(lái)操作數(shù)據(jù)庫(kù)的船响,其常用的方法包括execute()、update()和query()躲履。其中execute()方法能夠完成執(zhí)行SQL語(yǔ)句的功能见间,update()方法可以完成插入、更新和刪除數(shù)據(jù)的操作工猜,query()方法可以用來(lái)處理各種對(duì)數(shù)據(jù)庫(kù)表的查詢(xún)操作缤剧。

第五章
【思考題】
1、請(qǐng)簡(jiǎn)述Spring中事務(wù)管理的兩種方式域慷。
2荒辕、請(qǐng)簡(jiǎn)述如何使用Annotation方式進(jìn)行聲明式事務(wù)管理汗销。
【答案】
1、Spring中的事務(wù)管理分為兩種方式:一種是傳統(tǒng)的編程式事務(wù)管理抵窒,另一種是聲明式事務(wù)管理弛针。其中,編程式事務(wù)管理是通過(guò)編寫(xiě)代碼實(shí)現(xiàn)的事務(wù)管理李皇,包括定義事務(wù)的開(kāi)始削茁、正常執(zhí)行后的事務(wù)提交和異常時(shí)的事務(wù)回滾。聲明式事務(wù)管理是通過(guò)AOP技術(shù)實(shí)現(xiàn)的事務(wù)管理掉房,其主要思想是將事務(wù)管理作為一個(gè)“切面”代碼單獨(dú)編寫(xiě)茧跋,然后通過(guò)AOP技術(shù)將事務(wù)管理的“切面”代碼植入到業(yè)務(wù)目標(biāo)類(lèi)中。
聲明式事務(wù)管理最大的優(yōu)點(diǎn)在于開(kāi)發(fā)者無(wú)需通過(guò)編程的方式來(lái)管理事務(wù)卓囚,只需在配置文件中進(jìn)行相關(guān)的事務(wù)規(guī)則聲明瘾杭,就可以將事務(wù)規(guī)則應(yīng)用到業(yè)務(wù)邏輯中。這使得開(kāi)發(fā)人員可以更加專(zhuān)注于核心業(yè)務(wù)邏輯代碼的編寫(xiě)哪亿,在一定程度上減少了工作量粥烁,提高了開(kāi)發(fā)效率。

2蝇棉、Spring的聲明式事務(wù)管理通過(guò)Annotation(注解)方式來(lái)實(shí)現(xiàn)時(shí)讨阻,開(kāi)發(fā)者只需做兩件事情:
1)在Spring容器中注冊(cè)事務(wù)注解驅(qū)動(dòng),其代碼如下:
<tx:annotation-driven transaction-manager=“transactionManager”/>
2)在需要使用事務(wù)的Spring Bean類(lèi)或者Bean類(lèi)的方法上添加注解@Transactional篡殷。如果將注解添加在Bean類(lèi)上钝吮,則表示事務(wù)的設(shè)置對(duì)整個(gè)Bean類(lèi)的所有方法都起作用;如果將注解添加在Bean類(lèi)中的某個(gè)方法上板辽,則表示事務(wù)的設(shè)置只對(duì)該方法有效搀绣。

第六章
【思考題】
1、請(qǐng)簡(jiǎn)述MyBatis框架與Hibernate框架的區(qū)別戳气。
2链患、請(qǐng)簡(jiǎn)述MyBatis的工作執(zhí)行流程。
【答案】
1瓶您、Hibernate和MyBatis麻捻。這兩個(gè)框架的主要區(qū)別如下:
(1)Hibernate:是一個(gè)全表映射的框架。通常開(kāi)發(fā)者只需定義好持久化對(duì)象到數(shù)據(jù)庫(kù)表的映射關(guān)系呀袱,就可以通過(guò)Hibernate提供的方法完成持久層操作贸毕。開(kāi)發(fā)者并不需要熟練的掌握SQL語(yǔ)句的編寫(xiě),Hibernate會(huì)根據(jù)制定的存儲(chǔ)邏輯夜赵,自動(dòng)的生成對(duì)應(yīng)的SQL明棍,并調(diào)用JDBC接口來(lái)執(zhí)行,所以其開(kāi)發(fā)效率會(huì)高于MyBatis寇僧。然而Hibernate自身也存在著一些缺點(diǎn)摊腋,例如它在多表關(guān)聯(lián)時(shí)沸版,對(duì)SQL查詢(xún)的支持較差;更新數(shù)據(jù)時(shí)兴蒸,需要發(fā)送所有字段视粮;不支持存儲(chǔ)過(guò)程;不能通過(guò)優(yōu)化SQL來(lái)優(yōu)化性能等橙凳。這些問(wèn)題導(dǎo)致其只適合在場(chǎng)景不太復(fù)雜且對(duì)性能要求不高的項(xiàng)目中使用蕾殴。
(2)MyBatis:是一個(gè)半自動(dòng)映射的框架。這里所謂的“半自動(dòng)”是相對(duì)于Hibernate全表映射而言的岛啸,MyBatis需要手動(dòng)匹配提供POJO钓觉、SQL和映射關(guān)系,而Hibernate只需提供POJO和映射關(guān)系即可坚踩。與Hibernate相比荡灾,雖然使用MyBatis手動(dòng)編寫(xiě)SQL要比使用Hibernate的工作量大,但MyBatis可以配置動(dòng)態(tài)SQL并優(yōu)化SQL堕虹,可以通過(guò)配置決定SQL的映射規(guī)則,它還支持存儲(chǔ)過(guò)程等芬首。對(duì)于一些復(fù)雜的和需要優(yōu)化性能的項(xiàng)目來(lái)說(shuō)赴捞,顯然使用MyBatis更加合適。

2郁稍、MyBatis框架的工作執(zhí)行流程如下:
(1)讀取MyBatis配置文件mybatis-config.xml赦政。
(2)加載映射文件Mapper.xml。
(3)構(gòu)建會(huì)話(huà)工廠耀怜。
(4)創(chuàng)建SqlSession對(duì)象恢着。
(5)使用Executor接口來(lái)操作數(shù)據(jù)庫(kù)。
(6)使用MappedStatement類(lèi)型的參數(shù)對(duì)映射信息進(jìn)行封裝财破。
(7)輸入?yún)?shù)映射掰派。
(8)輸出結(jié)果映射。

第七章
【思考題】
1左痢、請(qǐng)簡(jiǎn)述MyBatis核心對(duì)象SqlSessionFactory的獲取方式靡羡。
2、請(qǐng)簡(jiǎn)述MyBatis映射文件中的主要元素及其作用俊性。
【答案】
1略步、SqlSessionFactory對(duì)象的實(shí)例可以通過(guò)SqlSessionFactoryBuilder對(duì)象來(lái)構(gòu)建,而SqlSessionFactoryBuilder則可以通過(guò)XML配置文件或一個(gè)預(yù)先定義好的Configuration實(shí)例構(gòu)建出SqlSessionFactory的實(shí)例定页,通過(guò)XML配置文件構(gòu)建出的SqlSessionFactory實(shí)例趟薄,其實(shí)現(xiàn)代碼如下:
// 讀取配置文件
InputStream inputStream = Resources.getResourceAsStream(“配置文件位置”);
// 根據(jù)配置文件構(gòu)建SqlSessionFactory
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
2、在映射文件中典徊,元素是映射文件的根元素杭煎,其他元素都是它的子元素恩够。這些子元素及其作用如下所示:
:用于映射查詢(xún)語(yǔ)句,可自定義參數(shù)岔帽,返回結(jié)果集等玫鸟。
:用于映射插入語(yǔ)句,執(zhí)行后返回一個(gè)整數(shù)犀勒,代表插入的條數(shù)屎飘。
:用于映射更新語(yǔ)句,執(zhí)行后返回一個(gè)整數(shù)贾费,代表更新的條數(shù)钦购。
:用于映射刪除語(yǔ)句,執(zhí)行后返回一個(gè)整數(shù)褂萧,代表刪除的條數(shù)押桃。
:用于定義一部分SQL,然后可被其他語(yǔ)句引用此SQL导犹。
:用于給定命名空間的緩存配置唱凯。
:用于其他命名空間緩存配置的引用。
:用于描述如何從數(shù)據(jù)庫(kù)結(jié)果集中來(lái)加載對(duì)象谎痢。

第八章
【思考題】
1磕昼、請(qǐng)簡(jiǎn)述MyBatis框架動(dòng)態(tài)SQL中的主要元素及其作用。
2节猿、請(qǐng)簡(jiǎn)述MyBatis框架動(dòng)態(tài)SQL中元素collection屬性的注意事項(xiàng)票从。
【答案】
1、MyBatis動(dòng)態(tài)SQL中的主要元素及其作用如下:
(1)元素:用于判斷語(yǔ)句滨嘱,用于單條件分支判斷峰鄙。
(2)(、)元素:相當(dāng)于Java中的switch…case…default語(yǔ)句太雨,用于多條件分支判斷吟榴。
(3)、囊扳、元素:輔助元素煤墙,用于處理一些SQL拼裝、特殊字符問(wèn)題宪拥。
(4)元素:循環(huán)語(yǔ)句仿野,常用于in語(yǔ)句等列舉條件中。
(5)元素: 從OGNL表達(dá)式中創(chuàng)建一個(gè)變量她君,并將其綁定到上下文脚作,常用于模糊查詢(xún)的sql中。

2、在使用時(shí)球涛,collection屬性是必須指定的劣针,而且在不同情況下,該屬性的值是不一樣的亿扁。主要有以下3種情況:
(1)如果傳入的是單參數(shù)且參數(shù)類(lèi)型是一個(gè)數(shù)組或者List的時(shí)候捺典,collection屬性值分別為array和list(或collection);
(2)如果傳入的參數(shù)是多個(gè)的時(shí)候从祝,就需要把它們封裝成一個(gè)Map了襟己,當(dāng)然單參數(shù)也可以封裝成Map集合,這時(shí)候collection屬性值就為Map的鍵牍陌。
(3)如果傳入的參數(shù)是POJO包裝類(lèi)的時(shí)候擎浴,collection屬性值就為該包裝類(lèi)中需要進(jìn)行遍歷的數(shù)組或集合的屬性名。
所以在設(shè)置collection屬性值的時(shí)候毒涧,必須按照實(shí)際情況配置贮预,否則程序就會(huì)出現(xiàn)異常。契讲。

第九章
【思考題】
1仿吞、請(qǐng)簡(jiǎn)述不同對(duì)象之間的三種關(guān)聯(lián)關(guān)系。
2捡偏、請(qǐng)簡(jiǎn)述MyBatis關(guān)聯(lián)查詢(xún)映射的兩種處理方式唤冈。
【答案】
1、在java中霹琼,對(duì)象之間存在著三種關(guān)聯(lián)關(guān)系务傲,分別是一對(duì)一凉当,一對(duì)多和多對(duì)多枣申。在這三種關(guān)聯(lián)關(guān)系中,一對(duì)一的關(guān)系就是在本類(lèi)中定義對(duì)方類(lèi)型的對(duì)象看杭,如A類(lèi)中定義B類(lèi)類(lèi)型的屬性b忠藤,B類(lèi)中定義A類(lèi)類(lèi)型的屬性a;一對(duì)多的關(guān)系就是一個(gè)A類(lèi)類(lèi)型對(duì)應(yīng)多個(gè)B類(lèi)類(lèi)型的情況楼雹,需要在A類(lèi)中以集合的方式引入B類(lèi)類(lèi)型的對(duì)象模孩,在B類(lèi)中定義A類(lèi)類(lèi)型的屬性a;多對(duì)多的關(guān)系就是在A類(lèi)中定義B類(lèi)類(lèi)型的集合贮缅,在B類(lèi)中定義A類(lèi)類(lèi)型的集合榨咐。

2、MyBatis在映射文件中加載關(guān)聯(lián)關(guān)系對(duì)象主要通過(guò)兩種方式:嵌套查詢(xún)和嵌套結(jié)果谴供。嵌套查詢(xún)是指通過(guò)執(zhí)行另外一條SQL映射語(yǔ)句來(lái)返回預(yù)期的復(fù)雜類(lèi)型块茁;嵌套結(jié)果是使用嵌套結(jié)果映射來(lái)處理重復(fù)的聯(lián)合結(jié)果的子集。開(kāi)發(fā)人員可以使用上述任意一種方式實(shí)現(xiàn)對(duì)關(guān)聯(lián)關(guān)系的加載。

第十章
【思考題】
1数焊、 請(qǐng)簡(jiǎn)述MyBatis與Spring整合所需JAR包的種類(lèi)永淌。
2、 請(qǐng)簡(jiǎn)述MapperFactoryBean和MapperScannerConfigurer的作用佩耳。
【答案】
1遂蛀、MyBatis與Spring整合所需JAR包主要包括:Spring框架所需的JAR包、 MyBatis框架所需的JAR包干厚、MyBatis與Spring整合的中間JAR李滴、數(shù)據(jù)庫(kù)驅(qū)動(dòng)JAR包,以及數(shù)據(jù)源所需的JAR包萍诱。

2悬嗓、MapperFactoryBean是MyBatis-Spring團(tuán)隊(duì)提供的一個(gè)用于根據(jù)Mapper接口生成Mapper對(duì)象的類(lèi),通過(guò)MapperFactoryBean可以配置接口文件以及注入SqlSessionfactory裕坊,從而完成一個(gè)Bean的實(shí)例化包竹。MapperScannerConfigurer是MyBatis-Spring團(tuán)隊(duì)提供的一種用于以自動(dòng)掃描形式來(lái)配置MyBatis中映射器的類(lèi),可以通過(guò)配置包路徑來(lái)自動(dòng)掃描包接口生成映射器籍凝,這使得開(kāi)發(fā)人員可以在編寫(xiě)很少代碼的情況下周瞎,完成對(duì)映射器的配置,從而提高開(kāi)發(fā)效率饵蒂。

第十一章
【思考題】
1声诸、請(qǐng)簡(jiǎn)述Spring MVC框架的優(yōu)點(diǎn)。
2退盯、請(qǐng)簡(jiǎn)述Spring MVC框架的工作執(zhí)行流程彼乌。
【答案】
1、Spring MVC主要有如下優(yōu)點(diǎn):
(1)是Spring框架的一部分渊迁,可以方便的利用Spring所提供的其他功能慰照。
(2)靈活性強(qiáng),易于與其他框架集成琉朽。
(3)提供了一個(gè)前端控制器DispatcherServlet毒租,使開(kāi)發(fā)人員無(wú)需額外開(kāi)發(fā)控制器對(duì)象。
(4)可自動(dòng)綁定用戶(hù)輸入箱叁,并能正確的轉(zhuǎn)換數(shù)據(jù)類(lèi)型墅垮。
(5)內(nèi)置了常見(jiàn)的校驗(yàn)器,可以校驗(yàn)用戶(hù)輸入耕漱。如果校驗(yàn)不能通過(guò)算色,那么就會(huì)重定向到輸入表單。
(6)支持國(guó)際化螟够≡置危可以根據(jù)用戶(hù)區(qū)域顯示多國(guó)語(yǔ)言。
(7)支持多種視圖技術(shù)。它支持JSP斥废、Velocity和FreeMarker等視圖技術(shù)椒楣。
(8)使用基于XML的配置文件,在編輯后牡肉,不需要重新編譯應(yīng)用程序捧灰。

2、Spring MVC框架的工作流程如下:
(1)用戶(hù)通過(guò)瀏覽器向服務(wù)器發(fā)送請(qǐng)求统锤,請(qǐng)求會(huì)被Spring MVC的前端控制器DispatcherServlet所攔截毛俏。
(2)DispatcherServlet攔截到請(qǐng)求后,會(huì)調(diào)用HandlerMapping處理器映射器饲窿。
(3)處理器映射器根據(jù)請(qǐng)求URL找到具體的處理器煌寇,生成處理器對(duì)象及處理器攔截器(如果有則生成)一并返回給DispatcherServlet络断。
(4)DispatcherServlet會(huì)通過(guò)返回信息選擇合適的HandlerAdapter(處理器適配器)姿骏。
(5)HandlerAdapter會(huì)調(diào)用并執(zhí)行Handler(處理器),這里的處理器指的就是程序中編寫(xiě)的Controller類(lèi)玄括,也被稱(chēng)之為后端控制器鸦泳。
(6)Controller執(zhí)行完成后银锻,會(huì)返回一個(gè)ModelAndView對(duì)象,該對(duì)象中會(huì)包含視圖名或包含模型和視圖名做鹰。
(7)HandlerAdapter將ModelAndView對(duì)象返回給DispatcherServlet击纬。
(8)DispatcherServlet會(huì)根據(jù)ModelAndView對(duì)象選擇一個(gè)合適的ViewReslover(視圖解析器)。
(9)ViewReslover解析后钾麸,會(huì)向DispatcherServlet中返回具體的View(視圖)更振。
(10)DispatcherServlet對(duì)View進(jìn)行渲染(即將模型數(shù)據(jù)填充至視圖中)。
(11)視圖渲染結(jié)果會(huì)返回給客戶(hù)端瀏覽器顯示饭尝。

第十二章
【思考題】
1肯腕、請(qǐng)簡(jiǎn)述@Controller注解的使用步驟。
2芋肠、請(qǐng)列舉請(qǐng)求處理方法的參數(shù)類(lèi)型和返回類(lèi)型(至少5個(gè))乎芳。
【答案】
1遵蚜、@Controller注解在使用時(shí)可分為如下兩步:
(1)在相應(yīng)的類(lèi)上標(biāo)注@Controller注解帖池。
(2)在Spring MVC的配置文件中添加相應(yīng)的掃描配置信息。首先需要在配置文件中引入context名稱(chēng)空間的配置吭净,然后使用context:component-scan元素指定需要掃描的類(lèi)包睡汹。

2、請(qǐng)求處理方法的參數(shù)類(lèi)型主要有:HttpServletRequest寂殉、HttpServletResponse囚巴、HttpSession、Model、HttpMethod等彤叉;
請(qǐng)求處理方法的返回類(lèi)型主要有:ModelAndView庶柿、Map、String秽浇、void浮庐、HttpEntity<?>、View等柬焕。

第十三章
【思考題】
1审残、請(qǐng)簡(jiǎn)述簡(jiǎn)單數(shù)據(jù)類(lèi)型中的@RequestParam注解及其屬性作用。
2斑举、請(qǐng)簡(jiǎn)述包裝POJO類(lèi)型綁定時(shí)的注意事項(xiàng)搅轿。
【答案】
1、@RequestParam注解主要用于對(duì)請(qǐng)求中的參數(shù)進(jìn)行定義富玷,多用于在請(qǐng)求參數(shù)名與方法形參名不一致時(shí)的參數(shù)間接綁定璧坟。在使用時(shí)可以指定他的4個(gè)屬性,具體如下:
(1)value:name屬性的別名赎懦,這里指參數(shù)的名字沸柔,即入?yún)⒌恼?qǐng)求參數(shù)名字,如果只使用vaule屬性铲敛,則可以省略value屬性名褐澎。
(2)name:用于指定請(qǐng)求頭綁定的名稱(chēng)。
(3)required :用于指定參數(shù)是否必須伐蒋,默認(rèn)是true工三,表示請(qǐng)求中一定要有相應(yīng)的參數(shù)。
(4)defaultValue:默認(rèn)值先鱼,表示如果請(qǐng)求中沒(méi)有同名參數(shù)時(shí)的默認(rèn)值俭正。

2、在使用包裝POJO類(lèi)型數(shù)據(jù)綁定時(shí)焙畔,前端請(qǐng)求的參數(shù)名編寫(xiě)必須符合以下兩種情況:
(1)如果查詢(xún)條件參數(shù)是包裝類(lèi)的直接基本屬性掸读,則參數(shù)名直接用對(duì)應(yīng)的屬性名,如上面代碼中的ordersId宏多;
(2)如果查詢(xún)條件參數(shù)是包裝類(lèi)中POJO的子屬性儿惫,則參數(shù)名必須為“對(duì)象.屬性”,其中“對(duì)象”要和包裝POJO中的對(duì)象屬性名稱(chēng)一致伸但,“屬性”要和包裝POJO中的對(duì)象子屬性一致肾请。

第十四章
【思考題】
1、請(qǐng)簡(jiǎn)述JSON數(shù)據(jù)交互兩個(gè)注解的作用更胖。
2铛铁、請(qǐng)簡(jiǎn)述靜態(tài)資源訪問(wèn)的幾種配置方式隔显。
【答案】
1、JSON數(shù)據(jù)交互時(shí)饵逐,主要使用了兩個(gè)注解@RequestBody和@ResponseBody括眠。其中@RequestBody用于將請(qǐng)求體中的數(shù)據(jù)綁定到方法的形參中,在使用時(shí)標(biāo)準(zhǔn)在在方法的形參上倍权。@ResponseBody用于直接返回return對(duì)象哺窄,在使用時(shí)標(biāo)準(zhǔn)在方法上。

2账锹、靜態(tài)資源訪問(wèn)的配置有3種方式萌业,分別如下:
1)使用<mvc:resources… />元素用于配置靜態(tài)資源的訪問(wèn)路徑。
2)使用mvc:default-servlet-handler標(biāo)簽奸柬,可以訪問(wèn)所有靜態(tài)資源生年。
3)激活Tomcat默認(rèn)的Servlet來(lái)處理靜態(tài)文件訪問(wèn)。

第十五章
【思考題】
1廓奕、請(qǐng)簡(jiǎn)述Spring MVC攔截器的定義方式抱婉。
2、請(qǐng)簡(jiǎn)述單個(gè)攔截器和多個(gè)攔截器的執(zhí)行流程桌粉。
【答案】
1蒸绩、通常攔截器類(lèi)可以通過(guò)兩種方式來(lái)定義。一種是通過(guò)實(shí)現(xiàn)HandlerInterceptor接口铃肯,或繼承HandlerInterceptor接口的實(shí)現(xiàn)類(lèi)(如HandlerInterceptorAdapter)來(lái)定義患亿;另一種是通過(guò)實(shí)現(xiàn)WebRequestInterceptor接口,或繼承WebRequestInterceptor接口的實(shí)現(xiàn)類(lèi)來(lái)定義押逼。

2步藕、單個(gè)攔截器在執(zhí)行時(shí),程序首先會(huì)執(zhí)行攔截器類(lèi)中的preHandle()方法挑格,如果該方法的返回值為true咙冗,則程序會(huì)繼續(xù)向下執(zhí)行處理器中的方法,否則將不再向下執(zhí)行漂彤;在業(yè)務(wù)處理器(即控制器Controller類(lèi))處理完請(qǐng)求后雾消,會(huì)執(zhí)行postHandle()方法,然后會(huì)通過(guò)DispatcherServlet向客戶(hù)端返回響應(yīng)挫望;在DispatcherServlet處理完請(qǐng)求后立润,才會(huì)執(zhí)行afterCompletion()方法。
當(dāng)有多個(gè)攔截器同時(shí)工作時(shí)士骤,它們的preHandle()方法會(huì)按照配置文件中攔截器的配置順序執(zhí)行范删,而它們的postHandle()方法和afterCompletion()方法則會(huì)按照配置順序的反序執(zhí)行蕾域。

第十六章
【思考題】
1拷肌、請(qǐng)簡(jiǎn)述上傳表單需要滿(mǎn)足的3個(gè)條件到旦。
2、請(qǐng)簡(jiǎn)述如何解決中文文件名稱(chēng)下載時(shí)的亂碼問(wèn)題巨缘。
【答案】
1添忘、文件上傳表單需要滿(mǎn)足的3個(gè)條件如下:
(1)form表單的method屬性設(shè)置為post;
(2)form表單的enctype屬性設(shè)置為multipart/form-data若锁;
(3)提供的文件上傳輸入框搁骑。

2、解決中文文件名稱(chēng)下載時(shí)的亂碼問(wèn)題又固,需要從前端頁(yè)面發(fā)送請(qǐng)求前先對(duì)中文名進(jìn)行統(tǒng)一編碼仲器,然后在后臺(tái)控制器類(lèi)中對(duì)文件名稱(chēng)進(jìn)行相應(yīng)的轉(zhuǎn)碼。在具體實(shí)現(xiàn)時(shí)可分為如下兩步:
(1)在下載頁(yè)面中對(duì)中文文件名編碼仰冠》剑可以使用Servlet API中提供的URLEncoder類(lèi)中的encoder(String s, String enc)方法將中文轉(zhuǎn)為UTF-8編碼。
(2)在后臺(tái)控制器類(lèi)中對(duì)文件名根據(jù)不同的瀏覽器進(jìn)行相應(yīng)的轉(zhuǎn)碼洋只。

第十七章
【思考題】
1辆沦、請(qǐng)簡(jiǎn)述SSM框架整合思路。
2识虚、請(qǐng)簡(jiǎn)述SSM框架整合時(shí)肢扯,Spring配置文件中的配置信息。
【答案】
1担锤、由于Spring MVC是Spring框架中的一個(gè)模塊蔚晨,所以Spring MVC與Spring之間不存在整合的問(wèn)題,只要引入相應(yīng)JAR包就可以直接使用肛循。因此SSM框架的整合就只涉及到了Spring與MyBatis的整合蛛株,以及Spring MVC與MyBatis的整合。Spring與MyBatis框架的整合時(shí)育拨,通過(guò)Spring實(shí)例化Bean谨履,然后調(diào)用實(shí)例對(duì)象中的查詢(xún)方法來(lái)執(zhí)行MyBatis映射文件中的SQL語(yǔ)句的,如果能夠正確查詢(xún)出數(shù)據(jù)庫(kù)中的數(shù)據(jù)熬丧,那么就可以認(rèn)為Spring與MyBatis框架整合成功笋粟。加入Spring MVC后,如果可以通過(guò)前臺(tái)頁(yè)面來(lái)執(zhí)行查詢(xún)方法析蝴,并且查詢(xún)出的數(shù)據(jù)能夠在頁(yè)面中正確顯示害捕,那么就可以認(rèn)為三大框架整合成功。

2闷畸、SSM框架整合時(shí)尝盼,Spring配置文件中配置信息主要包括:
(1)讀取數(shù)據(jù)庫(kù)常量配置文件db.properties的配置信息;
(2)數(shù)據(jù)源的配置信息佑菩;
(3)事務(wù)管理器的配置信息盾沫;
(4)開(kāi)啟事務(wù)注解的配置裁赠;
(5)MyBatis工廠SqlSessionFactory的配置信息;
(6)mapper文件掃描器的配置赴精;
(7)掃描Service層的配置佩捞。

第十八章
【思考題】
1、請(qǐng)簡(jiǎn)述系統(tǒng)中各個(gè)層次的組成和作用蕾哟。
2一忱、請(qǐng)簡(jiǎn)述引入SQL文件的過(guò)程。
【答案】
1谭确、BOOT客戶(hù)管理系統(tǒng)根據(jù)功能的不同帘营,將項(xiàng)目結(jié)構(gòu)主要?jiǎng)澐譃橐韵聨讉€(gè)層次:
(1)持久對(duì)象層(也稱(chēng)持久層或持久化層):該層由若干持久化類(lèi)(實(shí)體類(lèi))組成。
(2)數(shù)據(jù)訪問(wèn)層(DAO層):該層由若干DAO接口和MyBatis映射文件組成逐哈。接口的名稱(chēng)統(tǒng)一以Dao結(jié)尾仪吧,且MyBatis的映射文件名稱(chēng)要與接口的名稱(chēng)相同。
(3)業(yè)務(wù)邏輯層(Service層):該層由若干Service接口和實(shí)現(xiàn)類(lèi)組成鞠眉。在本系統(tǒng)中薯鼠,業(yè)務(wù)邏輯層的接口統(tǒng)一使用Service結(jié)尾,其實(shí)現(xiàn)類(lèi)名稱(chēng)統(tǒng)一在接口名后加Impl械蹋。該層主要用于實(shí)現(xiàn)系統(tǒng)的業(yè)務(wù)邏輯出皇。
(4)Web表現(xiàn)層:該層主要包括Spring MVC中的Controller類(lèi)和JSP頁(yè)面。Controller類(lèi)主要負(fù)責(zé)攔截用戶(hù)請(qǐng)求哗戈,并調(diào)用業(yè)務(wù)邏輯層中相應(yīng)組件的業(yè)務(wù)邏輯方法來(lái)處理用戶(hù)請(qǐng)求郊艘,然后將相應(yīng)的結(jié)果返回給JSP頁(yè)面。

2唯咬、引入SQL文件主要步驟如下:
(1)創(chuàng)建數(shù)據(jù)庫(kù)纱注;
(2)選擇所創(chuàng)建的數(shù)據(jù)庫(kù);
(3)使用source命令導(dǎo)入數(shù)據(jù)庫(kù)文件

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末胆胰,一起剝皮案震驚了整個(gè)濱河市狞贱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蜀涨,老刑警劉巖瞎嬉,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異厚柳,居然都是意外死亡氧枣,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)别垮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)便监,“玉大人,你說(shuō)我怎么就攤上這事碳想∩斩” “怎么了毁靶?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)解藻。 經(jīng)常有香客問(wèn)我老充,道長(zhǎng)葡盗,這世上最難降的妖魔是什么螟左? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮觅够,結(jié)果婚禮上胶背,老公的妹妹穿的比我還像新娘。我一直安慰自己喘先,他們只是感情好钳吟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著窘拯,像睡著了一般红且。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涤姊,一...
    開(kāi)封第一講書(shū)人閱讀 51,208評(píng)論 1 299
  • 那天暇番,我揣著相機(jī)與錄音,去河邊找鬼思喊。 笑死壁酬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的恨课。 我是一名探鬼主播舆乔,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼剂公!你這毒婦竟也來(lái)了希俩?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤纲辽,失蹤者是張志新(化名)和其女友劉穎斜纪,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體文兑,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盒刚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绿贞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片因块。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖籍铁,靈堂內(nèi)的尸體忽然破棺而出涡上,到底是詐尸還是另有隱情趾断,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布吩愧,位于F島的核電站芋酌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏雁佳。R本人自食惡果不足惜脐帝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望糖权。 院中可真熱鬧堵腹,春花似錦、人聲如沸星澳。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)禁偎。三九已至腿堤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間如暖,已是汗流浹背笆檀。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留装处,地道東北人误债。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像妄迁,于是被迫代替她去往敵國(guó)和親寝蹈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354