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