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

  
1.1.1  在DBAccess.config配置多个数据源
如果应用系统规模较大,有可能会使用多个数据源。AppFramework支持多个数据源,配置方法是在DBAccess.config里配置多个<DataSource>节点,并给每个数据源命名不同的名称。注意,为了提高性能,应该把最常用的数据源设置为默认数据源,在DataSource节点里把Default属性设置值为true,例如:
<DataSource
    Name="IMS"
    DBType="SQLServer" DBVersion="8.0"
    Default="true"
ConnectionString="Data Source=./SQL2005;Initial Catalog=IMS;User ID=IMSUser;Password=12345678" />
<DataSource
    Name="ABC"
    DBType="SQLServer" DBVersion="8.0"
    ConnectionString="Data Source=192.168.1.111;Initial Catalog=ABC;User ID=IMSUser;Password=12345678" />
在程序中获取默认数据源的会话接口,则使用:
// 获得默认数据源的会话接口
using (IDBSession session = DBSessionManager.Default.GetSession())
{
    ……
}
获取非默认数据源的会话接口,需要传入数据源名称参数:
// 获得默认数据源的会话接口
using (IDBSession session = DBSessionManager.Default.GetSession("ABC"))
{
    ……
}
建议:为了避免数据源名称字符串书写不统一导致不必要的错误,一种好的做法是把各种数据源定义为枚举,然后用枚举值的ToString() 方法作为GetSession() 的参数( 这种做法还有一个好处是,当数据源名称发生修改时可以用IDE 重构器批量修改) :
// 获得默认数据源的会话接口
using (IDBSession session = DBSessionManager.Default.GetSession(DataSource.ABC.ToString()))
{
    ……
}
 
下面是一个简单的例子,附带注释说明:
<?xml version="1.0" encoding="gb2312" ?>
<Map>
    <Head
        ReferencePath="" <!-- 添加引用路径,可以是相对路径,也可以是绝对路径,多个路径用“ ; ”间隔 -->
        Import="" <!-- 添加引用的程序集,多个路径用“ ; ”间隔 -->
        Using=""   <!-- 添加引用的命名空间,多个路径用“ ; ”间隔 -->
        >
        
        <Description> <!-- 放置描述信息 -->
        </Description>
    </Head>
   
    <!-- 定义映射的数据源,如果有多个 DaoGen 文件,应该把此节统一放在 CodeGenPlugin.config 文件里,以免在多个 DaoGen 出现重复配置,代码生成器优先采用 DaoGen 文件里定义的数据源连接串 -->
    <DataSource Name="IMS" DBType="Oracle" DBVersion="9.0.14" ConnectionString="Data Source=IMSDB;User ID=IMSUser;Password=12345678" />
       
    <MapItem
        Type="Table,View,SQL" <!-- 定义映射的数据源类型, Table 表示表、 View 表示视图、 SQL 表示查询,默认 :Table -->
        TableName="" <!-- Type=Table Views 时,表示映射的表或视图名;当 Type=SQL 时,表示 SQL 语句的别名 -->
        CSharpTableName="" <!-- 映射到 CSharp 里的表名,此名称将作为各个生成类的类名前缀,例如 BAS_USER 默认映射为 BasUser ,生成的类包括 BasUserDef,BasUserParam 等等 -->
        PrimaryKey="XX|XX|XX" <!-- 指定表的主键,通常都是一个字段,若有多个字段作联合主键,用 "|" 间隔开,默认 :ID -->
        InheritedTableName="XXX" <!-- 表示表之间的继承关系,从哪个表继承,其值是某个 MapItem TableName ,默认 : -->
        ReadOnly="false|true" <!-- 表示只生成查询方法 , 默认 :false -->
        >
       
        <!-- 映射的 SQL 语句,当 MapItem Type 属性等于 SQL 时有效 -->
        <SelectSQL></SelectSQL>
       
        <!-- 把数据库字段映射到 C# 类的属性 ColumnMap 可以有 0~N -->
        <ColumnMap
            FieldName="ID" <!-- 表、视图或子查询的字段名 -->
            CSharpFieldName="ID" <!-- 映射到 C# 类的属性名 -->
            CSharpType="int" <!-- 映射的 C# 类型,如果不指定, 代码生成器会自动指定一个合适的类型 -->
            />
       
        <!-- 配置用到的自增长字段 SequenceField 可以有 0~N -->
        <SequenceField
            FieldName="" <!-- 字段名 -->
            SequenceName="" <!-- 序列名,仅适合类似 ORACLE 支持 SEQUENCE 对象的数据库,默认 : FieldName + "_S"  -->
            />
 
        <!-- 可以有 0 1 DAO -->
        <DAO>           
            <!-- 配置实体类映射信息,可以有 0 1 InfoClass -->
            <InfoClass
                Name="BasUser" <!-- 实体类名,默认:按 "_" 分段首字母大写连接,例如 BAS_USER 映射为 BasUser -->
                Interfaces="IBasUser" <!-- 配置实体类实现的接口名,如果实现了多个接口,用“ , ”间隔,默认为: I + 实体类名 -->
                MainInter <!-- 指定实体类实现的接口里哪个作为主接口,默认为 Interfaces 里的第一个接口,如果 Interfaces 为空,则默认为: I + 实体类名 -->
                />
             
            <!-- 配置参数类映射信息,可以有 0 1 ParamClass -->
            <ParamClass
                Name="BasUserParam" <!-- 参数类名,默认:实体类名 + Param ,例如 BasUserParam -->
                Interfaces="IBasUserParam" <!-- 置参数类实现的接口名,如果实现了多个接口,用“ , ”间隔,默认为: I + 参数类名 -->
                MainInter <!-- 指定参数类实现的接口里哪个作为主接口,默认为 Interfaces 里的第一个接口,如果 Interfaces 为空,则默认为 I + 参数类名 -->
                />
           
            <!-- 配置 DAO 类映射信息,可以有 0 1 DAOClass -->   
            <DAOClass
                Name="BasUserDAO" <!-- DAO 类名,默认:实体类名 + DAO ,例如 BasUserDAO -->
                Inter <!-- 配置 DAO 类实现的接口名,如果实现了多个接口,用“ , ”间隔,默认为: I + DAO 类名 -->
                FactoryClass="BasUserFactory" <!-- 指定 DAO 类的工厂类名,默认为: DAO 类名 + Factory ,例如 BasUserFactory -->
               />
        </DAO>
 
        <!-- 定义 SQL 模板 , 可以有 0~N 个,放在 <MapIetm> 节点内外的效果无差别 -->
        <statement
            id="GetBasUserList" <!-- 模板映射的名字,生成的 C# 类将命名为: ID + "SqlMap" -->
            >
           
            <!-- 定义动态 SQL 块,可以有 0~N 个,语法类似于 IBatis dynamic ,但语法以及支持的种类要简单一些 -->
            <dynamic
                prepend="dept_id in (select id from BAS_Dept where" <!-- 配置在块的开头添加的语句 -->
                append=")" <!-- 配置在块的结尾添加的语句,与 prepend 成对出现 -->
                seprator="or" <!-- 块内的项的间隔串 -->
                >
               
                <!-- 动态项,在指定参数非空时才输出 SQL 语句,可以有 0~ N -->
                <isNotNull
                    name="DeptName" <!-- 参数名 -->
                    > <!-- 动态项的 SQL 模板,其中 #xxx# 表示占位串,将与参数值绑定  -->
                    upper(name) like #DeptName#
                    </isNotNull>
                   
                <isNotNull property="CreatedTimeBegin" > created_time >= #CreatedTimeBegin# </isNotNull>
            </dynamic>
        </statement>
    </MapItem>
   
    <!-- 定义 SQL 模板 , 可以有 0~N -->
    < statement id="GetUserAgeAvr">
        select avr(age) from (
        select age from bas_user
        < dynamic prepend="where dept_id in (" append=")" seperator="and">
            <isNotNull property="Names">select id from bas_dept where Name in (#Names#)</ isNotNull >       
        </ dynamic >
        )
    </ statement >
</Map>
 
1.1.3  配置CodeGenPlugin.config使代码生成到其他项目下
项目比较大的时候,通常要进行分层开发,接口包与实现包分离、DAO与实体包分离,因此生成的代码往往不在同一个项目下。CodeGenPlugin.config提供了配置生成代码位置的功能。
  <SavePath
    Model=" 项目名称 / 目录路径 "
    DAOInterFONT-SIZE: 9pt; COLOR: blue;">项目名称 / 目录路径 "
  />
只需要把“项目名称”设置为其他项目,就可以把代码生成到其他项目录下了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值