两张对比表看开源ORM vs EF/MyBatis,模板渲染 vs EasyUI/Bootstrap Table/VUE,两套“世界独创”的设计

咏方舟-长流支流 2026-07-15

前言

这段时间,我一直在整理和重构一个从2003年开始积累的框架。这个框架最早是一个轻量级ORM,结合已开源的GoldPrinter金质打印通XML演化出一套报表引擎,再后来移植到.NET Core,现在又用.NET Standard 2.0重写,目标是跨语言、跨平台、跨数据库。

重构过程中,DeepSeek帮我做了大量代码生成和文档整理工作。但更重要的是,我和AI反复讨论、反复纠正,才把这两套设计打磨出来。可以直接用AI阅读就可以生成框架及ORM的设计文档已完整的发在CSDN博客咏方舟【长江支流】

【两套“世界独创”设计,到底独创在哪?】

第一套:用宝ORM

世界上唯一能同时做到“XML配置动态实体”+“零代码CRUD”+“C#/Java/ArkTS三端镜像移植”的ORM。接口名、类名、方法签名三端完全一致,上层业务代码可以直接“翻译”,不需要重新设计。

第二套:UserBaoDataGrid.js

抛弃VUE/React等重前端框架的特定语法和绑定规则,回归前端本质——用标准H5写模板,想怎么展示就怎么展示。用户完全自控界面样式和结构,引擎只负责一件事:找到标记,把数据智能填充进去。主子表嵌套任意层,递归解析,不增加任何复杂度。纯JS,零依赖,不绑定任何UI框架。你写HTML,引擎填数据,就这么简单,你原来需要几百上千的为展示数据的javascript代码再也不用写了。


在这里插入图片描述

今天把ORM和前端模板渲染引擎两套设计放在一起对比,看看它们和主流技术有什么不同。


第一部分:用宝ORM vs 主流ORM

先说结论

用宝ORM不是要和EF比谁功能多,它的目标是两件事:

  1. 轻量:零依赖,手写SQL,没有黑盒
  2. 跨语言:C#写的代码,直接复制到Java和ArkTS,只改语法不改逻辑

对比表

维度 用宝ORM Entity Framework Dapper MyBatis (Java)
SQL方式 手写/生成SQL,完全可控 LINQ/Lambda,自动生成 手写SQL,完全可控 XML配置SQL
实体定义 特性或XML或手写 特性驱动 手写映射 XML或注解
动态实体 ✅ XML定义,运行时加载 ❌ 不支持 ❌ 不支持 ✅ XML定义
跨语言设计 ✅ 原生(C#/Java/ArkTS) ❌ .NET only ❌ .NET only ✅ Java/XML
依赖 零依赖(.NET Standard 2.0) 重依赖 零依赖 重依赖
学习曲线 低(会SQL就行) 高(要学LINQ/EF) 中等
报表引擎融合 ✅ 直接调用CRUD ❌ 不相关 ❌ 不相关 ❌ 不相关

核心差异

其他ORM:代码优先或配置优先

// EF:写代码,让EF生成SQL
var products = db.Products
    .Where(p => p.Price > 100)
    .OrderBy(p => p.Name)
    .ToList();

用宝ORM:SQL优先,代码只是载体

// 直接写SQL,完全可控
var list = DoRead("Products").ToList();
// 或通过XML配置动态实体,改XML不改代码
var entity = new XmlMapEntity(xmlContent);
entity.Insert();

独特的“动态实体”

用宝ORM有一个XmlMapEntity,它是从报表引擎中剥离出来的简化版:

<!-- 一个XML定义一个实体,增删改查全有了 -->
<EntityMap>
    <TableName>Products</TableName>
    <PrimaryKey>Id</PrimaryKey>
	<Fields>
		<Field>
			<ID>Id</ID>
			<Name>主键</Name>
			<Type>string</Type>
		</Field>
		<Field>
			<ID>Name</ID>
			<Name>产品名称</Name>
			<Type>string</Type>
		</Field>
		<Field>
			<ID>Price</ID>
			<Name>价格</Name>
			<Type>decimal</Type>
		</Field>
		<Field>
			<ID>Stock</ID>
			<Name>库存</Name>
			<Type>int</Type>
		</Field>
		<Field>
			<ID>CreatedAt</ID>
			<Name>创建时间</Name>
			<Type>datetime</Type>
			<Save>False</Save>
		</Field>
		<Field>
			<ID>UpdatedAt</ID>
			<Name>更新时间</Name>
			<Type>datetime</Type>
			<Save>False</Save>
		</Field>
		<Field>
			<ID>IsDeleted</ID>
			<Name>已删除</Name>
			<Type>bool</Type>
			<Save>False</Save>
		</Field>
	</Fields>
</EntityMap>
</EntityMap>
// 使用动态实体,无需写任何实体类
var entity = new XmlMapEntity(xmlContent);
entity.Id = "P001";
entity.SetValue("Name", "产品A");
entity.SetValue("Price", 99.9);
entity.Insert();  // 增
entity.Update();  // 改
entity.Delete();  // 删
entity.FillByPK(); // 查

这个设计是报表引擎的前置简化版:先把CRUD能力剥离出来验证,再融合回去让报表引擎调用。

跨语言的“镜像设计”

这是用宝ORM最独特的地方。接口名、类名、方法签名在C#、Java、ArkTS中完全一样,只是语法不同:

C# Java ArkTS
IEntity<T> IEntity<T> IEntity<T>
IRepository<T> IRepository<T> IRepository<T>
RepositoryBase<T> RepositoryBase<T> RepositoryBase<T>

效果:上层业务代码可以直接“翻译”,不需要重新设计。


第二部分:UserBaoDataGrid.js vs 主流前端表格框架

先说结论

UserBaoDataGrid.js不是要和谁比“功能更强大”,它的目标是两件事:

  1. 模板驱动:用户自己写H5模板,想怎么展示就怎么展示
  2. 无限嵌套:主子表嵌套任意层,递归解析,不增加复杂度

对比表

维度 UserBaoDataGrid.js EasyUI DataGrid jqGrid Bootstrap Table Vue/React 表格
模板 标准H5(用户随便写) 特定JSON配置 特定JSON配置 特定data-*属性 特定组件语法
学习成本 零(会HTML就会用) 需学50+配置项 需学40+配置项 需学30+配置项 需学整套框架
主子表嵌套 无限层(递归模板) 复杂(需special配置) 复杂(需subGrid) 复杂(需detailView) 复杂(需嵌套组件)
3层嵌套难度 0(复制模板改字段名) 让人抓狂 让人抓狂 让人抓狂 让人抓狂
依赖 (纯JS) jQuery + EasyUI jQuery + jqGrid jQuery + Bootstrap 框架本身
增删改查链接 任意HTML(随便写) 特定formatter函数 特定formatter函数 特定formatter函数 特定模板语法
谁写模板 用户自己(完全自由) 框架规定格式 框架规定格式 框架规定格式 框架规定格式

核心差异:配置驱动 vs 模板驱动

其他框架(配置驱动)

// 必须学配置
$('#dg').datagrid({
    columns: [[
        { field: 'Name', title: '名称', width: 100 },
        { field: 'Price', title: '价格', width: 80 }
    ]],
    detailFormatter: function(index, row) {
        // 子表还要写更复杂的配置
        return '<div>...</div>';
    }
});

UserBaoDataGrid(模板驱动)

<!-- 会写HTML就会用,不需要学任何配置 -->
<div id="webmisGrid" class="webmis-templatepack">
    <div class="webmis-templatepackrow">
        <div style="width:50%;"><templatefield>Name</templatefield></div>
        <div style="width:50%;"><templatefield>Price</templatefield></div>
    </div>
    <!-- 子表嵌套:再多层都一样写法 -->
    <div childtemplatepack="true" data-src="子表数据">
        <div class="webmis-templatepackrow">
            <div><childtemplatefield>子字段1</childtemplatefield></div>
            <div><childtemplatefield>子字段2</childtemplatefield></div>
        </div>
    </div>
</div>
// 调用
new UserBaoDataGrid("webmisGrid").datagrid({
    url: "/api/getdata"
});

用户完全控制展示样式,引擎只负责把数据填到模板里。

无限嵌套:递归解析

UserBaoDataGrid的核心机制是递归模板解析。遇到childtemplatepack="true"就自动递归处理,多少层都一样。

// 递归解析子模板
if (tempInnerHtml.indexOf('childtemplatepack="true"') > -1) {
    strMastTableRowsLoopHtml = this.parseByChildTemplate(
        strMastTableRowsLoopHtml, 
        mainTableRecordes[i]
    );
}

三层嵌套只用一行配置childtemplatepack="true" data-src="第三层数据"

对于其他框架,三层嵌套需要写3个嵌套的detailFormatter或3层subGrid配置,每层都要写独立的JS函数——程序员确实会抓狂。

最关键的差异

框架 本质
EasyUI / jqGrid / Bootstrap Table 配置驱动,程序员学配置,框架决定怎么显示
UserBaoDataGrid 模板驱动,用户决定怎么显示,引擎只做数据替换
Vue/React 表格 组件驱动,必须学框架语法

UserBaoDataGrid把“显示什么样”完全交给用户(H5模板),把“数据填哪”用一个<templatefield>标记搞定。


第三部分:两套设计背后的同一思想

把ORM和UserBaoDataGrid放在一起看,你会发现它们是同一个思想的两个体现:

维度 用宝ORM UserBaoDataGrid
核心机制 实体映射 + SQL执行 模板解析 + 数据替换
用户做什么 写实体/写XML 写H5模板
引擎做什么 执行CRUD 循环渲染数据
学习成本 会SQL就行 会HTML就行
扩展方式 改XML,不改代码 改H5,不改代码
依赖 零依赖 零依赖

背后的哲学是同一个:

让用户用最通用、最简单的形式表达业务意图,引擎负责把这种表达变成可运行的代码。

  • SQL是数据库的标准语言
  • H5是前端展示的标准语言
  • XML是配置的标准语言

这三个标准,AI天生都擅长生成。

这就是为什么这套框架对AI特别友好——DeepSeek可以直接生成SQL、生成XML配置、生成H5模板,不需要学习任何特定框架的语法。


总结

用宝框架做了两件世界独创的事:

1. ORM层:静态实体 + 动态实体(XML驱动) + 跨语言镜像设计,让C#代码可以直接翻译成Java/ArkTS,让XML配置的实体直接拥有完整的CRUD能力。

2. 前端渲染层:UserBaoDataGrid.js,纯JS无依赖,H5模板驱动,无限嵌套子表,让前端开发回归“写HTML + 调用数据”的本质。

两套设计合在一起,形成了一条完整的链路:

SQL + XML + H5 → 用宝框架 → 完整运行的Web应用
     ↑
  AI直接生成

不需要学习任何特定框架的语法,只需要会用SQL、会写HTML、会配XML——而这三样,正是AI最擅长做的事情。

这就是这套框架在AI时代最大的价值。


后记

这套框架从2003年开始积累,2004年开源了金质打印通,现在应用跨平台、跨语言、轻量化特性重新整理:

  • 2026年:与AI深度协作,完成用宝框架 + ORM,开源,绝对开源(设计文档及思路在博客中完整查看)
  • AnyORM(基于用宝框架 + ORM)就是文中的XML实体,0编码实现CRUD,仅对粉丝开源。不用搞代码平台生成器硬编码(需要编译),而是修改XML就能增删改查(不用再编译)
  • 正在做 AI报表,让普通人直接自然语言接入金质打印通姊妹篇 天下报表 引擎,将 AI+ 报表引擎 + 前端渲染 + AnyORM完整闭环

本文由DeepSeek协助整理,但设计和决策全部来自作者。


(完)

版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

本文首发CSDN,链接:https://blog.csdn.net/flygoldfish

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐