本篇的中心內容,解決以下問題。
持久層框架mybatis篇與mybatis-plus使用
mybatis 是支援定製化 sql、儲存過程以及高階對映的優秀的持久層框架,其主要就完成:
構建sqlsessionfactory過程
對映器的動態**
sqlsession的4大物件
sql執行的過程
mybatis的主要設計目的就是讓我們對執行sql語句時對輸入輸出的資料管理更加方便,所以方便地寫出sql和方便地獲取sql的執行結果才是mybatis的核心競爭力。
構建主要分為2步:
說白了,就是將我們的所有配置解析為configuration物件,在整個生命週期內,可以通過該物件獲取需要的配置。
由於外掛程式需要頻繁訪問對映器的內部組成,會重點這部分,了解這塊配置抽象出來的物件:
它儲存對映器的乙個節點(select|insert|delete|update),包括配置的sql,sql的id、快取資訊、resultmap、parametertype、resulttype等重要配置內容。
它涉及的物件比較多,一般不去修改它。
對於引數和sql,主要反映在boundsql類物件上,在外掛程式中,通過它獲取到當前執行的sql和引數以及引數規則,作出適當的修改,滿足特殊的要求。
parameterobject為引數本身,可以傳遞簡單物件、pojo、map或@param註解的引數:
sql,是寫在對映器裡面的一條sql。
有了configuration物件,構建sqlsessionfactory就簡單了:
sqlsessionfactory = new sqlsessionfactorybuilder().bulid(inputstream);
sqlsession執行過程
對映器的動態**
.....
@override
public object invoke(object proxy, method method, object args) throws throwable else if (isdefaultmethod(method))
} catch (throwable t)
}}public object execute(sqlsession sqlsession, object args)
case update: }}
最後看下,生成**類的方法,就是使用jdk動態**proxy來建立的。
public t newinstance(sqlsession sqlsession)
@suppresswarnings("unchecked")
}}sqlsession下的四大物件
在mybatis中存在三種執行器:
以******executor為例,說明執行過程
public class ******executor extends baseexecutor finally
} /**
* 初始化statementhandler
*/private statement preparestatement(statementhandler handler, log statementlog) throws sqlexception
/*** 執行查詢
*/@override
public listquery(statement statement, resulthandler resulthandler) throws sqlexception
}
可以看到最後會委託給statementhandler會話器進行處理,它是乙個介面,實際建立的是routingstatementhandler物件,但它不是真實的服務物件,它是通過介面卡模式找到對應的statementhandler執行的。在mybatis中,statementhandler和executor一樣分為三種:******statementhandler、preparedstatementhandler、callablestatementhandler。
executor會先呼叫statementhandler的prepare方法預編譯sql語句,同時設定一些基本執行的引數。然後呼叫parameterize()方法啟用parameterhandler設定引數,完成預編譯,跟著執行查詢,用resulthandler封裝結果返回給呼叫者。
3 3 1 持久層框架 MyBatis入門
mybatis是優秀的持久層框架 mybatis使用xml將sql與程式解耦,便於維護 mybatis學習簡單,執行高效,是jdbc的延伸 引入mybatis依賴 建立實體類 初始化sessionfactory 利用sqlsession物件運算元據 sqlsession是mybatis運算元據庫的核...
java持久層框架mybatis如何防止sql注入
sql注入大家都不陌生,是一種常見的攻擊方式,攻擊者在介面的表單資訊或url上輸入一些奇怪的sql片段,例如 or 1 1 這樣的語句,有可能入侵引數校驗不足的應用程式。所以在我們的應用中需要做一些工作,來防備這樣的攻擊方式。在一些安全性很高的應用中,比如銀行軟體,經常使用將sql語句全部替換為儲存...
java持久層框架mybatis如何防止sql注入
sql注入大家都不陌生,是一種常見的攻擊方式,攻擊者在介面的表單資訊或url上輸入一些奇怪的sql片段,例如 or 1 1 這樣的語句,有可能入侵引數校驗不足的應用程式。所以在我們的應用中需要做一些工作,來防備這樣的攻擊方式。在一些安全性很高的應用中,比如銀行軟體,經常使用將sql語句全部替換為儲存...