在第乙個trim標籤中,存在prefix屬性,那麼語句拼湊為 where id=#
檢查suffix和suffixoverrides,suffixoverrides值為空,那麼不做任何處理,此時會繼續拼接suffix的值,所以sql語句變成where id=# and
在第二個trim標籤中,存在 prefixoverrides="and|or|where",mybatis首先使用豎線'|'分割為陣列,因為1=1 and並不以開頭,所以不做任何處理
在 suffixoverrides="and|or|where"中能夠匹配到 1=1 and中的and字尾,那麼刪除and,sql片段變為1=1
拼接三段sql**,最後結果為:select id,name,age from sstudent where id=? and 1=1
select id,name,age from studenttrim標籤原理實現id=#
1=1and
if>
分析trimsqlnode原始碼
trimsqlnode類中有五個屬性,對應這當前的節點型別,前字尾屬性值和configuration類,在trimsqlnode構造器中,呼叫了parseoverrides()方法進行解析,可以看到,該方法會將待匹配的prefixestooverride值按|進行分割並放入list中。
1在一切屬性都填充完畢後,trimsqlnode就開始正式使用下列方法解析和組裝sql語句了。private
final sqlnode contents;//
當前節點
2private
final string prefix;//
字首名3
private
final string suffix;//
字尾名4
private
final listprefixestooverride;//
待覆蓋字首
5private
final listsuffixestooverride;//
待覆蓋字尾
6private
final
configuration configuration;78
public
trimsqlnode(configuration configuration, sqlnode contents, string prefix, string prefixestooverride, string suffix, string suffixestooverride)
1112
/**13
* 按豎線切割字串
14*
@param
overrides
15*
@return
16*/
17private
static listparseoverrides(string overrides)
25return
list;26}
27return
collections.emptylist();
28 }
@override
filtereddynamiccontext filtereddynamiccontext = new filtereddynamiccontext(context);
return result;
}
privatewhere 和set標籤void
;if (prefixestooverride != null) }
}if (prefix != null) }
}private
void
;if (suffixestooverride != null) }
}if (suffix != null) }
}
publicclass setsqlnode extends
trimsqlnode
}public
class wheresqlnode extends
trimsqlnode
}
Mybatis 原始碼分析
mybatis解析 2 sqlsessionfactorybean 繼承了 initializingbean 介面,在bean解析的finishbeanfactoryinitialization 的方法對 initializingbean介面中的 afterpropertiesset 方法進行呼叫,...
Mybatis原始碼分析
我們都知道mybatis它是一款優秀的持久層框架,它支援定製化sql 儲存過程以及高階對映,幫我們節省了許多時間與精力,今天我們主要來對mybatis的底層原始碼進行分析,主要是以下4行 首先呼叫resources中的單個string引數的getresuorceasstream string res...
MyBatis 原始碼分析
sqlsession inte ce,代表乙個連線資料庫的會話,提供了乙個預設的 defaultsqlsession sqlsessionfactory inte ct,建立 sqlsessionfactory 的工廠,提供了預設的 defaultsqlsessionfactory建立 defaul...