配置guzz.xml

核心配置

guzz.xml为guzz框架的核心配置文件,用于定义应用配置,数据库使用,ORM,以及服务等。

guzz.xml样本:

 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>

其中:

config-server:指定应用配置信息管理服务。guzz通过配置服务器读取应用的各项配置参数。默认实现为本地文件配置,本例中通过读取guzz_app.properties加载配置信息。

guzz_app.properties: 为应用配置文件,按照组进行设置。类似于Mysql数据库的配置文件,在下一节进行详细介绍。本例中为向org.guzz.config.LocalFileConfigServer配置管理服务器传入的参数。

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个整体来解析。

service:用于外挂系统服务。name为服务名称,在程序中可以通过name查询到服务实例;configName为配置信息组名称,class为服务实现客户端。class必须实现org.guzz.Service接口。

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语句中,某些特殊的字符为sql语句保留或是guzz保留。如果这些字符仅仅是参数值的一部分,在拼接成sql语句中时,需要进行转义。

需要转义的字符有

特殊字符 转义写法
: \:
@ \@
' \'
\ \\
" \"

 

举例来说:

1 select * from @@article where @title=:title and @createdTime > to_date('20110101 0\:0\:0', 'YYYYMMDD HH24\:MI\:SS')

在上面的例子中,时间值包含“:”,则需要进行转义;否则guzz将把“:”后的内容当作命名参数处理,引发错误。

注意: 如果参数值通过命名参数传入,特殊字符也不需要转义。转义仅适用于直接的sql拼接。

guzz支持的数据库和dialect

 

数据库 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支持的数据类型

 

数据库 数据库数据类型 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[] 字节数组
posted @ 2015-11-13 17:50  coolbing  阅读(887)  评论(0编辑  收藏  举报