网站首页 > 技术文章 正文
NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。
整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中,代表作有百亿级大数据实时计算项目。
开源地址:https://github.com/NewLifeX/X (求star, 656+)
大杀器
反向工程是XCode的大杀器,区别于其它ORM的最强功能!
通俗理解:基于XCode开发的应用,无需数据库安装脚本,连接字符串指向哪一台哪一种数据库,系统就自动在上面建库建表!
正式定义:基于实体类的表结构信息,在连接字符串指定的目标数据库上自动执行建库建表、添删改字段、创建索引等操作,支持各种数据库!
应用系统首次启动完成的时候,也是自动建表建库并初始化完成的时候。
反向工程是XCode数万级分表的主要倚仗!
创建控制台项目,从Nuget引用NewLife.XCode
创建实体类,模型如下(可参考前面几章来生成实体类):
测试代码:
执行日志:
自始至终,我们没有编写SQL脚本,没有去数据库创建数据表。
代码写完就跑起来,测试通过就部署到正式库。
从日志来看,程序自动下载SQLite驱动,因为我们并没有指定实体类使用哪一种数据库,XCode自动给我们配置了SQLite。(上一章连接字符串部分有讲解)
加一行代码把数据库指向MySql:
执行日志:
同样的首先下载MySql驱动,(当然也可以自己通过nuget引用)。
首次连接数据库时,库名指定School报错,因为根本就不存在这个库。
因此,XCode切换到系统库,开始创建数据库School,并创建数据表和索引。这里完全是MySql语法,不同于上面的SQLite建表语句。
感兴趣的同学,还可以试试Oracle和SqlServer等数据库。
正向工程
正向工程就是从数据库读取表结构信息,生成模型信息。
我们来试试写几行代码读取上面创建的数据表:
执行日志:
从上面可以看到,读取dal.Tables得到了这个连接的所有表结构信息,输出为Xml时,跟前面用来创建实体类的模型文件极为相似。
其实这就是一个模型文件,只是为了生成实体类的模型文件多增加了几个属性而已。
新生命码神工具XCoder,(https://github.com/NewLifeX/XCoder),其中的数据建模工具,可以导出各种数据库的表结构信息,正是基于dal.Tables来实现。
正向工程由3个基本接口构成:
- IDataTable。数据表接口,dal.Tables就是IDataTable集合,包括名称、描述等
- IDataColumn。数据列接口,每张数据表有多个数据列,包括名称、类型、长度、描述等
- IDataIndex。数据索引接口,每张数据表没有或者有多个索引,索引指定包括哪些字段 ,是否唯一
反向工程
有了IDataTable,我们就可以主动控制数据表结构。
DAL.SetTables(IDataTable[] tables);
这是反向工程高级用法,实际日常工作中用不到,各个实体类加载时,将会逐个连接进行反向工程检查,正是调用该方法。
给上面的数据模型,增加一个字段Code和对应索引:
跑起来:
程序自动为我们添加了字段,以及创建了索引!
前面的几个SHOW,就是XCode的正向工程,取得数据库表结构,然后跟实体类结构对比,不相同时执行反向操作。
反向工程设置
大家还记得上一章系统设置中提到的Migration吗?
XCode.config和连接字符串中都支持这个设置。
可用设置项如下:
- Off 关闭,不执行反向工程
- ReadOnly 只读不执行,异步执行反向工程检查,对比后生成变更DDL写入日志
- On 打开,仅新建,默认设置。新建表、增加字段、创建索引等可以执行,禁止修改字段长度类型,禁止删除字段,以免造成数据丢失
- Full 完全,修改删除。除了新建表、增加字段、创建索引外,还可以修改字段长度类型、删除字段等,极其危险,慎用
反向工程设计于2008年,10多年经验表明,默认On最合理,不仅满足开发需要,(随时加字段),还避免了字段改变而导致的数据丢失风险;
反向工程如此神奇的功能,你想到了什么高端用法吗?我们将在数万级分表分库章节等你!
系列教程
NewLife.XCode教程系列[2019版]
- 增删改查入门。快速展现用法,代码配置连接字符串
- 数据模型文件。建立表格字段和索引,名字以及数据类型规范,推荐字段(时间,用户,IP)
- 实体类详解。数据类业务类,泛型基类,接口
- 功能设置。连接字符串,调试开关,SQL日志,慢日志,参数化,执行超时。代码与配置文件设置,连接字符串局部设置
- 反向工程。自动建立数据库数据表
- 数据初始化。InitData写入初始化数据
- 高级增删改。重载拦截,自增字段,Valid验证,实体模型(时间,用户,IP)
- 脏数据。如何产生,怎么利用
- 增量累加。高并发统计
- 事务处理。单表和多表,不同连接,多种写法
- 扩展属性。多表关联,Map映射
- 高级查询。复杂条件,分页,自定义扩展FieldItem,查总记录数,查汇总统计
- 数据层缓存。Sql缓存,更新机制
- 实体缓存。全表整理缓存,更新机制
- 对象缓存。字典缓存,适用用户等数据较多场景。
- 百亿级性能。字段精炼,索引完备,合理查询,充分利用缓存
- 实体工厂。元数据,通用处理程序
- 角色权限。Membership
- 导入导出。Xml,Json,二进制,网络或文件
- 分表分库。常见拆分逻辑
- 高级统计。聚合统计,分组统计
- 批量写入。批量插入,批量Upsert,异步保存
- 实体队列。写入级缓存,提升性能。
- 备份同步。备份数据,恢复数据,同步数据
- 数据服务。提供RPC接口服务,远程执行查询,例如SQLite网络版
- 大数据分析。ETL抽取,调度计算处理,结果持久化
猜你喜欢
- 2024-11-05 吃透这份MySQL调优核心,面试可以横着走,奥利给
- 2024-11-05 软件测试员必备:面试时常问的15个MySQL数据库查询语句
- 2024-11-05 Spring-data-jpa入门 spring jpa入门
- 2024-11-05 Windows环境下19C一主二备的ABB架构的物理DG搭建
- 2024-11-05 centOS7 单机 mysql 5.7.24 主从 mysql主从命令
- 2024-11-05 颠覆你的认知!MySQL深度优化四件套:深度优化+面试集锦+思维导图
- 2024-11-05 面试官:有没用sysbench做过mysql的基准测试?
- 2024-11-05 第02期:单机部署以及从 MySQL 增量同步数据
- 2024-11-05 学习java需要什么软件 学java要下什么软件
- 2024-11-05 天猫面试官:你了解MySQL数据库设计和应用么?我人傻了
你 发表评论:
欢迎- 620℃几个Oracle空值处理函数 oracle处理null值的函数
- 612℃Oracle分析函数之Lag和Lead()使用
- 601℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 597℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 593℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 584℃【数据统计分析】详解Oracle分组函数之CUBE
- 574℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 562℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)