<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在mybatis
對映檔案中傳引數,主要用到#{} 或者 ${}.
#{}:表示使用這種符號的變數會以預編譯的形式賦值到sql片段中。
${}:表示使用這種符號的變數會以字串的形式直接插到sql片段中。
mybatis中支援三種語句型別,不同語句型別支援的變數符號不同。mybatis的三種型別如下:
STATEMENT
:這種語句型別中,只會對sql片段進行簡單的字串拼接。只支援使用${}.PREPARED
:這種語句中會先對sql片段進行字串拼接,然後再對sql片段進行賦值。可以使用#{}和${}.CALLABLE
:這種語句用了實現執行過程的呼叫,會先對sql片段進行字串拼接,然後對sql片段進行賦值。可以使用#{}和${}.statement
子包負責提供語句處理功能,其中StatementHandler
是語句功能類的父介面,RoutingStatementHandler
類是一個代理類,它能夠根據傳入的MappedStatement
物件的具體型別選中一個具體的被代理物件,然後將所有實際操作都委託給被代理物件。所以RoutingStatementHandler類提供的是路由功能,而路由選擇的依據就是語句型別。
public class RoutingStatementHandler implements StatementHandler { // 根據語句型別選取出的被代理類的物件 private final StatementHandler delegate; public RoutingStatementHandler(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) { // 根據語句型別選擇被代理物件 switch (ms.getStatementType()) { case STATEMENT: delegate = new SimpleStatementHandler(executor, ms, parameter, rowBounds, resultHandler, boundSql); break; case PREPARED: delegate = new PreparedStatementHandler(executor, ms, parameter, rowBounds, resultHandler, boundSql); break; case CALLABLE: delegate = new CallableStatementHandler(executor, ms, parameter, rowBounds, resultHandler, boundSql); break; default: throw new ExecutorException("Unknown statement type: " + ms.getStatementType()); } } }
BaseStatementHandler
作為三個實現類的父類別,提供了實現類的公共方法。並且BaseStatementHandler
類使用的模板模式在prepare
方法中定義了整個方法的框架,然後將一些與子類相關的操作交給三個子類處理。
SimpleStatementHandler
類、PreparedStatementHandler
類和CallableStatementHandler
類是三個真正的statement
處理器,分別處理statement、preparedStatement
、CallableStatement
物件。通過其中的parameterize
方法可以看出三個Statement
處理器的不同。
SimpleStatementHandler
中parameterize
方法的實現為空,因為它只需要完成字串替換即可,不需要進行引數處理
public class SimpleStatementHandler extends BaseStatementHandler { @Override public void parameterize(Statement statement) { // N/A } }
PreparedStatementHandler
中parameterize
方法最終通過ParameterHandler介面經過多級中轉後呼叫了PreparedStatement類中的引數賦值方法。
public class PreparedStatementHandler extends BaseStatementHandler { @Override public void parameterize(Statement statement) throws SQLException { parameterHandler.setParameters((PreparedStatement) statement); } }
CallableStatementHandler
中parameterize主要是通過registerOutputParameters方法中轉後呼叫CallableStatement中的輸出引數註冊方法完成輸出引數的註冊,然後通過ParameterHandler介面經過多級中轉後呼叫了PreparedStatement類中的引數賦值方法。
public class CallableStatementHandler extends BaseStatementHandler { /** * 對語句進行引數處理 * @param statement SQL語句 * @throws SQLException */ @Override public void parameterize(Statement statement) throws SQLException { // 輸出引數的註冊 registerOutputParameters((CallableStatement) statement); // 輸入引數的處理 parameterHandler.setParameters((CallableStatement) statement); } }
到此這篇關於 mybatis原始碼解讀之executor包語句處理功能的文章就介紹到這了,更多相關executor包語句處理內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45