【问题标题】:Are there any ORM frameworks for Web SQL (javascript)? [closed]是否有任何用于 Web SQL (javascript) 的 ORM 框架? [关闭]
【发布时间】:2010-08-31 20:26:27
【问题描述】:

有人知道现在有还是将来会有?

【问题讨论】:

    标签: javascript sql orm


    【解决方案1】:

    有一个新的叫做JayData library,这个类似于JavaScript 平台的EntityFramework(或NHibernate):提供JavaScript Language Query (JSLQ) 和JavaScript CRUD。还支持模型定义、navigationProperties 和 1..1.0、1..m、m..n 关系。

    我复制了一个简短的代码n-p,说明如何使用它:

    //define storage model: Department and Employee in a 1..m relation
    
    $data.Entity.extend("$org.types.Department", {
      Id: { type: "int", key: true, computed: true },
      Name: { type: "string", required: true },
      Address: { type: "string" },
      Employees: { type: "Array", elementType: "$org.types.Employee", inverseProperty:"Department" }
    });
    
    
    $data.Entity.extend("$org.types.Employee", {
      Id: { type: "int", key: true, computed: true },
      FirstName: { type: "string", required: true },
      LastName: { type: "string", required: true }, 
      Department: { type: "$org.types.Department", inverseProperty:"Employees"}
    });
    
    $data.EntityContext.extend("$org.types.OrgContext", {
      Department: { type: $data.EntitySet, elementType: $org.types.Department },
      Employee: { type: $data.EntitySet, elementType: $org.types.Employee }
    });
    

    您可以针对 OrdContext 和其中的集合进行编码。以下行将创建一个由本地 WebSQL 支持的上下文实例(您有其他选项,如 indexeddb 或 OData)

    var context = new $org.types.OrgContext({ name: "webSql", databaseName: "OrgDB" });
    

    添加一些数据

    var department = new $org.types.Department({ Name: 'Finance', Employees: [] });
    
    var emp1 = new $org.types.Employee({ FirstName: 'John', LastName: 'Smith'});
    department.Employees.push(emp1);
    
    var emp2 = new $org.types.Employee({ FirstName: 'Jane', LastName: 'Smith'});
    emp2.Department = department;
    
    context.add(department);
    context.add(emp2);
    
    context.saveChanges();
    

    现在您在商店中有数据,您可以查询它。实体字段以及指向 m..1 方向的导航字段支持 JSLQ 查询。 (在 1.0 版本中,您不能直接针对 1..m navProperties。您可以使用 in 表达式来规避此问题

    //filter
    context.Employees
      .filter( function(emp) { return emp.LastName == 'Smith' })
      .toArray(...);
    
    //filter
    context.Employees
      .filter( function(emp) { return emp.FirstName.startsWith('J') ||
                                      emp.LastName.toLowerCase.contains('mith') })
      .toArray(...);
    
    //filter2
    context.Employees
      .filter( function(emp) { return emp.Department.Id == 1 })
      .toArray( function(emps) { } );
    
    //filter2 + eager load
    context.Employees
      .include("Department")
      .filter( function(emp) { return emp.Department.Id == 1 })
      .toArray( function(emps) { } );
    
    
    //map/project
    context.Employees
      .filter( function(emp) { return emp.Department.Id == 1 }).toArray(...)
      .map( function(emp) { return { EmployeeName: emp.FirstName + emp.LastName, 
                                    DepartmentName: emp.Department.Name }})
      .forEach( function(item) { ... })
    

    【讨论】:

      【解决方案2】:

      我正在寻找同样的东西。这似乎是微不足道的选择。对我来说最有希望的是persistence.jsImpel 看起来也不错,但不幸的是,它看起来一年半没有更新了。 ActiveRecord.js 最终可能会成功,但他们似乎还不支持 Web SQL。希望有人会发布更多选项。

      【讨论】:

        【解决方案3】:

        我也在寻找同样的东西。 JazzRecord 看起来很可能是候选人。

        【讨论】:

          【解决方案4】:

          基于JazzRecord 的实现是为Appcelerator Titanium framework 设计的joli.js 实现。

          【讨论】:

            猜你喜欢
            • 2010-10-03
            • 1970-01-01
            • 2016-04-05
            • 2010-09-28
            • 2011-04-19
            • 1970-01-01
            • 2011-09-19
            • 2010-10-03
            • 2019-08-22
            相关资源
            最近更新 更多