單頁(yè)面組合網(wǎng)站seo關(guān)鍵詞布局技巧
目錄
1.MyBatis工作流程
2.${}?和?#{}的區(qū)別??
3.mybatis多表關(guān)聯(lián)查詢?nèi)绾螌?shí)現(xiàn)一對(duì)一關(guān)聯(lián)、一對(duì)多關(guān)聯(lián)?怎么設(shè)置關(guān)聯(lián)對(duì)象的類型??
4.Mybatis的好處?mybatis的緩存機(jī)制,一級(jí),二級(jí)介紹一下
5.mybatis給我們提供了哪些標(biāo)簽來(lái)生成動(dòng)態(tài)SQL??
6.Mybatis中resultType?和?resultMap?的區(qū)別??
7.Spring?IOC、DI、AOP是什么?
8.Spring中配置的單例bean默認(rèn)什么時(shí)候初始化?如何實(shí)現(xiàn)懶加載??
9.Springboot日志級(jí)別有哪些?如何更改日志級(jí)別?
10.Springboot自動(dòng)配置的原理。?
11.?Springboot添加Interceptor攔截器時(shí),攔截器中preHandle、postHandle、afterCompletion方法含義?
12.@ConditionalOnClass、@ConditionalOnMissingClass分別是什么含義
13.我們要寫(xiě)一個(gè)過(guò)濾器需要哪些步驟?
14.SpringMVC攔截器和Servlet中的過(guò)濾器有什么區(qū)別?
15.springmvc接收參數(shù)的幾種形式?
16.SpringMVC的工作流程??
17.Spring?中事務(wù)的傳播行為和隔離級(jí)別分別代表什么含義?并分別列舉幾個(gè)常用的傳播行為和隔離級(jí)別
18.SpringMvc的作用及你對(duì)springmvc的理解?
1.MyBatis工作流程
? ? ? ? 1.加載配置文件
? ? ? ? 2.生成SqlSessionFactory
? ? ? ? 3.建立SqlSession
? ? ? ? 4.調(diào)用Mybatis提供的API
? ? ? ? 5.查詢Mapper配置文件
? ? ? ? 6.返回結(jié)果
? ? ? ? 7.關(guān)閉session
2.${}?和?#{}的區(qū)別??
?${}:簡(jiǎn)單字符串替換,把${}直接替換成變量的值,不做任何轉(zhuǎn)換,這種是取值以后再去編譯SQL語(yǔ)句,底層采用Statement語(yǔ)句,不能防止sql注入攻擊。
? #{}:預(yù)編譯處理,sql中的#{}替換成?,補(bǔ)全預(yù)編譯語(yǔ)句,有效的防止Sql語(yǔ)句注入,這種取值是編譯好SQL語(yǔ)句再取值。
3.mybatis多表關(guān)聯(lián)查詢?nèi)绾螌?shí)現(xiàn)一對(duì)一關(guān)聯(lián)、一對(duì)多關(guān)聯(lián)?怎么設(shè)置關(guān)聯(lián)對(duì)象的類型??
一對(duì)一關(guān)聯(lián)和一對(duì)多關(guān)聯(lián)都需要自定義標(biāo)簽?Assocication ?Collection。
一對(duì)一通過(guò)標(biāo)簽定義,通過(guò)javaType指定關(guān)聯(lián)對(duì)象的類型
一對(duì)多通過(guò)標(biāo)簽定義,通過(guò)ofType指定關(guān)聯(lián)對(duì)象的類型
4.Mybatis的好處?mybatis的緩存機(jī)制,一級(jí),二級(jí)介紹一下
?把Sql語(yǔ)句從Java中獨(dú)立出來(lái)。
? 封裝了底層的JDBC,API的調(diào)用,并且能夠?qū)⒔Y(jié)果集自動(dòng)轉(zhuǎn)換成JavaBean對(duì)象,簡(jiǎn)化了Java數(shù)據(jù)庫(kù)編程的重復(fù)工作。
? 自己編寫(xiě)Sql語(yǔ)句,更加的靈活。
? 入?yún)o(wú)需用對(duì)象封裝(或者map封裝),使用@Param注解
mybatis提供了緩存機(jī)制減輕數(shù)據(jù)庫(kù)壓力,提高數(shù)據(jù)庫(kù)性能
mybatis的緩存分為兩級(jí):一級(jí)緩存、二級(jí)緩存
一級(jí)緩存是SqlSession級(jí)別的緩存,緩存的數(shù)據(jù)只在SqlSession內(nèi)有效
二級(jí)緩存是mapper級(jí)別的緩存,同一個(gè)namespace公用這一個(gè)緩存,所以對(duì)SqlSession是共享的
5.mybatis給我們提供了哪些標(biāo)簽來(lái)生成動(dòng)態(tài)SQL??
if標(biāo)簽: 判斷標(biāo)簽,當(dāng)參數(shù)符合判斷條件拼接SQL語(yǔ)句。
where標(biāo)簽: 替代where關(guān)鍵字。
foreach標(biāo)簽: 向SQL傳遞數(shù)組或list,MyBatis使用foreach解析。
sql標(biāo)簽: 將實(shí)現(xiàn)的動(dòng)態(tài)SQL判斷代碼塊抽取出來(lái),組成一個(gè)SQL片段,其它的statement中就通過(guò)`<include>`標(biāo)簽就可以引用SQL片段,方便程序員進(jìn)行開(kāi)發(fā)。
set標(biāo)簽:替代set關(guān)鍵字。
choose、when、otherwise標(biāo)簽:用于實(shí)現(xiàn)類似于編程語(yǔ)言中的 switch 語(yǔ)句的邏輯判斷功能。
6.Mybatis中resultType?和?resultMap?的區(qū)別??
resultType:自動(dòng)映射,如果數(shù)據(jù)庫(kù)結(jié)果集中的列名和要封裝實(shí)體的屬性名完全一致的話用 resultType 屬性。
resultMap:手動(dòng)映射,如果數(shù)據(jù)庫(kù)結(jié)果集中的列名和要封裝實(shí)體的屬性名有不一致的情況用 resultMap 屬性,通過(guò) resultMap標(biāo)簽手動(dòng)建立對(duì)象關(guān)系映射。
7.Spring?IOC、DI、AOP是什么?
IOC:控制反轉(zhuǎn),將創(chuàng)建對(duì)象的權(quán)力轉(zhuǎn)交給Spring,由 Spring 負(fù)責(zé)創(chuàng)建對(duì)象,管理對(duì)象,裝配對(duì)象,并且管理這些對(duì)象的整個(gè)生命周期。
DI:我們?cè)谑褂肧pring 容器的時(shí)候,容器通過(guò)調(diào)用set 方法或者是構(gòu)造器來(lái)建立對(duì)象之間的依賴關(guān)系。
AOP:面向切面編程,通過(guò)在不修改原有代碼的情況下,將橫切關(guān)注點(diǎn)(如事務(wù)管理、日志記錄等)從核心業(yè)務(wù)邏輯中解耦出來(lái),并在需要的地方進(jìn)行統(tǒng)一的切面邏輯處理。
8.Spring中配置的單例bean默認(rèn)什么時(shí)候初始化?如何實(shí)現(xiàn)懶加載??
Spring中配置的單例bean默認(rèn)在容器啟動(dòng)時(shí)就初始化。
懶加載:通過(guò)給添加lazy-init=”true”屬性就可以將bean初始化的時(shí)機(jī)延遲到使用時(shí)
懶加載只要單例模式下有效
9.Springboot日志級(jí)別有哪些?如何更改日志級(jí)別?
日志級(jí)別:error、warn、info、debug、trace
更改日志級(jí)別:application.yml中配置:
logging:
?level:
??com:
???lanou: debug
10.Springboot自動(dòng)配置的原理。?
1.當(dāng)啟動(dòng)項(xiàng)目時(shí),會(huì)執(zhí)行@SpringbootApplication
2.該注解會(huì)啟動(dòng)其下的@EnableAutoConfiguration(自動(dòng)裝配)
3.自動(dòng)裝配的注解就是從 組件自動(dòng)裝配選擇器(AutoConfigurationImportSelector)中讀取組件列表
4.組件列表(META-INF/spring.factories)中就列舉了眾多需要進(jìn)行整合的組件
5.就會(huì)找到對(duì)一個(gè)的組件類(xxxAutoConfiguration)
6.在組件類的上方就會(huì)判斷當(dāng)前項(xiàng)目是否需要與此組件整合 (@ConditionalOnClass({DataSource.class, EmbeddedDatabaseType.class}))
7.如果判斷當(dāng)前項(xiàng)目沒(méi)有此類,則不會(huì)進(jìn)行該組件的加載
8.如果判斷當(dāng)前項(xiàng)目有此類,則會(huì)讀取與該組件整合的配置文件 (@EnableConfigurationProperties({DataSourceProperties.class}))
9.如果讀取失敗,則裝配失敗,項(xiàng)目報(bào)錯(cuò)
10,如果讀取成功,則裝配成功,springboot與該技術(shù)即整合成功
總結(jié):整合什么技術(shù) -- 導(dǎo)入該技術(shù)的jar包(場(chǎng)景包) -- 設(shè)置相關(guān)的屬性 -- 整合成功
結(jié)論:
SpringBoot先加載所有的自動(dòng)配置類 xxxxxAutoConfiguration;
每個(gè)自動(dòng)配置類按照條件進(jìn)行生效,默認(rèn)都會(huì)綁定配置文件指定的值。
xxxxProperties里面拿。
xxxProperties和配置文件進(jìn)行了綁定;
生效的配置類就會(huì)給容器中裝配很多組件;
只要容器中有這些組件,相當(dāng)于這些功能就有了;
11.?Springboot添加Interceptor攔截器時(shí),攔截器中preHandle、postHandle、afterCompletion方法含義?
perHandle:在controller的方法調(diào)用前調(diào)用執(zhí)行。
postHandle:在controller的方法執(zhí)行之后,返回給前端數(shù)據(jù)之前調(diào)用執(zhí)行。
afterCompletion:在整個(gè)執(zhí)行流程結(jié)束之后調(diào)用執(zhí)行。
12.@ConditionalOnClass、@ConditionalOnMissingClass分別是什么含義
@ConditionalOnClass:判斷項(xiàng)目中是否有對(duì)應(yīng)的類,有:創(chuàng)建bean對(duì)象,沒(méi)有:不創(chuàng)建bean對(duì)象。
@ConditionalOnMissingClass:判斷項(xiàng)目中是否有對(duì)應(yīng)的類,有:不創(chuàng)建bean對(duì)象,沒(méi)有:創(chuàng)建bean對(duì)象。
13.我們要寫(xiě)一個(gè)過(guò)濾器需要哪些步驟?
1. 創(chuàng)建一個(gè)普通Java類?
2. 實(shí)現(xiàn)Filter接口,重寫(xiě)doFilter、init(FilterConfig config)、destroy?
3. 通過(guò)在web.xml中配置、或者通過(guò)@WebFilter注解注冊(cè)到容器中?
14.SpringMVC攔截器和Servlet中的過(guò)濾器有什么區(qū)別?
攔截器是SpringMVC框架中封裝的一個(gè)組件,攔截的是讓不讓一個(gè)請(qǐng)求執(zhí)行對(duì)應(yīng)的Handler,過(guò)濾器是Servlet標(biāo)準(zhǔn)中的組件,攔截的是讓不讓一個(gè)請(qǐng)求訪問(wèn)Servlet或者頁(yè)面。
1.攔截器是基于 java 的反射機(jī)制的,而過(guò)濾器是基于函數(shù)回調(diào)。
2.攔截器不依賴與 servlet 容器,過(guò)濾器依賴與 servlet 容器。
3.攔截器只能攔截控制器,過(guò)濾器可以攔截所有的資源:Servlet,JSP,HTML。
4.攔截器在控制器的生命周期中,可以多次被調(diào)用,過(guò)濾器在所有請(qǐng)求調(diào)用之前。
5.攔截器可以訪問(wèn)控制器上下文、值棧里的對(duì)象,而過(guò)濾器不能訪問(wèn)。
15.springmvc接收參數(shù)的幾種形式?
方式一、原生 HttpServletRequest 接收數(shù)據(jù)
方式二:通過(guò)參數(shù)名稱接收 要求 url后傳遞的參數(shù)名和方法的形參名保持一致
方式三、參數(shù)名稱不一致時(shí) ?@RequestParam(name = "username") ?參數(shù)映射
? ? ?1、限制是否允許為空 ?@RequestParam 默認(rèn)不允許為空
? ? ?@RequestParam(required = false)
? ? ?required = false ?是否允許為空
? ? ?2、是否給默認(rèn)值 @RequestParam(defaultValue = "12345")
方式四、通過(guò)對(duì)象接收數(shù)據(jù) (當(dāng)前端傳遞的參數(shù)名和對(duì)象的屬性名保持一致時(shí))
方法五、restful風(fēng)格接收(@PathVariable 地址欄傳參)
16.SpringMVC的工作流程??
17.Spring?中事務(wù)的傳播行為和隔離級(jí)別分別代表什么含義?并分別列舉幾個(gè)常用的傳播行為和隔離級(jí)別
事務(wù)的傳播行為說(shuō)的是事務(wù)與事務(wù)之間的嵌套關(guān)系。比如B事務(wù)如果嵌套在A事務(wù)中時(shí),是復(fù)用A事務(wù),還是各用各的事務(wù),還是將A事務(wù)掛起,僅在B事務(wù)中運(yùn)行,亦或是不在事務(wù)中運(yùn)行。
常用的傳播行為:
傳播行為 | 含義 |
---|---|
REQUIRED (默認(rèn)) | 當(dāng)前有事務(wù)則加入,沒(méi)有則新建事務(wù)。 |
REQUIRES_NEW | 總是新建事務(wù),并掛起當(dāng)前事務(wù)(如果存在)。 |
SUPPORTS | 當(dāng)前有事務(wù)則加入,沒(méi)有則以非事務(wù)方式運(yùn)行。 |
NOT_SUPPORTED | 以非事務(wù)方式運(yùn)行,并掛起當(dāng)前事務(wù)(如果存在)。 |
MANDATORY | 必須在事務(wù)中調(diào)用,否則拋出異常。 |
NEVER | 必須在非事務(wù)中調(diào)用,否則拋出異常。 |
NESTED | 如果當(dāng)前有事務(wù),則在嵌套事務(wù)中執(zhí)行(子事務(wù)回滾不影響父事務(wù))。 |
事務(wù)的隔離級(jí)別說(shuō)的是事務(wù)與事務(wù)之間的可見(jiàn)性關(guān)系。比如A事務(wù)在提交到數(shù)據(jù)庫(kù)之前,B事務(wù)能否讀取到A事務(wù)操作的數(shù)據(jù)。
常用的隔離級(jí)別:
隔離級(jí)別 | 含義 | 存在的問(wèn)題 |
---|---|---|
READ_UNCOMMITTED | 最低級(jí)別,可能讀到其他事務(wù)未提交的數(shù)據(jù)(臟讀)。 | 臟讀、不可重復(fù)讀、幻讀。 |
READ_COMMITTED | 只能讀到其他事務(wù)已提交的數(shù)據(jù)(解決臟讀)。 | 不可重復(fù)讀、幻讀。 |
REPEATABLE_READ | 同一事務(wù)內(nèi)多次讀取結(jié)果一致(解決臟讀、不可重復(fù)讀)。 | 幻讀(MySQL 通過(guò) MVCC 部分解決)。 |
SERIALIZABLE | 最高級(jí)別,完全串行化執(zhí)行(解決所有并發(fā)問(wèn)題,但性能最差)。 | 無(wú)并發(fā)問(wèn)題,但性能低。 |
18.SpringMvc的作用及你對(duì)springmvc的理解?
作用:
spring MVC是一個(gè)分層的java web開(kāi)發(fā)框架,MVC模式提供了一個(gè)分層的體系結(jié)構(gòu),其中每一層對(duì)其它層進(jìn)行了抽象,具體如下:
1.模型(Model):應(yīng)用程序所使用的特定域信息的表現(xiàn)形式
2.視圖(View):域模型的表現(xiàn)形式(通過(guò)使用諸如輸入元素和按鈕之類的用戶界面元素,而這些元素與模型進(jìn)行交互)。
3.控制器(Controller):主要負(fù)責(zé)解釋用戶的輸入并轉(zhuǎn)換為模型,然后將轉(zhuǎn)換后的結(jié)果顯示給用戶。
優(yōu)點(diǎn):
讓我們能非常簡(jiǎn)單的設(shè)計(jì)出干凈的Web層,進(jìn)行更簡(jiǎn)潔的Web層的開(kāi)發(fā)
天生與Spring框架集成(如IoC容器、AOP等)
提供強(qiáng)大的約定大于配置的契約式編程支持
非常靈活的數(shù)據(jù)驗(yàn)證、格式化和數(shù)據(jù)綁定機(jī)制
支持Restful風(fēng)格