java orm框架有哪些,一個開源的ORM框架——Light.Data

 2023-10-01 阅读 30 评论 0

摘要:目錄 介紹 支持的數據庫 如何使用 數據庫配置 使用方法 對象映射 子表映射 基本操作 數據聚合 Join表查詢 執行SQL 單元測試 性能測試 介紹 Light.Data?是一個基于dotnet standard 2.0的輕量級ORM框架??,通過實體模型類??Attribute?或配置文件關聯數據表。使用核心類??

目錄

介紹

支持的數據庫

如何使用

數據庫配置

使用方法

對象映射

子表映射

基本操作

數據聚合

Join表查詢

執行SQL

單元測試

性能測試


介紹

Light.Data?是一個基于dotnet standard 2.0的輕量級ORM框架??,通過實體模型類??Attribute?或配置文件關聯數據表。使用核心類??DataContext?在表上進行??CURD?操作。

PM> Install-Package Light.Data

支持的數據庫

數據庫

介紹

SqlServer

需要安裝??nuget?安裝??Light.Data.Mssql?庫,支持SqlServer 2008或以上版本

Mysql

需要安裝??nuget?安裝??Light.Data.Mysql?庫,支持Mysql5.5或以上版本

Postgre

需要安裝??nuget?安裝??Light.Data.Postgre?庫,支持PostgreSQL9.3或以上版本

?

  • 文件:https://aquilahkj.github.io/Light.Data.Site/
  • Githubhttps://github.com/aquilahkj/Light.Data2

如何使用

數據庫配置

{"lightData": {"connections": [{"name": "mssql_db","connectionString": "...","providerName": "Light.Data.Mssql.MssqlProvider, Light.Data.Mssql"},{"name": "mysql_db","connectionString": "...","providerName": "Light.Data.Mysql.MysqlProvider, Light.Data.Mysql"}]}
}

使用方法

// direct use
DataContext context = new DataContext("mssql");// create subclass
public class MyDataContext : DataContext
{public MyDataContext() : base("mssql"){}
}// create subclass with options
public class MyDataContext : DataContext
{public MyDataContext(DataContextOptions<MyDataContext> options) : base(options){}
}// direct config connect string and params (IServiceCollection)
service.AddDataContext<MyDataContext>(builder => {builder.UseMssql(connectionString);builder.SetTimeout(2000);builder.SetVersion("11.0");
}, ServiceLifetime.Transient);// use default configuration file to config (IServiceCollection)
service.AddDataContext<MyDataContext>(DataContextConfiguration.Global, config => {config.ConfigName = "mssql";
}, ServiceLifetime.Transient);

對象映射

[DataTable("Te_User", IsEntityTable = true)]
public class TeUser
{/// <summary>/// Id/// </summary>/// <value></value>[DataField("Id", IsIdentity = true, IsPrimaryKey = true)]public int Id{get;set;}/// <summary>/// Account/// </summary>/// <value></value>[DataField("Account")]public string Account{get;set;}/// <summary>/// Telephone/// </summary>/// <value></value>[DataField("Telephone", IsNullable = true)]public string Telephone{get;set;}....
}

子表映射

在派生類TeUserAndExtend中添加類型為TeUserExtend的公共屬性Extend,并添加特性RelationFieldAttribute在查詢TeUserAndExtend中,還將檢測關聯的TeUserExtend?數據。并且還支持一對多。java orm框架有哪些、

[DataTable("Te_UserExtend", IsEntityTable = true)]
public class TeUserExtend
{[DataField("Id", IsIdentity = true, IsPrimaryKey = true)]public int Id{get;set;}[DataField("MainId")]public int MainId{get;set;}[DataField("Data", IsNullable = true)]public string Data{get;set;}
}public class TeUserAndExtend : TeUser
{[RelationField("Id", "MainId")]public TeUserExtend Extend{get;set;}
}

基本操作

  • 基本CURD
  • 批量CUD
  • 支持事務處理
  • 支持數據字段默認值和自動時間戳
  • 支持數據字段讀寫控制
  • 查詢結果指定類或匿名類輸出
  • 查詢結果直接插入數據表
var context = new DataContext();
// query single data
var item = context.Query<TeUser>().Where(x => x.Id == 10).First();
// query collection datas
var list = context.Query<TeUser>().Where(x => x.Id > 10).ToList();
// create date
var user = new TeUser() {Account = "foo",Password = "bar"
};
context.Insert(user);
// update data
user.Password = "bar1";
context.Update(user);
// delete data
context.Delete(user);

數據聚合

  • 單列數據直接聚合
  • 多列數據分組聚合
  • 格式化分組字段
  • 聚合數據直接插入數據表
// basic
var list = context.Query<TeUser> ().Where (x => x.Id >= 5).GroupBy (x => new LevelIdAgg () {LevelId = x.LevelId,Data = Function.Count ()}).ToList ();// date format
var list = context.Query<TeUser> ().GroupBy (x => new RegDateFormatAgg () {RegDateFormat = x.RegTime.ToString("yyyy-MM-dd"),Data = Function.Count ()}).ToList ();

Join表查詢

  • 多表連接,支持內連接,左連接和右連接
  • 支持查詢結果和聚合數據連接在一起
  • 連接查詢結果指定類或匿名類輸出
  • 連接查詢結果直接插入數據表
// inner join
var join = context.Query<TeUser> ().Join<TeUserExtend>((x,y) => x.Id == y.Id);// aggregate data join entity table             
var join = context.Query<TeMainTable>().GroupBy(x => new {MId = x.MId,Count = Function.Count(),}).Join<TeSubTable>((x, y) => x.MId == y.Id);

執行SQL

  • 直接使用SQL和存儲過程
  • 支持對象參數
  • 查詢結果指定類或匿名類輸出
  • 存儲過程支持使用輸出參數
// basic parameter
var sql = "update Te_User set NickName=@P2 where Id=@P1";
var ps = new DataParameter[2];
ps[0] = new DataParameter("P1", 5);
ps[1] = new DataParameter("P2", "abc");
var executor = context.CreateSqlStringExecutor(sql, ps);
var ret = executor.ExecuteNonQuery();// object parameter
var sql = "update Te_User set NickName={nickname} where Id={id}";
var executor = context.CreateSqlStringExecutor(sql, new { nickname = "abc", id = 5 });
var ret = executor.ExecuteNonQuery();

單元測試

該項目使用xUnit進行單元測試,測試代碼地址:https//github.com/aquilahkj/Light.Data2/tree/master/test

每個數據庫有超過300組測試,包含1,000個案例,涵蓋了大部分代碼。

性能測試

目前只在同一臺計算機上使用EF Core,為LinuxDocker Sql Server 2017做簡單的CURD性能測試代碼地址https://github.com/aquilahkj/OrmTest

1000CUD和單個數據查詢

共有5輪,每輪1000CUD1000次數據查詢

EF測試結果

Light.Data測試結果

從比較來看,查詢性能幾乎相同,插入性能Light.Data略勝一籌,批量更新也略勝一籌。

本文僅作簡要介紹,您可以參考文檔和測試用例以了解具體的使用方法。

?

原文地址:https://www.codeproject.com/Articles/4649209/A-open-source-ORM-framework-Light-Data

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/108172.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息