-
Notifications
You must be signed in to change notification settings - Fork 24
配置guzz.xml
guzz.xml为guzz框架的核心配置文件,用于定义应用配置,数据库使用,ORM,以及服务等。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE guzz-configs PUBLIC "-//GUZZ//GUZZ MAPPING DTD//EN" "http://www.guzz.org/dtd/guzz.dtd">
<guzz-configs>
<config-server>
<server class="org.guzz.config.LocalFileConfigServer">
<param name="resource" value="guzz_app.properties" />
</server>
</config-server>
<dialect class="org.guzz.dialect.H2Dialect"></dialect>
<dialect name="mysql5dialect" class="org.guzz.dialect.Mysql5Dialect" />
<dialect name="oracle10gdialect" class="org.guzz.dialect.Oracle10gDialect" />
<tran locator="spring">
<dbgroup name="default" masterDBConfigName="masterDB" />
<dbgroup name="log" masterDBConfigName="masterDB" dialectName="mysql5dialect" />
<dbgroup name="oracle" masterDBConfigName="oracleDB" dialectName="oracle10gdialect" />
</tran>
<import resource="include/part2.xml" />
<business name="user" dbgroup="default" class="org.guzz.test.User" interpret="" file="classpath:org/guzz/test/User.hbm.xml" />
<business name="book" class="org.guzz.test.Book" file="classpath:org/guzz/test/Book.hbm.xml" />
<business name="userInfo" dbgroup="oracle" class="org.guzz.test.UserInfo" file="classpath:org/guzz/test/UserInfo.hbm.xml" />
<business name="userInfo2" dbgroup="default" file="classpath:org/guzz/test/UserInfoH2.hbm.xml" />
<business name="comment" dbgroup="default" file="classpath:org/guzz/test/Comment.hbm.xml" />
<business name="cargo" dbgroup="default" file="classpath:org/guzz/test/shop/Cargo.hbm.xml" />
<business name="sp" dbgroup="default" file="classpath:org/guzz/test/shop/SpecialProperty.hbm.xml" />
<service name="onlyForTest" configName="onlyForTestConfig" class="org.guzz.test.sample.SampleTestService" />
<service name="onlyForTest2" configName="onlyForTest2Config" class="org.guzz.test.sample.SampleTestService2" />
<sqlMap dbgroup="default">
<select id="selectUser" orm="user" dbgroup="default">
select * from @@user
where
@id = :id and @status = :checked
<paramsMapping>
<map paramName="userName" propName="userName" />
<map paramName="checked" type="int" />
</paramsMapping>
</select>
<select id="selectUserByName" orm="user">
select id, userName, vip, password from tb_user where userName = :userName
</select>
<update id="updateUserFavCount" orm="userObjectMap">
update @@user set @favCount = favCount + 1
</update>
<select id="selectUsers" orm="userObjectMap">
select @id, @name, @vip, @favCount from @@user
</select>
<select id="listCommentsByName" orm="commentMap">
select * from @@commentMap where @userName = :userName
</select>
<orm id="userObjectMap" class="org.guzz.test.UserModel">
<result property="id" column="pk"/>
<result property="name" column="userName"/>
<result property="favCount" column="FAV_COUNT"/>
<result property="vip" column="VIP_USER"/>
</orm>
<orm id="commentMap" class="org.guzz.test.Comment" table="TB_COMMENT" shadow="org.guzz.test.CommentShadowView">
<result property="id" column="id" type="int"/>
<result property="userId" column="userId" type="int"/>
<result property="userName" column="userName" type="string" />
<result property="createdTime" column="createdTime" type="datetime" />
</orm>
</sqlMap>
</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。
tran可以配置locator属性用于设定"事务选择器",一般配合GuzzBaseDao使用,guzz自带两个内置实现,分别是spring和solo,默认为solo。solo是指当需要数据库写操作时,guzz会自动打开一个WriteTranSession,完成操作后提交并关闭此WriteTranSession。如果填写"spring",guzz将尝试通过spring声明式事务获取WriteTranSession进行操作,如果获取失败,将报出错误。如果你在完全自定义事务,您也可以自己实现自定义的事务选择器,实现接口 org.guzz.transaction.TranSessionLocator,将locator配置成你自己实现类的全类名即可。
**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个整体来解析。 import文件格式样本:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE guzz-configs PUBLIC "-//GUZZ//GUZZ MAPPING DTD//EN" "http://www.guzz.org/dtd/guzz.dtd">
<guzz-configs>
<business name="article" class="org.guzz.test.Article" interpret="" file="classpath:org/guzz/test/Article.hbm.xml" />
<sqlMap dbgroup="default">....</sqlMap>
</guzz-configs>
**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语句保留或是guzz保留。如果这些字符仅仅是参数值的一部分,在拼接成sql语句中时,需要进行转义。
需要转义的字符有:
特殊字符 | 转义写法 |
: | \: |
@ | \@ |
' | \' |
\ | \\ |
" | \" |
在上面的例子中,时间值包含“:”,则需要进行转义;否则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[] | 字节数组 |