澳门在线威尼斯官方 > 澳门在线威尼斯官方 > 数量开荒框架

原标题:数量开荒框架

浏览次数:165 时间:2019-09-30

 

应接使用 PDF.NET 数据开拓框架
(Ver 4.0)

 

有关框架的名字由来

         在自己陈设www.pwmis.cn 站点(原域名曾经过期,未来正盘算采纳新域名 )的时候,思念到架构的宽容性和以往晋升的也许性,最关键的是向来不足够的年华去为网址增多和保卫安全广大犬牙相制的前后相继,所以在借鉴前人成功经验的功底上,设计了 一套全新的高速数据处理框架 PWMIS Data development Framework,简称PDF。本套框架的想想是借鉴Java平台的Hibernate 和 iBatis 而来,兼有ORM和SQL-MAP的性状,相同的时间还参照了后来.NET的LINQ(本框架成型于二零零七年,那时还未听他们讲过LINQ)使用风格,设计了 OQL查询表明式。本框架的计划观念是通用的,完全能够移植到Java 平台,今后只提供了.NET平台的达成,临时将本框架命令为

PDF.NET

(下载 )

前言

框架帮衬的作用

  • UI层(WinForm/Web)控件数据绑定、映射与查询;
  • BLL层实体对象查询(OQL)
  • DAL层SQL语句和.NET数据采访代码映射(查看 SQL-MAP 原理)

详尽说来,框架还包括以下特点效果与利益:

  • 看似LINQ的支撑ORM实体类查询的OQL表明式(有了LINQ为什么还要搞二个OQL?本框架 OQL的中坚陈设在LINQ大概说本身知道 LINQ此前,其他,.NET3.5框架才正式协助LINQ,而大家集团的一个产品却因为运用了3.5框架安装配置不便利成为商城和客服平时怨声载道的说辞。 今后还应该有如此的理由,大家急切须要叁个看似LINQ的事物运营在有些客户过时的机械上。 )
  • 没有必要任何后台代码就可以分页的拉长数据分页控件。
  • 只必要一行代码完结页面数据的增,删,改,查。
  • 传闻SQL词法剖析的支撑二种数据库的高速分页类,你只需求安装SQL语句和分页属性它便可见为您转移特定数据库平台的当前页数据的SQL语句。
  • 一套实用工具,能够生成实体类和基于SQL配置文件自动生成代码的代码生成器以及SQL配置文件管理程序。
  • 越多的作用等待你去发掘:)

  入坑 wcdb 有多个月了,全体来讲照旧特不利的,具体优点能够参见文书档案表达,由于官方显明表达不支持SQL 只可以自身写贰个恢弘协助一下了 

与其余数据管理框架的关联

澳门在线威尼斯官方 ,        本框架是总括八种数额管理框架的长处,去除其复杂后的轻量级的多少管理框,所以大概未有你了解的下列重量级框架强大的效劳。本框架的安插性指标是 轻量,火速,通用,命理术数 !

  • Hibernate:借鉴了它的ORM原理和HQL语言,使用了近似的简便的ORM效能;
  • iBatis:借鉴了其SQL-MAP功效,对其复杂实行了全心全意精简;
  • LINQ/Entity Framework:提供类似LINQ的OQL语法

 

框架成效演示

  • 表单数据绑定,分页显示--
  • 多少映射,查询--
  • SQL-MAP演示(请查看DAL层代码)--
  •  OQL查询(演示请看TestSqlMapEntity 项目)
  • 支撑工具,提供代码生成器和SQLMAP配置文件管理程序--(请看技术方案Tools目录)

声明
  接待转发,但请保留文章原本出处:)
  博客园:
  农民公公:

框架的适用规范

  • 第一你是懒人或许新手,大咖请绕道;
  • 协理,你很喜悦平民化的技术,不是这种非MS等大厂提供的框架不用的手艺狂喜人员;
  • 最终,假诺业主把您逼急了,指出你利用本框架,当然从前您得先熟谙它,自个儿正是在这种情况下不管一二项目首席实行官的反对私行动用那套框架的,算是本框架的率先次商业项指标利用。(小编一人产生了品种3/4的代码开荒,另外多少人只写了一半,项目主管最后才没话说)

 

框架使用的范围条件

正文

许可范围

       首先,请尊重本框架的版权,自己能够有法规的开放本框架的片段依旧全部源码,假如您获取了源码你能够随意对其修改但无法修改本框架的称谓和版权归属,你 不能将原始源码只怕修改后的源码分发给其余第三方,要是您改改后,请向自个儿发送一份。假如你未从官方获得本框架的源码 ,未经许可,不得使用其余工具对本框架反向工程查看和更换源码。任何集体和个人都足以将本框架使用于其余商业类型,能够无偿应用本框架官方发布的末段 DLL库和相关工具,但你有任务向作者告知您使用本框架的基本音讯,举例集团名称,项目名称,项目技艺音信等。自己不对你选择本框架产生的其余损失承担任何义务。假设您不容许上述条约,请勿使用本框架!

手艺限制

       当前版本基于.NET2.0上述平台,不协理实业对象对应的数据库表外键关系,OQL表明式不补助多实体类查询,不扶助SQL的总结求和分组等,如有这么些复杂查询供给,请使用SQL-MAP技巧。SQL-MAP 配置文件不援救三个布局文件,但您能够将安排文件以嵌入式文件分散到四个DAL项目中。数据访谈已经停放了 SqlServer,奥莱Db,ODBC,Oracle,SQLite等,假设你想提供别的数据库类型的访问,能够采纳奥莱Db大概ODBC情势,或许传承本框架的数目访问类支出专项使用数据访谈提供程序。

  一、功能落成

框架源码的获得

       你可以免费向自家索取本框架的测量检验技术方案 ,假如您垂怜并想获得本框架的百分之百源码,请在线向本人发邮件联系: dth一九七六@sohu.com 

       本身也接待你从地下门路拿到本框架程序(不满含源码 ),只要你依照许可限制。

  fork 一份源码然后把下边代码参预源码(某个类限制了探访成效域)

爱心行动

       自个儿属山西泰州人物,贰零壹零年中夏族民共和国江苏汶四川大学地震常德也是重灾区,纵然祸殃已经过去一年多,但灾区重新建立还是是一个经久不衰进度。由此小编决定选取软件义卖格局,自己承诺,将本框架所获收益的八分之四捐出给灾区人民,请全体有爱心的人选鼎力扶助!

  SelectSQL.swift

框架应用的类型案例

二零零五。湖北某市测量绘制流程管理种类,PDF.NET Ver1.0,职业流和音信保管某个;

二〇一〇。东京某房产备案处理类别,PDF.NET Ver1.0,职业流部分;

2008。东京(Tokyo)某财政和经济咨询企银多少利用项目,PDF.NE电视er2.0,作为系统宗旨框架部分。

二零零六。XX银行XX市分行基金经营发卖种类,PDF.NETVer4.0,作为系统宗旨框架部分。 

。。。越来越多成功案例等待你的兑现:)

import Foundation

    extension Database {

        public func prepareSelectSQL(on propertyConvertibleList: [PropertyConvertible], sql: String, values: [ColumnEncodableBase] = []) throws -> SelectSQL {
            return try SelectSQL(with: self, on: propertyConvertibleList, sql: sql, values: values)
        }

    }

    public final class SelectSQL {

        private final var core: Core
        final var optionalRecyclableHandleStatement: RecyclableHandleStatement?
        final var statement: StatementSelectSQL

        private let keys: [CodingTableKeyBase]
        private let values: [ColumnEncodableBase]

        private lazy var decoder = TableDecoder(keys, on: optionalRecyclableHandleStatement!)

        init(with core: Core, on propertyConvertibleList: [PropertyConvertible], sql: String, values: [ColumnEncodableBase]) throws {
            //TODO: Use generic to check all coding table keys conform to same root type
            keys = propertyConvertibleList.asCodingTableKeys()
            self.statement = StatementSelectSQL(sql: sql)
            self.core = core
            self.values = values
        }

        private func bindValues() throws {
            guard values.count > 0 else {
                return
            }
            let handleStatement = try lazyHandleStatement()
            for idx in 0..<values.count {
                handleStatement.bind(values[idx].archivedFundamentalValue(), toIndex: idx + 1)
            }
        }

        deinit {
            try? finalize()
        }

        /// Get all selected objects according to the `CodingTableKey`.
        ///
        /// - Returns: Table decodable objects according to the `CodingTableKey`
        /// - Throws: `Error`
        public func allObjects() throws -> [Any] {
            let rootType = keys[0].rootType as? TableDecodableBase.Type
            assert(rootType != nil, "(keys[0].rootType) must conform to TableDecodable protocol.")
            var objects: [Any] = []
            try bindValues()
            while try next() {
                objects.append(try rootType!.init(from: decoder))
            }
            return objects
        }

        /// Get all selected objects.
        ///
        /// - Parameter type: Type of table decodable object
        /// - Returns: Table decodable objects.
        /// - Throws: `Error`
        public func allObjects<Object: TableDecodable>(of type: Object.Type = Object.self) throws -> [Object] {
            assert(keys is [Object.CodingKeys], "Properties must belong to (Object.self).CodingKeys.")
            var objects: [Object] = []
            try bindValues()
            while try next() {
                objects.append(try Object.init(from: decoder))
            }
            return objects
        }

        final func finalize() throws {
            if let recyclableHandleStatement = optionalRecyclableHandleStatement {
                try recyclableHandleStatement.raw.finalize()
                optionalRecyclableHandleStatement = nil
            }
        }

        final func lazyHandleStatement() throws -> HandleStatement {
            if optionalRecyclableHandleStatement == nil {
                optionalRecyclableHandleStatement = try core.prepare(statement)
            }
            return optionalRecyclableHandleStatement!.raw
        }

        //Since `next()` may throw errors, it can't conform to `Sequence` protocol to fit a `for in` loop.
        @discardableResult
        public final func next() throws -> Bool {
            do {
                return try lazyHandleStatement().step()
            } catch let error {
                try? finalize()
                throw error
            }
        }

    }

    extension SelectSQL: CoreRepresentable {
        /// The tag of the related database.
        public final var tag: Tag? {
            return core.tag
        }

        /// The path of the related database.
        public final var path: String {
            return core.path
        }
    }

新版本音信

 

Ver 4.0 更新:

八面玲珑改写了实体类管理程序,功能升高10倍;

创新实体类生成器,帮衬从 SQLSEPAJEROVE翼虎 表字段表达变化实体类属性表达;

SqlMapDAL 援救外界接口定义;

简化了帮忙多个SqlMap文件的管理格局;

SQL-MAP援助复杂查询的分页;

SQL-MAP改进了对存储进度的支撑;

OQL援救单行表达式语法(OQL.From(Entity).Select(....).Where(...).OrderBy(...).END);

实体类扶助高作用分页;

优化了更换内部数据访谈对象的频率(不再依靠于反射);

优化了别的操作的作用。

 

Ver 3.0 更新:

•全面改写了SqlMap模块,真正辅助SQL-实体类 映射
•周详调节了框架的命名空间,合併了根基程序集成为一个 PWMIS.Core.dll
•校勘了自2.0来讲的Bug
•革新了代码生成器

Ver 2.0 更新:
•使用.NET 2.0技能改写原本持有的模块
•巩固了Web控件验证成效
•周全改写原有实体类,提供实体类生成器
•周详改写了OQL成效
•帮忙.NET 2.0数据库连接配置

Ver 1.0 功能:
•提供SQL-MAP功能
•提供ORM功能,并提供OQL功能
•提供控件数据绑定作用
•提供高效分页控件
•提供控件数逸事明功能

 

更加多新闻

本框架官方网址 (新申请域名,借使不能够张开表明还在备案中,原网站:

本人联系方式

QQ:45383850 (暗灰医师)恐怕

mailto:bluedoctors@msn.com (抗震救济祸殃)

PDF.NET 本事开拓群:43109929

相关文书档案和更加多音讯请查看官方网址。

  StatementSelectSQL.swift

    import Foundation

    public final class StatementSelectSQL: Statement {

        public private(set) var description: String = ""
        public var statementType: StatementType {
            return .select
        }

        public init(sql: String) {
            self.description = sql
        }
    }

 

本文由澳门在线威尼斯官方发布于澳门在线威尼斯官方,转载请注明出处:数量开荒框架

关键词:

上一篇:语法速览

下一篇:没有了