1. 程式人生 > >mybatis中兩種取值方式?談談Spring框架理解?

mybatis中兩種取值方式?談談Spring框架理解?

1.mybatis中兩種取值方式?

  回答:Mybatis中取值方式有幾種?各自區別是什麼? Mybatis取值方式就是說在Mapper檔案中獲取service傳過來的值的方法,總共有兩種方式,通過 $ 和 # , # 是 我們最常用的方式。 我們都說Mybatis是封裝了JDBC,所以兩種方式的區別還要從JDBC上來說, # 實際上是封裝了問號佔位符賦值的 方式,會使用JDBC中的PreparedStatement,變數處用?號代替,防止SQL注入。 $ 直接拼接到sql語句中,值沒有任何修飾,存在sql注入風險。 專案中 用 # 比較多,一般 # 和 $ 會配合使用。如果取值去的是欄位名的時候,需要使用到 $ ,如:排序 order by ${列名} "列名" 案例: 使用#符號,如 select * from test where value=#{param} 傳入引數param=”hello”後,實際生成 select * from test where value='hello' 。 使用$符號,$表示原本的字串,即傳什麼引數,SQL中就填入什麼。如 select * from test order by # {param} 傳入引數param=”time”後,實際生成 select * from test order by time 。

2.談談Spring框架理解?

IOC

  IOC:inversion of controll 控制反轉,就是將原來通過new 關鍵字建立物件的權力,交給spring由工廠建立物件。 DI:(dependcy Injection) 依賴注入,Spring工廠不僅要建立物件 還維護類與類之間 類類中屬性之間依賴關係 。 IOC和DI實際上是等同的概念,如果要進行區分的話,IOC和DI可以理解為同一個東西的不同角度看法,IOC 站在程式設計師的角度,以前建立物件是我們自己new出來的,現在讓容器自己建立,控制權交給了容器,對於 我們來說控制權反轉了。 DI是站在容器的角度,從Spring角度來看,用到的所有的物件都是自己建立的,並且物件在建立的時候需要 依賴的引數也是容器注入的,而這種維持物件之間依賴關係的方式就是依賴注入。 所以IOC和DI實際上都是指容器負責建立物件和維護物件之間依賴關係的這種行為。

AOP

   AOP:(Aspect Oriented Programing)面向切面程式設計 就是通過為專案中某些類建立動態代理物件,通過動態代理對 象解決現有專案中通用問題,例如日誌,效能記錄。AOP代表的是一個橫向的關係,程式是順序執行的,可以簡單理解為線性執行,自上而下,就象一條線,所 謂切面程式設計就是,在這條線的某一點(切點)處切開,放入另一個程式(增強處理),這個過程就是我們常 說的織入,而被切入處可以用幾何常識形象的稱之為切面。

 

Spring中生成代理方式幾種,分別是什麼,預設使用哪種,如何切換生成代理方式?

  回答:兩種,JDK動態代理,基於介面(預設使用的jdk)。CGLIB,基於繼承(要使用需要配置)。 配置aop true使用CGLIB產生代理物件 false 使用jdk 預設false。 JDK動態代理 由Java SDK提供,Java SDK動態代理的侷限在於,它只能為介面建立代理,返回的代理物件也只能轉換到某 個介面型別。 CGLIB動態代理 第三方庫cglib提供,cglib的實現機制與Java SDK不同,它是通過繼承實現的,它也是動態建立了一個類,但 這個類的父類是被代理的類。 通過程式碼模擬事務控制 JDK動態代理 Java SDK代理的是物件,需要先有一個實際物件,自定義的InvocationHandler引用該物件,然後建立一個代理類 和代理物件,客戶端訪問的是代理物件,代理物件最後再呼叫實際物件的方法 .Cglib動態代理 cglib代理的是類,建立的物件只有一個。