guzz.xml爲guzz框架的核心配置文件,用於定義應用配置,數據庫使用,ORM,以及服務等。
guzz.xml樣本:java
1 <guzz-configs> 2 3 <config-server> 4 <server class="org.guzz.config.LocalFileConfigServer"> 5 <param name="resource" value="guzz_app.properties" /> 6 </server> 7 </config-server> 8 9 <dialect class="org.guzz.dialect.H2Dialect"></dialect> 10 <dialect name="mysql5dialect" class="org.guzz.dialect.Mysql5Dialect" /> 11 <dialect name="oracle10gdialect" class="org.guzz.dialect.Oracle10gDialect" /> 12 13 <tran> 14 <dbgroup name="default" masterDBConfigName="masterDB" /> 15 <dbgroup name="log" masterDBConfigName="masterDB" dialectName="mysql5dialect" /> 16 <dbgroup name="oracle" masterDBConfigName="oracleDB" dialectName="oracle10gdialect" /> 17 </tran> 18 19 <import resource="include/part2.xml" /> 20 21 <business name="user" dbgroup="default" class="org.guzz.test.User" interpret="" file="classpath:org/guzz/test/User.hbm.xml" /> 22 <business name="book" class="org.guzz.test.Book" file="classpath:org/guzz/test/Book.hbm.xml" /> 23 <business name="userInfo" dbgroup="oracle" class="org.guzz.test.UserInfo" file="classpath:org/guzz/test/UserInfo.hbm.xml" /> 24 <business name="userInfo2" dbgroup="default" file="classpath:org/guzz/test/UserInfoH2.hbm.xml" /> 25 <business name="comment" dbgroup="default" file="classpath:org/guzz/test/Comment.hbm.xml" /> 26 <business name="cargo" dbgroup="default" file="classpath:org/guzz/test/shop/Cargo.hbm.xml" /> 27 <business name="sp" dbgroup="default" file="classpath:org/guzz/test/shop/SpecialProperty.hbm.xml" /> 28 29 <service name="onlyForTest" configName="onlyForTestConfig" class="org.guzz.test.sample.SampleTestService" /> 30 <service name="onlyForTest2" configName="onlyForTest2Config" class="org.guzz.test.sample.SampleTestService2" /> 31 32 <sqlMap dbgroup="default"> 33 <select id="selectUser" orm="user" dbgroup="default"> 34 select * from @@user 35 where 36 @id = :id and @status = :checked 37 <paramsMapping> 38 <map paramName="userName" propName="userName" /> 39 <map paramName="checked" type="int" /> 40 </paramsMapping> 41 </select> 42 43 <select id="selectUserByName" orm="user"> 44 select id, userName, vip, password from tb_user where userName = :userName 45 </select> 46 47 <update id="updateUserFavCount" orm="userObjectMap"> 48 update @@user set @favCount = favCount + 1 49 </update> 50 51 <select id="selectUsers" orm="userObjectMap"> 52 select @id, @name, @vip, @favCount from @@user 53 </select> 54 55 <select id="listCommentsByName" orm="commentMap"> 56 select * from @@commentMap where @userName = :userName 57 </select> 58 59 <orm id="userObjectMap" class="org.guzz.test.UserModel"> 60 <result property="id" column="pk"/> 61 <result property="name" column="userName"/> 62 <result property="favCount" column="FAV_COUNT"/> 63 <result property="vip" column="VIP_USER"/> 64 </orm> 65 66 <orm id="commentMap" class="org.guzz.test.Comment" table="TB_COMMENT" shadow="org.guzz.test.CommentShadowView"> 67 <result property="id" column="id" type="int"/> 68 <result property="userId" column="userId" type="int"/> 69 <result property="userName" column="userName" type="string" /> 70 <result property="createdTime" column="createdTime" type="datetime" /> 71 </orm> 72 </sqlMap> 73 74 </guzz-configs>
其中:mysql
config-server:指定應用配置信息管理服務。guzz經過配置服務器讀取應用的各項配置參數。默認實現爲本地文件配置,本例中經過讀取guzz_app.properties加載配置信息。c++
guzz_app.properties: 爲應用配置文件,按照組進行設置。相似於Mysql數據庫的配置文件,在下一節進行詳細介紹。本例中爲向org.guzz.config.LocalFileConfigServer配置管理服務器傳入的參數。sql
dialect:指定數據庫的實現方言。目前dialect主要用來建立主鍵,以及進行物理分頁查詢。dialect能夠指定1個名稱,默認爲default。guzz容許一次管理多組不一樣類型的數據庫,dialect能夠配置多個。數據庫
tran:定義數據庫組,1個tran下能夠有多個 dbgroup,每一個dbgroup能夠指定主數據庫配置名和從數據庫配置名,以及dialect名(默認用default)。guzz經過配置名,從配置服務器中查詢配置,本例中就是從guzz_app.properties讀取此組名的配置信息。每一個dbgroup對應1個物理的數據庫組,能夠有主庫從庫之分,也能夠經過不一樣的dialect名稱設置不一樣類型的數據庫廠商,默認的dialect名稱爲default。數組
business:定於領域對象。1個領域對象對應數據庫中的一張表。領域對象必須指定一個名字name屬性(之後稱爲 businessName),這個名字之後能夠用來代替類名查詢對象,以及在jsp taglib中標示讀取什麼對象。business能夠指定dbgroup屬性,標示對象存儲在那一組數據庫中,默認爲default組。file屬性制定hbm.xml文件位置。business能夠指定interpret屬性進行高級的taglib標籤條件控制,interpret爲實現 org.guzz.orm.BusinessInterpreter接口的完整類名,也能夠指定class屬性覆蓋hbm.xml中設定的class。服務器
import:引入一個子配置文件,經過resource屬性指定配置文件相對當前文件的位置。import工做時至關於彙編的宏或者c++的inline函數,他copy子文件的配置內容合併到import的位置,而後再按照1個總體來解析。oracle
service:用於外掛系統服務。name爲服務名稱,在程序中能夠經過name查詢到服務實例;configName爲配置信息組名稱,class爲服務實現客戶端。class必須實現org.guzz.Service接口。app
sqlMap:定義sql語句以及sql映射,相似於ibatis。sqlMap能夠指定dbgroup屬性標記此sqlMap下全部查詢對應的數據庫組,默認爲default數據庫組。框架
sqlMap/select|update:定義sql查詢和更新|刪除語句,經過id指定名稱(在程序中使用的名稱),經過orm 屬性指定要Mapping的配置。sql語句爲可在數據庫中執行的標準sql語句。在編寫sql語句時,爲了方便記憶,能夠用@@businessName或者@@full-class-name的方式代替數據庫表名,用@java屬性名稱或者@orm/result/property 名稱代替對應的數據庫字段,guzz在執行時會完成自動替換;固然也能夠不用。
若是sql中包含參數,使用「冒號+參數名稱」代替,如「:userName」,在程序中執行時經過java.util.Map傳入"userName"->value對進行調用,guzz將完成命名參數的參數設置(PreparedStatement方式)。
參數設置時,須要肯定參數的數據類型。默認狀況下,數據類型由JDBC驅動自動檢測與匹配(可能會不許確),用戶也能夠本身定義參數的數據類型(建議方式)。設置方法是將參數與映射後對象的屬性名稱作映射,guzz將按照java屬性的類型對待參數類型。定義方法爲在select/update中增長paramsMapping/map配置,如上面示例中id爲selectUser的sql配置。map接受3個參數,paramName爲參數名稱,必須填寫;propName爲參數對應的java屬性名稱,type爲數據類型,相似hbm.xml中定義屬性的type屬性。propName和type必須設定1個,用於肯定paramName的數據類型。作完映射後,guzz支持自動把字符串類型轉爲須要的類型,在使用動態SQL須要自動傳入與解析不肯定的參數時,很是有用。
select|update的orm屬性值能夠是本文件中定義的orm元素的值,也能夠是領域對象的businessName(直接使用hbm.xml或者annotation定義的映射)。orm映射默認將結果轉會成領域對象,用戶也能夠經過配置result-class自定義轉換成的java對象。result-class能夠是javabean類或Map類,如...result-class="org.guzz.SomeBeanForm",或result-class="java.util.HashMap"。
select|update的templated屬性用於開啓模板化SQL,也就是根據參數動態的解析和組裝sql語句。具體請參看 TemplatedSQL
orm:定義sql查詢結果字段與對象的對應關係,相似ibatis。能夠經過指定dbgroup覆蓋sqlMap中設定的數據庫。 orm能夠放在sqlMap內,表示此ORM在本sqlmap內有效,也能夠放在sqlMap外,表示全部sqlMap中的select/update均可以使用。放在sqlMap內的orm優先級高於放在sqlMap的,同時orm名稱不能是business name,全部business name會按照本身的名字自動聲明本身爲一個全局的orm。所以,在配置的sql語句選擇orm時,能夠填寫爲business name使用hbm.xml的映射關係(hbm.xml中全部的特殊功能,包括表分切自定義屬性延遲加載等將依然有效),但此時將查詢結果轉換成java對象時採用hibernate的規則,查詢多少字段映射多少字段,沒有select的屬性設爲默認值。
orm/result:每1個Result表明一列的對應關係,property爲java屬性名,column爲數據庫屬性,type爲數據類型(與hbm.xml中的type含義和取值相同);若是type沒有指定,則經過orm/class按照property屬性反射獲取類型。
在sql語句中,某些特殊的字符爲sql語句保留或是guzz保留。若是這些字符僅僅是參數值的一部分,在拼接成sql語句中時,須要進行轉義。
須要轉義的字符有
特殊字符 | 轉義寫法 |
: | \: |
@ | \@ |
' | \' |
\ | \\ |
" | \" |
舉例來講:
1 select * from @@article where @title=:title and @createdTime > to_date('20110101 0\:0\:0', 'YYYYMMDD HH24\:MI\:SS')
在上面的例子中,時間值包含「:」,則須要進行轉義;不然guzz將把「:」後的內容看成命名參數處理,引起錯誤。
注意: 若是參數值經過命名參數傳入,特殊字符也不須要轉義。轉義僅適用於直接的sql拼接。
數據庫 | dialect | 備註 |
Mysql 5.0+ | org.guzz.dialect.Mysql5Dialect | 估計老版本的也支持,沒有測試過 |
Oracle 8i | org.guzz.dialect.Oracle8iDialect | - |
Oracle 9i | org.guzz.dialect.Oracle9iDialect | - |
Oracle 10g | org.guzz.dialect.Oracle10gDialect | - |
H2 Database | org.guzz.dialect.H2Dialect | - |
Microsoft SQL Server 2000+ | org.guzz.dialect.MSSQLDialect | 不支持分頁查詢。未測試。 |
數據庫 | 數據庫數據類型 | guzz中type取值 | Java類型 | 含義 |
全部 | int | int | int | 整數 |
全部 | string | string | java.lang.String | 字符型 |
全部 | varchar | string | java.lang.String | 字符型 |
全部 | nvarchar | string | java.lang.String | 字符型 |
全部 | char | string | java.lang.String | 字符型 |
全部 | nchar | string | java.lang.String | 字符型 |
全部 | text | string | java.lang.String | 字符型 |
全部 | datetime | datetime | java.util.Date或java.sql.Timestamp | 時間戳,包含日期和時間 |
全部 | timestamp | datetime | java.util.Date或java.sql.Timestamp | 時間戳,包含日期和時間 |
全部 | date | date | java.util.Date或java.sql.Date | 日期 |
全部 | time | time | java.util.Date或java.sql.Time | 時間 |
全部 | bool | boolean | boolean | 布爾型 |
全部 | boolean | boolean | boolean | 布爾型 |
全部 | bigint | bigint | long | 長整型 |
全部 | long | bigint | long | 長整型 |
全部 | double | double | double | 長浮點型 |
全部 | money | decimal | java.math.BigDecimal | 貨幣類型 |
全部 | decimal | decimal | java.math.BigDecimal | 貨幣類型 |
全部 | float | float | float | 浮點型 |
全部 | short | short | short | 短整型 |
全部 | smallint | short | short | 短整型 |
全部 | tinyint | short | short | 短整型 |
全部 | byte | byte | byte | 字節 |
全部 | bit | byte | byte | 字節 |
全部 | bytes | bytes | byte[] | 字節數組 |
全部 | binary | bytes | byte[] | 字節數組 |
全部 | varbinary | bytes | byte[] | 字節數組 |
全部 | clob | clob | org.guzz.pojo.lob.TranClob | 大字符 |
全部 | blob | blob | org.guzz.pojo.lob.TranBlob | 大二進制 |
全部 | int | enum.ordinal|enum.class.fullname | enum類 | java枚舉類型。數據庫中爲整數定義,enum.class.fullname爲枚舉類的完整類名。 |
全部 | varchar | enum.string|enum.class.fullname | enum類 | java枚舉類型。數據庫中爲字符定義,enum.class.fullname爲枚舉類的完整類名。 |
Microsoft SQL Server | image | bytes | byte[] | 字節數組 |
Microsoft SQL Server | varbinary | bytes | byte[] | 字節數組 |
Oracle8i+ | oracle long類型 | Oracle.Long | java.lang.String | string字符型 |
Oracle8i+ | varchar2 | string | java.lang.String | 字符型 |
Oracle8i+ | nclob | clob | org.guzz.pojo.lob.TranClob | 大字符 |
Oracle8i+ | raw | bytes | byte[] | 字節數組 |