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 = 18, SchoolId = "123" });
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 = 0; i < 1000; i++) { list.Add(new Student() { Id = $"{i}", Name = "zhangsan", Age = 18, SchoolId = "123" }); } 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 = 19 });
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 > 0);
Delete 方法表示洗掉操作,最終被解釋為 SQL 陳述句:
DELETE FROM t_student WHERE age > 0;
查詢
var list = database.Query<Student>(x => x.Age == 19 && 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 == 19 && 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 == 19 && x.Id.Contains("test_query_page_list")).ToList(2, 10);
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 == 19 && x.Id.Contains("test_query_page_list")).AddCondition(x => x.Name == "zhangsan").ToList(2, 10);
AddCondition 方法可以對查詢進行動態增加條件,
最終解釋的 SQL 的 WHERE 部分會包含 AND name = 'zhangsan'
單實體插入十萬次
var database = new Database(Dialect.MySQL, connnectionString); database.Delete<Student>(x => x.Age >= 0); var list = new List<Student>(); for (var i = 0; i < 100000; i++) { list.Add(new Student() { Id = $"{i}", Name = "zhangsan", Age = 18, SchoolId = "123" }); } 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 >= 0); var list = new List<Student>(); for (var i = 0; i < 100000; i++) { list.Add(new Student() { Id = $"{i}", Name = "zhangsan", Age = 18, SchoolId = "123" }); } 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 >= 0); var list = new List<Student>(); for (var i = 0; i < 100000; i++) { list.Add(new Student() { Id = $"{i}", Name = "zhangsan", Age = 18, SchoolId = "123" }); } var stopwatch = new Stopwatch(); stopwatch.Start(); for (var i = 0; i < 100000; i++) { var student = database.Query<Student>(x => x.Age == 18 && x.Id.Equals($"{i}") && x.SchoolId.Equals("123")).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
作者博客:何旭
歡迎轉載,請在明顯位置給出出處及鏈接
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/71854.html
標籤:其他
