Skip to content

hexu6788/HSQL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

95 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

欢迎使用 ORM框架 HSQL

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

markdown

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

安装方法

MySQL

Install-Package HSQL.MySQL -Version 1.0.0.16

MSSQLServer

Install-Package HSQL.MSSQLServer -Version 1.0.0.16

使用方法

创建映射模型:

[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

创建数据库操作实例:

参数方式创建,可设置连接池,默认开启连接池,连接池默认数量为3

IDbContext dbContext = new DbContext("127.0.0.1", "test", "root", "123456");

新增:

var result = dbContext.Insert(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 result = dbContext.Update(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 = dbContext.Delete<Student>(x => x.Age > 0);

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

查询:

var list = dbContext.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 = dbContext.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 WITH(NOLOCK) WHERE age = 19 AND id = 'test_query_single';

分页查询:

var list = dbContext.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 = dbContext.Query<Student>(x => x.Age == 19 
&& x.Id.Contains("test_query_page_list"))
.ConditionAnd(x => x.Name == "zhangsan")
.ToList(2, 10);

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

SQL语句方式查询:

var list = dbContext.Query("SELECT t.id,t.name,s.id AS school_id 
FROM t_student AS t 
LEFT JOIN t_school AS s ON t.school_id = s.id 
WHERE t.id = @id AND t.age > @age;", 
new
{
    id = "test_query_list",
    age = 1
});

SQL语句方式查询,如有查询SQL有参数,则需使用参数化查询才能防止SQL注入攻击

事务:

var stu1 = new Student()
{
    Id = "1",
    Name = "zhangsan",
    Age = 18,
    SchoolId = "123"
};
dbContext.Transaction(() => 
{
    var result1 = dbContext.Insert(stu1);
    var result2 = dbContext.Update(x=> x.Id == "2", new Student()
    {
        Name = "zhangsan",
        Age = 18,
        SchoolId = "123"
    });
});

Transaction 方法可以进行事务操作,当方法中 throw 任意异常,事务将回滚。否则当方法执行完后事务会提交

About

HSQL 是一种轻量级的基于 .NET 的ORM框架

Resources

License

Stars

Watchers

Forks

Languages