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[] | 字节数组 |