HSQL 是一种轻量级的基于 .NET Core 的数据库对象关系映射「ORM」框架

HSQL 是一种可以使用非常简单高效的方式进行数据库操作的一种框架,通过简单的语法,使数据库操作不再成为难事。目前支持的数据库有 MySql、SQLServer。

安装方法

Install-Package HSQL-standard

使用方法

性能

无索引、单机、单表、表数据为十万行

创建映射模型
[Table("t_student")]
public class Student
{
[Column("id")]
public string Id { get; set; } [Column("name")]
public string Name { get; set; } [Column("age")]
public int Age { get; set; } [Column("school_id")]
public string SchoolId { get; set; } [Column("birthday")]
public long Birthday { get; set; }
}

Table 标记一个表对象。如:[Table("t_student")] 代表 Student 类将映射为数据库表 t_student
Column 标记一个列对象。如:[Column("id")] 代表 Id 属性将映射为数据库列 id

创建数据库操作实例
var connectionString = $"Server=127.0.0.1;Database=test;Uid=root;Pwd=123456;";
var database = new Database(Dialect.MySQL, connectionString);

connectionString 为数据库连接字符串。
Dialect.MySQL 表示访问数据库的类型为 MYSQL

新增
var result = database.Insert<Student>(new Student()
{
Name = "zhangsan",
Age = ,
SchoolId = ""
});

Insert 方法可插入一个对象,表示对 t_student 表插入一条数据。
最后被解释为 SQL 语句 ->
INSERT INTO t_student(id,name,age,school_id,birthday) VALUES(@id,@name,@age,@school_id,@birthday);

批量新增
var list = new List<Student>();
for (var i = ; i < ; i++)
{
list.Add(new Student()
{
Id = $"{i}",
Name = "zhangsan",
Age = ,
SchoolId = ""
});
}
var result = database.Insert<Student>(list);

Insert 方法可插入一个集合对象,表示对 t_student 表进行批量插入。
最后被解释为事务性批量插入的 SQL 语句,如
INSERT INTO t_student(id,name,age,school_id,birthday) VALUES(@id,@name,@age,@school_id,@birthday);
会进行多条语句事务操作。

修改
var result = database.Update<Student>(x => x.Id.Contains("test_update_list"), new Student() { Age =  });

Update 方法表示更新操作。如:
参数1:x => x.Id.Contains("test_update_list") 被解释为 WHERE id LIKE '%test_update_list%'
参数2:new Student() { Age = 19 } 被解释为 SET age = @age
最终SQL语句为:
UPDATE t_student SET age = @age WHERE id LIKE '%test_update_list%';

删除
var result = database.Delete<Student>(x => x.Age > );

Delete 方法表示删除操作。最终被解释为 SQL 语句:
DELETE FROM t_student WHERE age > 0;

查询
var list = database.Query<Student>(x => x.Age ==  && x.Id.Contains("test_query_list")).ToList();

Query => ToList 方法表示查询操作。最终被解释为 SQL 语句:
SELECT id,name,age,school_id,birthday FROM t_student WHERE age = 19 AND id LIKE '%test_query_list%';

单实例查询
var student = database.Query<Student>(x => x.Age ==  && x.Id.Equals("test_query_single")).FirstOrDefault();

Query => ToList 方法表示查询操作:
当 Dialect 为 MySQL 时 最终被解释为 SQL 语句:
SELECT id,name,age,school_id,birthday FROM t_student WHERE age = 19 AND id = 'test_query_single' LIMIT 0,1;
当 Dialect 为 SQLServer 时 最终被解释为 SQL 语句:
SELECT TOP 1 id,name,age,school_id,birthday FROM t_student WHERE age = 19 AND id = 'test_query_single';

分页查询
var list = database.Query<Student>(x => x.Age ==  && x.Id.Contains("test_query_page_list")).ToList(, );

Query => ToList(2,10) 方法表示分页查询操作,pageIndex 为第几页,pageSize 为每页记录条数。
最终被解释为 SQL 语句:
SELECT id,name,age,school_id,birthday FROM t_student WHERE age = 19 AND id LIKE '%test_query_page_list%' LIMIT 10,10;

灵活条件查询
var list = database.Query<Student>(x => x.Age ==  && x.Id.Contains("test_query_page_list")).AddCondition(x => x.Name == "zhangsan").ToList(, );

AddCondition 方法可以对查询进行动态增加条件。
最终解释的 SQL 的 WHERE 部分会包含 AND name = 'zhangsan'

单实例插入十万次
var database = new Database(Dialect.MySQL, connnectionString);
database.Delete<Student>(x => x.Age >= );
var list = new List<Student>();
for (var i = ; i < ; i++)
{
list.Add(new Student()
{
Id = $"{i}",
Name = "zhangsan",
Age = ,
SchoolId = ""
});
} var stopwatch = new Stopwatch();
stopwatch.Start();
list.ForEach(x =>
{
var result = database.Insert<Student>(x);
});
stopwatch.Stop();
var elapsedMilliseconds = $"插入十万条次共耗时:{stopwatch.ElapsedMilliseconds}毫秒";

第一次测试 -> 插入十万条次共耗时: 111038 毫秒,平均单次插入耗时: 1.11038 毫秒
第二次测试 -> 插入十万条次共耗时: 109037 毫秒,平均单次插入耗时: 1.09037 毫秒

批量插入十万次
var database = new Database(Dialect.MySQL, connnectionString);
database.Delete<Student>(x => x.Age >= );
var list = new List<Student>();
for (var i = ; i < ; i++)
{
list.Add(new Student()
{
Id = $"{i}",
Name = "zhangsan",
Age = ,
SchoolId = ""
});
} var stopwatch = new Stopwatch();
stopwatch.Start();
var result = database.Insert<Student>(list);
stopwatch.Stop();
var elapsedMilliseconds = $"插入十万次共耗时:{stopwatch.ElapsedMilliseconds}毫秒";

第一次测试 -> 插入十万次共耗时: 11177 毫秒,平均单次查询耗时: 0.11177 毫秒
第二次测试 -> 插入十万条次共耗时: 10776 毫秒,平均单次查询耗时: 0.10776 毫秒

查询单实例十万次
var database = new Database(Dialect.MySQL, connnectionString);
database.Delete<Student>(x => x.Age >= );
var list = new List<Student>();
for (var i = ; i < ; i++)
{
list.Add(new Student()
{
Id = $"{i}",
Name = "zhangsan",
Age = ,
SchoolId = ""
});
} var stopwatch = new Stopwatch();
stopwatch.Start();
for (var i = ; i < ; i++)
{
var student = database.Query<Student>(x => x.Age == && x.Id.Equals($"{i}") && x.SchoolId.Equals("")).FirstOrDefault();
}
stopwatch.Stop();
var elapsedMilliseconds = $"查询十万次共耗时:{stopwatch.ElapsedMilliseconds}毫秒";

十万条数据时:
第一次测试 -> 查询十万条次共耗时: 877936‬ 毫秒,平均单次查询耗时: 8.77936 毫秒
第二次测试 -> 查询十万条次共耗时: 874122‬ 毫秒,平均单次查询耗时: 8.74122 毫秒

项目地址:https://github.com/hexu6788

如果你觉得本篇文章对您有帮助的话,感谢您的【推荐】。

如果你对 .NET 有兴趣的话可以关注我,我会定期的在博客分享我的学习心得。

本文地址:http://www.cnblogs.com/hexu6788/p/12435814.html

作者博客:何旭

欢迎转载,请在明显位置给出出处及链接

一个轻量级的基于 .NET Core 的 ORM 框架 HSQL的更多相关文章

  1. 基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)

    一.前言 至今为止编程开发已经11个年头,从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展,从无畏无知的懵懂少年,到现在的中年大叔,从中的酸甜苦辣也只有本人自知.随着 ...

  2. 基于.NET的微软ORM框架视频教程(Entity Framework技术)

    基于.NET的微软ORM框架视频教程(Entity Framework技术) 第一讲  ORM映射 第二讲 初识EntifyFramework框架 第三讲 LINQ表达式查询 第四讲 LINQ方法查询 ...

  3. 基于DotNet Core的RPC框架(一) DotBPE.RPC快速开始

    0x00 简介 DotBPE.RPC是一款基于dotnet core编写的RPC框架,而它的爸爸DotBPE,目标是实现一个开箱即用的微服务框架,但是它还差点意思,还仅仅在构思和尝试的阶段.但不管怎么 ...

  4. 基于.NET CORE微服务框架 -谈谈surging API网关

    1.前言 对于最近surging更新的API 网关大家也有所关注,也收到了不少反馈提出是否能介绍下Api网关,那么我们将在此篇文章中剥析下surging的Api 网关 开源地址:https://git ...

  5. 一个轻量级的基于RateLimiter的分布式限流实现

    上篇文章(限流算法与Guava RateLimiter解析)对常用的限流算法及Google Guava基于令牌桶算法的实现RateLimiter进行了介绍.RateLimiter通过线程锁控制同步,只 ...

  6. 基于.NET CORE微服务框架 -Api网关服务管理

    1.前言 经过10多天的努力,surging 网关已经有了大致的雏形,后面还会持续更新完善,请大家持续关注研发的动态 最近也更新了surging新的版本 更新内容: 1. 扩展Zookeeper封装2 ...

  7. 基于.NET CORE微服务框架 -谈谈surging的服务容错降级

    一.前言 对于不久开源的surging受到不少.net同学的青睐,也受到.net core学习小组的关注,邀请加入.NET China Foundation以方便国内.net core开源项目的推广, ...

  8. 基于.NET CORE微服务框架 -谈谈Cache中间件和缓存降级

    1.前言 surging受到不少.net同学的青睐,也提了不少问题,提的最多的是什么时候集成API 网关,在这里回答大家最近已经开始着手研发,应该在1,2个月内会有个初版API网关,其它像Token身 ...

  9. 基于.NET CORE微服务框架 -surging 基于messagepack、protobuffer、json.net 性能对比

    1.前言 surging内部使用的是高性能RPC远程服务调用,如果用json.net序列化肯定性能上达不到最优,所以后面扩展了protobuf,messagepack序列化组件,以支持RPC二进制传输 ...

随机推荐

  1. javaScript 面向对象 触发夫级构造函数

    class Person{ constructor(name,age){ //直接写属性 this.name=name; this.age=age; console.log('a'); } showN ...

  2. 34)PHP,PHP从数据库读取数据并在html中显示

    首先是我的数据库截图: 然后展示我的php文件: b.php文件: <?php $link= mysqli_connect('localhost','root','root'); // mysq ...

  3. rest framework-视图和路由-长期维护

    ###############   三种视图    ############### # 第一种方法:使用mixins # class AuthorView(mixins.ListModelMixin, ...

  4. 西甲官方APP承认监听球迷,或给国内应用带来新思路

    在此前,一般巨头或者官方推出的产品.应用等总是值得信赖的.出问题的话一般都是"不可抗拒的外力因素",比如被黑客攻破导致用户隐私被窃取等.但自从Facebook的用户隐私泄露丑闻被曝 ...

  5. JavaEE基础:过滤器、监听器、拦截器,应用...

    写在前面说起Java和C++,很容易想到让人疯狂的指针,Java使用了内存动态分配和垃圾回收技术,让我们从C++的各种指针问题中摆脱出来,更加专心于业务逻辑,不过如果我们需要深入了解java的JVM相 ...

  6. 01_JDK的下载-安装-配置

    下载 https://www.oracle.com/technetwork/java/javase/downloads/index.html 安装 1.安装路径不要有空格(去除安装路径中的Progra ...

  7. [LC] 169. Majority Element

    Given an array of size n, find the majority element. The majority element is the element that appear ...

  8. 关闭”xx程序已停止工作”提示窗口

    运行注册表编辑器,依次定位到HKEY_CURRENT_USER\Software\Microsoft\Windows\WindowsError Reporting,在右侧窗口中找到并双击打开Donts ...

  9. JavaScript学习总结(七)Ajax和Http状态字

    转自:http://segmentfault.com/a/1190000000691919 Ajax及其工作原理 AJAX 是一种与服务器交换数据无需刷新网页的技术,最早由Google公司在谷歌地图里 ...

  10. 精心收集的Hadoop学习资料

    1.<Hadoop技术内幕:深入解析Hadoop Common和HDFS>下载地址:http://download.csdn.net/detail/w397090770/6643259. ...