您的位置:首页 > 移动开发

AppFramework1.0数据库访问组件使用说明(三)配置文件详解

2007-12-17 23:32 1061 查看
1.1 配置文件详解
1.1.1 在DBAccess.config配置多个数据源
如果应用系统规模较大,有可能会使用多个数据源。AppFramework支持多个数据源,配置方法是在DBAccess.config里配置多个<DataSource>节点,并给每个数据源命名不同的名称。注意,为了提高性能,应该把最常用的数据源设置为默认数据源,在DataSource节点里把Default属性设置值为true,例如:
[align=left]<DataSource[/align]
[align=left] Name="IMS" [/align]
[align=left] DBType="SQLServer" DBVersion="8.0" [/align]
[align=left] Default="true"[/align]
[align=left]ConnectionString="Data Source=./SQL2005;Initial Catalog=IMS;User ID=IMSUser;Password=12345678" />[/align]
[align=left]<DataSource[/align]
[align=left] Name="ABC" [/align]
[align=left] DBType="SQLServer" DBVersion="8.0" [/align]
[align=left] ConnectionString="Data Source=192.168.1.111;Initial Catalog=ABC;User ID=IMSUser;Password=12345678" />[/align]
在程序中获取默认数据源的会话接口,则使用:
[align=left]// 获得默认数据源的会话接口[/align]
[align=left]using (IDBSession session = DBSessionManager.Default.GetSession())[/align]
[align=left]{[/align]
[align=left] ……[/align]
[align=left]}[/align]
获取非默认数据源的会话接口,需要传入数据源名称参数:
[align=left]// 获得默认数据源的会话接口[/align]
[align=left]using (IDBSession session = DBSessionManager.Default.GetSession("ABC"))[/align]
[align=left]{[/align]
[align=left] ……[/align]
[align=left]}[/align]
建议:为了避免数据源名称字符串书写不统一导致不必要的错误,一种好的做法是把各种数据源定义为枚举,然后用枚举值的ToString()方法作为GetSession()的参数(这种做法还有一个好处是,当数据源名称发生修改时可以用IDE重构器批量修改):
[align=left]// 获得默认数据源的会话接口[/align]
[align=left]using (IDBSession session = DBSessionManager.Default.GetSession(DataSource.ABC.ToString()))[/align]
[align=left]{[/align]
[align=left] ……[/align]
[align=left]}[/align]

1.1.2 完整的.DaoGen
下面是一个简单的例子,附带注释说明:
[align=left]<?xml version="1.0" encoding="gb2312" ?>[/align]
[align=left]<Map>[/align]
[align=left] <Head[/align]
[align=left] ReferencePath="" <!-- 添加引用路径,可以是相对路径,也可以是绝对路径,多个路径用“;”间隔 -->[/align]
[align=left] Import="" <!-- 添加引用的程序集,多个路径用“;”间隔 -->[/align]
[align=left] Using="" <!-- 添加引用的命名空间,多个路径用“;”间隔 -->[/align]
[align=left] > [/align]
[align=left] [/align]
[align=left] <Description> <!-- 放置描述信息 -->[/align]
[align=left] </Description>[/align]
[align=left] </Head>[/align]
[align=left] [/align]
[align=left] <!-- 定义映射的数据源,如果有多个DaoGen文件,应该把此节统一放在 CodeGenPlugin.config 文件里,以免在多个 DaoGen 出现重复配置,代码生成器优先采用DaoGen文件里定义的数据源连接串 -->[/align]
[align=left] <DataSource Name="IMS" DBType="Oracle" DBVersion="9.0.14" ConnectionString="Data Source=IMSDB;User ID=IMSUser;Password=12345678" />[/align]
[align=left] [/align]
[align=left] <MapItem [/align]
[align=left] Type="Table,View,SQL" <!-- 定义映射的数据源类型,Table表示表、View表示视图、SQL表示查询,默认:Table -->[/align]
[align=left] TableName="" <!-- 当Type=Table或Views时,表示映射的表或视图名;当Type=SQL时,表示SQL语句的别名 -->[/align]
[align=left] CSharpTableName="" <!-- 映射到 CSharp 里的表名,此名称将作为各个生成类的类名前缀,例如 BAS_USER 默认映射为 BasUser,生成的类包括 BasUserDef,BasUserParam等等 -->[/align]
[align=left] PrimaryKey="XX|XX|XX" <!-- 指定表的主键,通常都是一个字段,若有多个字段作联合主键,用"|"间隔开,默认:ID -->[/align]
[align=left] InheritedTableName="XXX" <!-- 表示表之间的继承关系,从哪个表继承,其值是某个 MapItem 的 TableName,默认:无 -->[/align]
[align=left] ReadOnly="false|true" <!-- 表示只生成查询方法,默认:false -->[/align]
[align=left] >[/align]
[align=left] [/align]
[align=left] <!-- 映射的SQL语句,当 MapItem 的 Type属性等于 SQL 时有效 -->[/align]
[align=left] <SelectSQL></SelectSQL>[/align]
[align=left] [/align]
[align=left] <!-- 把数据库字段映射到C#类的属性 ColumnMap 可以有 0~N 个 -->[/align]
[align=left] <ColumnMap [/align]
[align=left] FieldName="ID" <!-- 表、视图或子查询的字段名 -->[/align]
[align=left] CSharpFieldName="ID" <!-- 映射到 C# 类的属性名 -->[/align]
[align=left] CSharpType="int" <!-- 映射的C#类型,如果不指定,代码生成器会自动指定一个合适的类型 -->[/align]
[align=left] />[/align]
[align=left] [/align]
[align=left] <!-- 配置用到的自增长字段 SequenceField 可以有 0~N 个 -->[/align]
[align=left] <SequenceField [/align]
[align=left] FieldName="" <!-- 字段名 -->[/align]
[align=left] SequenceName="" <!-- 序列名,仅适合类似 ORACLE 支持 SEQUENCE 对象的数据库,默认: FieldName + "_S" -->[/align]
[align=left] /> [/align]
[align=left] [/align]
[align=left] <!-- 可以有 0 或 1 个 DAO 节 -->[/align]
[align=left] <DAO> [/align]
[align=left] <!-- 配置实体类映射信息,可以有 0 或 1 个 InfoClass 节 -->[/align]
[align=left] <InfoClass [/align]
[align=left] Name="BasUser" <!-- 实体类名,默认:按"_"分段首字母大写连接,例如 BAS_USER 映射为 BasUser -->[/align]
[align=left] Interfaces="IBasUser" <!-- 配置实体类实现的接口名,如果实现了多个接口,用“,”间隔,默认为:I + 实体类名 --> [/align]
[align=left] MainInter <!-- 指定实体类实现的接口里哪个作为主接口,默认为Interfaces里的第一个接口,如果Interfaces为空,则默认为:I + 实体类名 -->[/align]
[align=left] />[/align]
[align=left] [/align]
[align=left] <!-- 配置参数类映射信息,可以有 0 或 1 个 ParamClass 节 -->[/align]
[align=left] <ParamClass [/align]
[align=left] Name="BasUserParam" <!-- 参数类名,默认:实体类名 + Param,例如 BasUserParam -->[/align]
[align=left] Interfaces="IBasUserParam" <!-- 配置参数类实现的接口名,如果实现了多个接口,用“,”间隔,默认为:I + 参数类名 --> [/align]
[align=left] MainInter <!-- 指定参数类实现的接口里哪个作为主接口,默认为Interfaces里的第一个接口,如果Interfaces为空,则默认为 I + 参数类名 -->[/align]
[align=left] />[/align]
[align=left] [/align]
[align=left] <!-- 配置DAO类映射信息,可以有 0 或 1 个 DAOClass 节 --> [/align]
[align=left] <DAOClass [/align]
[align=left] Name="BasUserDAO" <!-- DAO类名,默认:实体类名 + DAO,例如 BasUserDAO -->[/align]
[align=left] Inter <!-- 配置DAO类实现的接口名,如果实现了多个接口,用“,”间隔,默认为:I + DAO类名 --> [/align]
[align=left] FactoryClass="BasUserFactory" <!-- 指定DAO类的工厂类名,默认为:DAO类名 + Factory,例如 BasUserFactory -->[/align]
[align=left] />[/align]
[align=left] </DAO>[/align]
[align=left] [/align]
[align=left] <!-- 定义 SQL 模板, 可以有 0~N个,放在 <MapIetm> 节点内外的效果无差别 -->[/align]
[align=left] <statement [/align]
[align=left] id="GetBasUserList" <!-- 模板映射的名字,生成的C#类将命名为:ID + "SqlMap" -->[/align]
[align=left] >[/align]
[align=left] [/align]
[align=left] <!-- 定义动态SQL块,可以有0~N个,语法类似于IBatis的 dynamic,但语法以及支持的种类要简单一些 -->[/align]
[align=left] <dynamic [/align]
[align=left] prepend="dept_id in (select id from BAS_Dept where" <!-- 配置在块的开头添加的语句 -->[/align]
[align=left] append=")" <!-- 配置在块的结尾添加的语句,与 prepend 成对出现 --> [/align]
[align=left] seprator="or" <!-- 块内的项的间隔串 -->[/align]
[align=left] >[/align]
[align=left] [/align]
[align=left] <!-- 动态项,在指定参数非空时才输出 SQL 语句,可以有 0~ N 项 -->[/align]
[align=left] <isNotNull [/align]
[align=left] name="DeptName" <!-- 参数名 -->[/align]
[align=left] > <!-- 动态项的SQL模板,其中 #xxx# 表示占位串,将与参数值绑定 -->[/align]
[align=left] upper(name) like #DeptName# [/align]
[align=left] </isNotNull>[/align]
[align=left] [/align]
[align=left] <isNotNull property="CreatedTimeBegin" > created_time >= #CreatedTimeBegin# </isNotNull>[/align]
[align=left] </dynamic>[/align]
[align=left] </statement>[/align]
[align=left] </MapItem>[/align]
[align=left] [/align]
[align=left] <!-- 定义 SQL 模板, 可以有 0~N个 -->[/align]
[align=left] < statement id="GetUserAgeAvr">[/align]
[align=left] select avr(age) from ([/align]
[align=left] select age from bas_user [/align]
[align=left] < dynamic prepend="where dept_id in (" append=")" seperator="and">[/align]
[align=left] <isNotNull property="Names">select id from bas_dept where Name in (#Names#)</ isNotNull > [/align]
[align=left] </ dynamic >[/align]
[align=left] )[/align]
[align=left] </ statement >[/align]
[align=left]</Map>[/align]

1.1.3 配置CodeGenPlugin.config使代码生成到其他项目下
项目比较大的时候,通常要进行分层开发,接口包与实现包分离、DAO与实体包分离,因此生成的代码往往不在同一个项目下。CodeGenPlugin.config提供了配置生成代码位置的功能。
[align=left] <SavePath [/align]
[align=left] Model=" 项目名称/目录路径"[/align]
[align=left] DAOInterFONT-SIZE: 9pt; COLOR: blue;">项目名称/目录路径"[/align]
[align=left] />[/align]
只需要把“项目名称”设置为其他项目,就可以把代码生成到其他项目录下了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: