锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
聽鍔ㄦ?Mapped Statement
select * from ACCOUNT </statement> 浜庣‘淇濈敓鎴愭紜殑 SQL 璇彞鏄湁蹇呰鐨勩備緥濡傦紝鍦ㄧ涓涓負鈥滅湡鈥濈殑鏉′歡鍏冪礌涓紝鈥淎ND鈥?br />鏄笉闇瑕佺殑錛屼簨瀹炰笂錛屽姞涓婂畠鑲畾浼氬嚭閿欍備互涓嬪皬鑺傝璁轟笉鍚岀殑鏉′歡鍏冪礌錛屽寘鎷簩鍏冩潯浠跺厓 姣旇緝灞炴у兼槸鍚﹀ぇ浜庨潤鎬佸兼垨鍙︿竴涓睘鎬у箋? 媯鏌ユ槸鍚﹀瓨鍦ㄨ灞炴э紙瀛樺湪 parameter bean 鐨勫睘鎬э級銆?
鐩存帴浣跨敤 JDBC 涓涓潪甯告櫘閬嶇殑闂鏄姩鎬?SQL銆備嬌鐢ㄥ弬鏁板箋佸弬鏁版湰韜拰鏁版嵁鍒楅兘
鏄姩鎬佺殑 SQL錛岄氬父闈炲父鍥伴毦銆傚吀鍨嬬殑瑙e喅鏂規硶鏄紝浣跨敤涓緋誨垪 if-else 鏉′歡璇彞鍜屼竴榪炰覆
璁ㄥ帉鐨勫瓧絎︿覆榪炴帴銆傚浜庤繖涓棶棰橈紝SQL Map API浣跨敤鍜?mapped statement闈炲父鐩鎬技鐨勭粨鏋勶紝
鎻愪緵浜嗚緝涓轟紭闆呯殑鏂規硶銆傝繖閲屾槸涓涓畝鍗曠殑渚嬪瓙錛?
<select id="dynamicGetAccountList"
cacheModel="account-cache"
resultMap="account-result" >
select * from ACCOUNT
<isGreaterThan prepend="and" property="id" compareValue="0">
where ACC_ID = #id#
</isGreaterThan>
order by ACC_LAST_NAME
</select>
聽
涓婇潰鐨勪緥瀛愪腑錛屾牴鎹弬鏁?bean鈥渋d鈥濆睘鎬х殑涓嶅悓鎯呭喌錛屽彲鍒涘緩涓や釜鍙兘鐨勮鍙ャ傚鏋滃弬
鏁扳渋d鈥濆ぇ浜?0錛屽皢鍒涘緩涓嬮潰鐨勮鍙ワ細
select * from ACCOUNT where ACC_ID = ?
鎴栬咃紝濡傛灉鈥渋d鈥濆弬鏁板皬浜庣瓑浜?0錛屽皢鍒涘緩涓嬮潰鐨勮鍙ワ細
select * from ACCOUNT
鍦ㄦ洿澶嶆潅鐨勪緥瀛愪腑錛屽姩鎬?Mapped Statement 鐨勭敤澶勬洿鏄庢樉銆傚涓嬮潰姣旇緝澶嶆潅鐨勪緥瀛愶細
<statement id="dynamicGetAccountList" resultMap="account-result" >
<dynamic prepend="WHERE">
<isNotNull prepend="AND" property="firstName">
(ACC_FIRST_NAME = #firstName#
<isNotNull prepend="OR" property="lastName">
ACC_LAST_NAME = #lastName#
</isNotNull>
)
</isNotNull>
<isNotNull prepend="AND" property="emailAddress">
ACC_EMAIL like #emailAddress#
</isNotNull>
<isGreaterThan prepend="AND" property="id" compareValue="0">
ACC_ID = #id#
</isGreaterThan>
</dynamic>
order by ACC_LAST_NAME
鏍規嵁涓嶅悓鐨勬潯浠訛紝涓婇潰鍔ㄦ佺殑璇彞鍙互浜х敓 16 鏉′笉鍚岀殑鏌ヨ璇彞銆備嬌鐢?if-else 緇撴瀯鍜?br />瀛楃涓詫紝浼氫駭鐢熶笂鐧捐寰堜貢鐨勪唬鐮併?
鑰屼嬌鐢ㄥ姩鎬?Statement錛屽拰鍦?SQL 鐨勫姩鎬侀儴浣嶅懆鍥存彃鍏ユ潯浠舵爣絳句竴鏍峰鏄撱備緥濡傦細
<statement id="someName" resultMap="account-result" >
select * from ACCOUNT
<dynamic prepend="where">
<isGreaterThan prepend="and" property="id" compareValue="0">
ACC_ID = #id#
</isGreaterThan>
<isNotNull prepend=鈥漚nd" property="lastName">
ACC_LAST_NAME = #lastName#
</isNotNull>
</dynamic>
order by ACC_LAST_NAME
</statement>
聽
涓婇潰鐨勪緥瀛愪腑錛?lt;dynamic>鍏冪礌鍒掑垎鍑篠QL 璇彞鐨勫姩鎬侀儴鍒嗐傚姩鎬侀儴鍒嗗彲浠ュ寘鍚換鎰忓
鐨勬潯浠舵爣絳懼厓绱狅紝鏉′歡鏍囩鍐沖畾鏄惁鍦ㄨ鍙ヤ腑鍖呭惈鍏朵腑鐨?SQL 浠g爜銆傛墍鏈夌殑鏉′歡鏍囩鍏冪礌
灝嗘牴鎹紶緇欏姩鎬佹煡璇?Statement 鐨勫弬鏁板璞$殑鎯呭喌鏉ュ伐浣溿?lt;dynamic>鍏冪礌鍜屾潯浠跺厓绱犻兘鏈?br />鈥減repend鈥濆睘鎬э紝瀹冩槸鍔ㄦ?SQL 浠g爜鐨勪竴閮ㄥ垎錛屽湪蹇呰鎯呭喌涓嬶紝鍙互琚埗鍏冪礌鐨勨減repend鈥?br />灞炴ц鐩栥備笂闈㈢殑渚嬪瓙涓紝prepend灞炴р渨here鈥濆皢瑕嗙洊絎竴涓負鈥滅湡鈥濈殑鏉′歡鍏冪礌銆傝繖瀵?/p>
绱狅紝涓鍏冩潯浠跺厓绱犲拰鍏朵粬鍔ㄦ佸厓绱犮?
浜屽厓鏉′歡鍏冪礌
浜屽厓鏉′歡鍏冪礌灝嗕竴涓睘鎬у煎拰涓涓潤鎬佸兼垨鍙︿竴涓睘鎬у兼瘮杈冿紝濡傛灉鏉′歡涓衡滅湡鈥濓紝鍏?br />绱犱綋鐨勫唴瀹瑰皢琚寘鎷湪鏌ヨ SQL 璇彞涓偮?浜屽厓鏉′歡鍏冪礌鐨勫睘鎬э細
prepend聽 錛?鍙瑕嗙洊鐨?SQL 璇彞緇勬垚閮ㄥ垎錛屾坊鍔犲湪璇彞鐨勫墠闈紙鍙夛級
property聽 錛?琚瘮杈冪殑灞炴э紙蹇呴夛級
compareProperty聽 錛嵚?鍙︿竴涓敤浜庡拰鍓嶈呮瘮杈冪殑灞炴э紙蹇呴夋垨閫夋嫨 compareValue錛?
compareValue聽 錛嵚?鐢ㄤ簬姣旇緝鐨勫鹼紙蹇呴夋垨閫夋嫨 compareProperty錛?
姣旇緝灞炴у煎拰闈欐佸兼垨鍙︿竴涓睘鎬у兼槸鍚︾浉絳夈?
<isEqual>
姣旇緝灞炴у煎拰闈欐佸兼垨鍙︿竴涓睘鎬у兼槸鍚︿笉鐩哥瓑銆?
<isNotEqual>
<isGreaterThan>
姣旇緝灞炴у兼槸鍚﹀ぇ浜庣瓑浜庨潤鎬佸兼垨鍙︿竴涓睘鎬у箋?
<isGreaterEqual>
姣旇緝灞炴у兼槸鍚﹀皬浜庨潤鎬佸兼垨鍙︿竴涓睘鎬у箋?
<isLessThan>
姣旇緝灞炴у兼槸鍚﹀皬浜庣瓑浜庨潤鎬佸兼垨鍙︿竴涓睘鎬у箋?
<isLessEqual>
渚嬪瓙錛?
<isLessEqual prepend=鈥滱ND鈥?property=鈥漚ge鈥?compareValue=鈥?8鈥?gt;
ADOLESCENT = 鈥楾RUE鈥?
</isLessEqual>
聽
涓鍏冩潯浠跺厓绱?
涓鍏冩潯浠跺厓绱犳鏌ュ睘鎬х殑鐘舵佹槸鍚︾鍚堢壒瀹氱殑鏉′歡銆偮?涓鍏冩潯浠跺厓绱犵殑灞炴э細
prepend聽 錛?鍙瑕嗙洊鐨?SQL 璇彞緇勬垚閮ㄥ垎錛屾坊鍔犲湪璇彞鐨勫墠闈紙鍙夛級
property聽 錛?琚瘮杈冪殑灞炴э紙蹇呴夛級
<isPropertyAvailable>
媯鏌ユ槸鍚︿笉瀛樺湪璇ュ睘鎬э紙涓嶅瓨鍦?parameter bean 鐨勫睘鎬э級銆?
<isNotPropertyAvailable>
媯鏌ュ睘鎬ф槸鍚︿負 null銆?
<isNull>
媯鏌ュ睘鎬ф槸鍚︿笉涓?null銆?
<isNotNull>
媯鏌?Collection.size()鐨勫鹼紝灞炴х殑 String 鎴?String.valueOf()鍊?
<isEmpty>
鏄惁涓?null鎴栫┖錛堚溾濇垨size() < 1錛夈?
媯鏌?Collection.size()鐨勫鹼紝灞炴х殑 String 鎴?String.valueOf()鍊?
<isNotEmpty>
鏄惁涓嶄負 null 鎴栦笉涓虹┖錛堚溾濇垨 size() > 0錛夈?
渚嬪瓙錛?
<isNotEmpty prepend=鈥滱ND鈥?property=鈥漟irstName鈥?>
FIRST_NAME=#firstName#
</isNotEmpty>
聽
聽
鍏朵粬鍏冪礌聽 Parameter Present錛氳繖浜涘厓绱犳鏌ュ弬鏁板璞℃槸鍚﹀瓨鍦ㄣ?
Parameter Present鐨勫睘鎬э細
prepend聽 錛?鍙瑕嗙洊鐨?SQL 璇彞緇勬垚閮ㄥ垎錛屾坊鍔犲湪璇彞鐨勫墠闈紙鍙夛級
媯鏌ユ槸鍚﹀瓨鍦ㄥ弬鏁板璞★紙涓嶄負 null錛夈?
<isParameterPresent>
媯鏌ユ槸鍚︿笉瀛樺湪鍙傛暟瀵硅薄錛堝弬鏁板璞′負 null錛夈?
<isNotParameterPresent>
渚嬪瓙錛?
<isNotParameterPresent prepend=鈥滱ND鈥?gt;
EMPLOYEE_TYPE = 鈥楧EFAULT鈥?
</isNotParameterPresent>
聽 Iterate錛氳繖灞炴ч亶鍘嗘暣涓泦鍚堬紝騫朵負 List 闆嗗悎涓殑鍏冪礌閲嶅鍏冪礌浣撶殑鍐呭銆?
Iterate 鐨勫睘鎬э細
prepend聽 錛?鍙瑕嗙洊鐨?SQL 璇彞緇勬垚閮ㄥ垎錛屾坊鍔犲湪璇彞鐨勫墠闈紙鍙夛級
property聽 錛?綾誨瀷涓?java.util.List 鐨勭敤浜庨亶鍘嗙殑鍏冪礌錛堝繀閫夛級
open聽 錛嵚?鏁翠釜閬嶅巻鍐呭浣撳紑濮嬬殑瀛楃涓詫紝鐢ㄤ簬瀹氫箟鎷彿錛堝彲閫夛級
close聽 錛嶆暣涓亶鍘嗗唴瀹逛綋緇撴潫鐨勫瓧絎︿覆錛岀敤浜庡畾涔夋嫭鍙鳳紙鍙夛級
conjunction 錛嵚?姣忔閬嶅巻鍐呭涔嬮棿鐨勫瓧絎︿覆錛岀敤浜庡畾涔?AND 鎴?OR錛堝彲閫夛級
閬嶅巻綾誨瀷涓?java.util.List鐨勫厓绱犮?
<iterate>
渚嬪瓙錛?
<iterate prepend=鈥滱ND鈥?property=鈥漸serNameList鈥?
open=鈥?鈥?close=鈥?鈥?conjunction=鈥漁R鈥?gt;
username=#userNameList[]#
</iterate>
聽
聽
娉ㄦ剰錛氫嬌鐢?lt;iterate>鏃訛紝鍦↙ist鍏冪礌鍚嶅悗闈㈠寘鎷柟鎷彿[]闈炲父閲嶈錛屾柟鎷彿[]灝?br />瀵硅薄鏍囪涓篖ist錛屼互闃茶В鏋愬櫒綆鍗曞湴灝哃ist杈撳嚭鎴怱tring銆?
]]>
鎴戜滑鍦ㄦ暟鎹簱鎻掑叆涓鏉℃暟鎹殑鏃跺欙紝緇忓父鏄渶瑕佽繑鍥炴彃鍏ヨ繖鏉℃暟鎹殑涓婚敭銆備絾鏄暟鎹簱渚涘簲鍟嗕箣闂寸敓鎴愪富閿殑鏂瑰紡閮戒笉涓鏍楓?br />鏈変簺鏄鍏堢敓鎴?pre-generate)涓婚敭鐨勶紝濡侽racle鍜孭ostgreSQL錛涙湁浜涙槸浜嬪悗鐢熸垚(post-generate)涓婚敭鐨勶紝濡侻ySQL鍜孲QL Server銆備絾鏄笉綆℃槸鍝鏂瑰紡錛屾垜浠兘鍙互鐢╥BATIS鐨勮妭鐐規潵鑾峰彇璇彞鎵浜х敓鐨勪富閿?
渚嬪瓙濡備笅錛?/p>
鍋囪鎴戠殑鏁版嵁搴撹〃涓篜RODUCT (PRD_ID,PRD_DESCRIPTION)銆?/p>
xml 浠g爜
<!-- oracle Example -->
<insert id="insertProduct-ORACLE" parameterClass="product">聽聽
聽聽聽 <selectKey resultClass="int" type="pre" keyProperty="id" >聽聽
聽聽聽聽聽聽聽 SELECT STOCKIDSEQUENCE.NEXTVAL AS VALUE FROM DUAL聽聽
聽聽聽 </selectKey>聽聽
聽聽聽 insert into PRODUCT (PRD_ID,PRD_DESCRIPTION) values (#id#,#description#)聽聽
</insert>聽聽
聽聽
<!-- Microsoft SQL Server IDENTITY Column Example -->聽聽
<insert id="insertProduct-MS-SQL" parameterClass="product">聽聽
聽聽聽 insert into PRODUCT (PRD_DESCRIPTION)聽聽
聽聽聽 values (#description#)聽聽
聽聽聽 <selectKey resultClass="int" type="post" keyProperty="id" >聽聽
聽聽聽聽聽聽聽 select @@IDENTITY as value聽聽
聽聽聽 </selectKey>聽聽
</insert>聽聽
聽聽
<!-- MySQL Example -->聽聽
<insert id="insertProduct-MYSQL" parameterClass="product">聽聽
聽聽聽 insert into PRODUCT (PRD_DESCRIPTION)聽聽
聽聽聽 values (#description#)聽聽
聽聽聽 <selectKey resultClass="int" type="post" keyProperty="id" >聽聽
聽聽聽聽聽聽聽 select LAST_INSERT_ID() as value聽聽
聽聽聽 </selectKey>聽聽
</insert>聽
聽