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 毫秒
项目地址:
如果你觉得本篇文章对您有帮助的话,感谢您的【推荐】。
如果你对 .net 有兴趣的话可以关注我,我会定期的在博客分享我的学习心得。
本文地址:
作者博客:
欢迎转载,请在明显位置给出出处及链接