6.1 SQL服務(wù)及標(biāo)簽介紹
什么是SQL服務(wù)?SQL服務(wù)的本質(zhì)是一個(gè)服務(wù),包含了一系列的SQL語(yǔ)句和XML標(biāo)簽。SQL服務(wù)分為基本SQL服務(wù)和組合SQL服務(wù),基本服務(wù)就是一條完整的SQL語(yǔ)句和標(biāo)簽構(gòu)成的服務(wù),比如:
<selectOne id="getUserById">
SELECT * from user WHERE user_id = #{user_id}
</selectOne>
而組合SQL服務(wù)是由一系列的基本服務(wù)和標(biāo)簽組成,是一個(gè)服務(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ù)的編寫(xiě)位置:所有的SQL服務(wù)都需要寫(xiě)在SQL服務(wù)文件中:如:tangyuan-sqlservices.xml,詳細(xì)規(guī)范可參考tangyuan-sqlservices.xsd文件,該文件位于src\main\java\org\xson\tangyuan\xml\schema
對(duì)于一個(gè)SQL服務(wù),SQL語(yǔ)句本身沒(méi)有什么新奇的內(nèi)容,下面更多的是介紹SQL服務(wù)的標(biāo)簽。Tangyuan中的sqlservices標(biāo)簽分為兩類,一類是服務(wù)標(biāo)簽,表示此標(biāo)簽代表了一個(gè)SQL服務(wù),應(yīng)用程序可以直接訪問(wèn)和調(diào)用,包括如下標(biāo)簽:
| 標(biāo)簽 | 說(shuō)明 |
|---|---|
| selectSet | 查詢一個(gè)結(jié)果集,如select * from user<br />如果在sql-service內(nèi)使用,將變成一個(gè)輔助標(biāo)簽,不能被單獨(dú)調(diào)用,并且部分屬性的使用將會(huì)有些變化。 |
| selectOne | 查詢一條記錄,如select * from user where id = 1<br />如果在sql-service內(nèi)使用,將變成一個(gè)輔助標(biāo)簽,不能被單獨(dú)調(diào)用,并且部分屬性的使用將會(huì)有些變化。 |
| selectVar | 查詢一條記錄中一個(gè)指定的字段,如select name from user where id = 1<br />如果在sql-service內(nèi)使用,將變成一個(gè)輔助標(biāo)簽,不能被單獨(dú)調(diào)用,并且部分屬性的使用將會(huì)有些變化。 |
| update | 更新操作,如update user set name ......<br />如果在sql-service內(nèi)使用,將變成一個(gè)輔助標(biāo)簽,不能被單獨(dú)調(diào)用,并且部分屬性的使用將會(huì)有些變化。 |
| delete | 刪除,如DELETE FROM user where ...<br />如果在sql-service內(nèi)使用,將變成一個(gè)輔助標(biāo)簽,不能被單獨(dú)調(diào)用,并且部分屬性的使用將會(huì)有些變化。 |
| insert | 插入,如INSERT into user ....<br />如果在sql-service內(nèi)使用,將變成一個(gè)輔助標(biāo)簽,不能被單獨(dú)調(diào)用,并且部分屬性的使用將會(huì)有些變化。 |
| sql-service | 組合SQL服務(wù)標(biāo)簽,包含一些其他的服務(wù)標(biāo)簽和輔助標(biāo)簽,但不能包含自身標(biāo)簽 |
| sql | 定義一些公共的SQL語(yǔ)句,供其他SQL服務(wù)調(diào)用,此標(biāo)簽服務(wù)不能單獨(dú)調(diào)用,也不能包含在其他標(biāo)簽內(nèi)。 |
另一類是輔助標(biāo)簽,通過(guò)這些輔助標(biāo)簽,可實(shí)現(xiàn)一些復(fù)雜的服務(wù)功能,有如下標(biāo)簽:
| 標(biāo)簽 | 說(shuō)明 |
|---|---|
| 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)條件檢測(cè)失敗的時(shí)候會(huì)跑出異常,中斷服務(wù),只能在sql-service內(nèi)使用,<br />如:<exception test="{x} > 1" code="1" message="錯(cuò)誤提示信息" />
|
| setvar | 變量設(shè)置標(biāo)簽,在XML中給一個(gè)變量賦值,只能在sql-service內(nèi)使用,比如:<br /><setvar key="{x}" value="1" />
|
| log | 日志打印標(biāo)簽,用于服務(wù)流程的檢測(cè)和日志的輸出,只能在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將會(huì)運(yùn)行在一個(gè)新的事務(wù)當(dāng)中,只能在sql-service內(nèi)使用。 |
| include | SQL包含標(biāo)簽,可以引入之前sql標(biāo)簽定義的SQL語(yǔ)句內(nèi)容。 |