6.1 SQL服務(wù)及標(biāo)簽介紹
什么是SQL服務(wù)?SQL服務(wù)的本質(zhì)是一個服務(wù),包含了一系列的SQL語句和XML標(biāo)簽。SQL服務(wù)分為基本SQL服務(wù)和組合SQL服務(wù),基本服務(wù)就是一條完整的SQL語句和標(biāo)簽構(gòu)成的服務(wù)瓢棒,比如:
<selectOne id="getUserById">
SELECT * from user WHERE user_id = #{user_id}
</selectOne>
而組合SQL服務(wù)是由一系列的基本服務(wù)和標(biāo)簽組成,是一個服務(wù)集合丘喻,比如:
<sql-service id="insertAndGet" txRef="tx_01" dsKey="ds">
<!-- 插入一條記錄 -->
<insert rowCount="{nCount}" incrementKey="{user_id}">
INSERT into user(user_name, user_age, create_time) VALUES(#{user_name}, #{user_age}, #{create_time|now()})
</insert>
<!-- 打印一條日志 -->
<log message="插入一條用戶數(shù)據(jù): {user_name}, nCount: {nCount}, user_id: {user_id}"/>
<!-- 查詢用戶列表 -->
<selectSet resultKey="{users}">
SELECT * from user
</selectSet>
<!-- 返回 -->
<return>
<property value="{users}"/>
</return>
</sql-service>
SQL服務(wù)的編寫位置:所有的SQL服務(wù)都需要寫在SQL服務(wù)文件中:如:tangyuan-sqlservices.xml
脯宿,詳細(xì)規(guī)范可參考tangyuan-sqlservices.xsd
文件,該文件位于src\main\java\org\xson\tangyuan\xml\schema
對于一個SQL服務(wù)泉粉,SQL語句本身沒有什么新奇的內(nèi)容连霉,下面更多的是介紹SQL服務(wù)的標(biāo)簽。Tangyuan中的sqlservices標(biāo)簽分為兩類嗡靡,一類是服務(wù)標(biāo)簽跺撼,表示此標(biāo)簽代表了一個SQL服務(wù),應(yīng)用程序可以直接訪問和調(diào)用讨彼,包括如下標(biāo)簽:
標(biāo)簽 | 說明 |
---|---|
selectSet | 查詢一個結(jié)果集歉井,如select * from user<br />如果在sql-service內(nèi)使用,將變成一個輔助標(biāo)簽哈误,不能被單獨調(diào)用哩至,并且部分屬性的使用將會有些變化。 |
selectOne | 查詢一條記錄蜜自,如select * from user where id = 1<br />如果在sql-service內(nèi)使用菩貌,將變成一個輔助標(biāo)簽,不能被單獨調(diào)用重荠,并且部分屬性的使用將會有些變化箭阶。 |
selectVar | 查詢一條記錄中一個指定的字段,如select name from user where id = 1<br />如果在sql-service內(nèi)使用,將變成一個輔助標(biāo)簽仇参,不能被單獨調(diào)用媳危,并且部分屬性的使用將會有些變化。 |
update | 更新操作冈敛,如update user set name ......<br />如果在sql-service內(nèi)使用,將變成一個輔助標(biāo)簽鸣皂,不能被單獨調(diào)用抓谴,并且部分屬性的使用將會有些變化。 |
delete | 刪除寞缝,如DELETE FROM user where ...<br />如果在sql-service內(nèi)使用癌压,將變成一個輔助標(biāo)簽,不能被單獨調(diào)用荆陆,并且部分屬性的使用將會有些變化滩届。 |
insert | 插入,如INSERT into user ....<br />如果在sql-service內(nèi)使用被啼,將變成一個輔助標(biāo)簽帜消,不能被單獨調(diào)用,并且部分屬性的使用將會有些變化浓体。 |
sql-service | 組合SQL服務(wù)標(biāo)簽泡挺,包含一些其他的服務(wù)標(biāo)簽和輔助標(biāo)簽,但不能包含自身標(biāo)簽 |
sql | 定義一些公共的SQL語句命浴,供其他SQL服務(wù)調(diào)用娄猫,此標(biāo)簽服務(wù)不能單獨調(diào)用,也不能包含在其他標(biāo)簽內(nèi)生闲。 |
另一類是輔助標(biāo)簽媳溺,通過這些輔助標(biāo)簽,可實現(xiàn)一些復(fù)雜的服務(wù)功能碍讯,有如下標(biāo)簽:
標(biāo)簽 | 說明 |
---|---|
if | 條件控制標(biāo)簽悬蔽,比如:<if test="{x} < 0">
|
elseif | 條件控制標(biāo)簽,需要和if標(biāo)簽配合使用捉兴,比如:<elseif test="{x} < 1">
|
else | 條件控制標(biāo)簽屯阀,需要和elseif標(biāo)簽配合使用,比如:<else>
|
foreach | 循環(huán)遍歷標(biāo)簽轴术,比如:<br /><foreach collection="{ids}" index="{i}">
|
return | 結(jié)果返回標(biāo)簽难衰,只能在sql-service內(nèi)使用,比如:<br /><return value="{set}" />
|
exception | 異常標(biāo)簽逗栽,當(dāng)條件檢測失敗的時候會跑出異常盖袭,中斷服務(wù),只能在sql-service內(nèi)使用,<br />如:<exception test="{x} > 1" code="1" message="錯誤提示信息" />
|
setvar | 變量設(shè)置標(biāo)簽鳄虱,在XML中給一個變量賦值弟塞,只能在sql-service內(nèi)使用,比如:<br /><setvar key="{x}" value="1" />
|
log | 日志打印標(biāo)簽拙已,用于服務(wù)流程的檢測和日志的輸出决记,只能在sql-service內(nèi)使用,比如:<br /><log level="info" message="日志信息" />
|
call | 服務(wù)調(diào)用標(biāo)簽倍踪,在XML中調(diào)用其他服務(wù)系宫,包括SQL服務(wù),只能在sql-service內(nèi)使用建车。 |
transGroup | 事務(wù)組表扩借,表示該標(biāo)簽內(nèi)的SQL將會運(yùn)行在一個新的事務(wù)當(dāng)中,只能在sql-service內(nèi)使用缤至。 |
include | SQL包含標(biāo)簽潮罪,可以引入之前sql標(biāo)簽定義的SQL語句內(nèi)容。 |