dapper-net

 

源码地址:dapper-net: dapper-net

dapper-net

介绍

dapper-net是一款简单的orm框架。

使用说明

模型初始化

属性解析
类属性

TenantAttribute 数据库名初始化

TableAttribute 表名初始化

列属性

ColumnAttribute 列名初始化

说明:映射数据库的列名

IgnoreSelectAttribute 忽略查询属性

IgnoreInsertAttribute 忽略插入属性

IgnoreUpdateAttribute 忽略更新属性

NotMappedAttribute 不属于实体类属性

CodeAttribute code属性

说明:当这个列插入的时候为空的时候会自动生成guiid填充,需要列的属性类型为字符串类型

KeyAttribute 主键属性

Demo

[Tenant("config")]
[Table("test")]
public class Test : IEntity
{
    [Key]
    [Column("id")]
    public int Id { get; set; }

    [Column("test_name")]
    public string TestName { get; set; }

    //[IgnoreInsert]
    [IgnoreSelect]
    public int Sort { get; set; }

}

使用步骤

1.安装Asion.Dapper

2.定义模型

[Tenant("config")]
[Table("test")]
public class Test : IEntity
{
    [Key]
    [Column("id")]
    public int Id { get; set; }

    [Column("test_name")]
    public string TestName { get; set; }

    //[IgnoreInsert]
    [IgnoreSelect]
    public int Sort { get; set; }

}

3.初始化数据库

单连接简单模式

DapperConfiguration.SetScanName("Asion");
DapperConfiguration.ConfigurationConnection("server=localhost;database=test;user=root;password=123456", DatabaseType.MySQL);

依赖注入(完善中)

builder.Services.AddDatabaseAccessor();

4.调用

ICrudRepository<Test> repository = new SimpleCrudRepository<Test>();
repository.Insert(new Test() { TestName = "test" });

增删改查示例

插入

单个插入
    public void Insert()
    {

        var res = repository.Insert(new Test()
        {
            Id = 1,
            TestName = "test",
            Sort = 1

        });
        Assert.Pass();
    }
批量插入
    public void BatchInsert()
    {
        var insert = new List<Test>();
        insert.Add(new Test()
        {
            TestName = "batchTest"
        });

        insert.Add(new Test()
        {

            TestName = "batchTest"
        });
        //排除columns 列
        var excludeColumns = new List<string>() { "Sort" };

        //singleBatchCount 单次批量插入数量
        //delayDefaultSleepMillSeconds 默认延迟毫秒
        //delayMaxCount 最大延迟数量
        //delayOverCountSleepMillSeconds 超过了最大延迟的数量时增加延迟毫秒
        var res = repository.BatchInsert(insert,excludeColumns,singleBatchCount:500,delayMaxCount:500,delayDefaultSleepMillSeconds:1000,delayOverCountSleepMillSeconds:2000);
        Assert.Pass();
    }

删除

简单删除
    public void SimpleDelete()
    {
         //sql id=1 and name='test'
        var dic = new Dictionary<string, string>();
        dic.Add("Id", "1");
        dic.Add("Name", "test");
        var res = repository.Delete(dic.ToEqualsWhere());
        Assert.Pass();
    }
复杂条件删除
    public void CompleyDelete()
    {
        var where = new ComplexWhere();
        //sql id=1
        where.Eq("id", 1);
        // sql id>10
        where.Gt("id", 10);
        // sql id<10
        where.Lt("id", 10);
        // sql id!=10
        where.NotEq("id", 10);
        // sql id!=10
        where.NotEq("id", 10);
        // sql id in (10,20)
        where.In("id", new int[] { 10, 20 });
        //sql id LIKE CONCAT('%',test,'%') 
        where.Like("test_name", "test");

        //另外一种写法,都是可以的
        //sql id=1 and name='test'
        where.Eq("id", 1).Eq("Name", "test");
        var res = repository.Delete(where);
        Assert.Pass();
    }

更新

简单实体更新
    public void Update()
    {
        //条件
        var update = new UpdateWhere(new string[] { "Id","Sort" });
        //实体及读取数据
        var res = repository.Update(new Test()
        {
            TestName = "updaeTest",
            Id = 1,
            Sort=0

        }, update);
        // sql: update test set TestName='updaeTest' where Id=1 and sort=0
        Assert.Pass();
    }
更新指定列
    public void UpdateByColumn()
    {
        var where = new Dictionary<string, string>();
        where.Add("Id", "1");
        var column = new Dictionary<string, string>();
        column.Add("test_name", "1");
        //sql: update test set TestName='updaeTest' where Id=1
        var res = repository.Update(column.ToSimpleUpdateColumn(), where.ToEqualsWhere());
        Assert.Pass();
    }

查询

单个查询

查询都是建议指定列的,不建议使用*

    public void Get()
    {
        var dic = new Dictionary<string, string>();
        dic.Add("Id", "1");
        //sql: select id,test_name from test where id=1
        var res = repository.Get(new SelectColumn(new string[] { "id","test_name"}),dic.ToEqualsWhere());
        Assert.Pass();

    }
查询多条
    public void GetList()
    {
        var dic = new Dictionary<string, string>();
        dic.Add("Id", "1");
        //sql: select test_name from test where id=1
        var res = repository.GetList(new SelectColumn(new string[] { "TestName" }),dic.ToEqualsWhere());
        Assert.Pass();
    }

查询前多少条

    public void GetTopList()
    {
        var dic = new Dictionary<string, string>();
        dic.Add("Id", "1");
        //sql: select test_name from test where id=1 limit 10
        var res = repository.GetTopList(10,new SelectColumn(new string[] { "TestName" }),dic.ToEqualsWhere());
        Assert.Pass();
    }
分页查询
    public void GetListPage()
    {
        ComplexWhere simpleWhere = new ComplexWhere();
        simpleWhere.Gt("sort", 0);
        // 排除某个字段
        AllSelectColumn allSelectColumnCondition = new AllSelectColumn(new string[] { "Sort" });

        ///根据某个字段排序
        var orderBy = new OrderBy("sort", OrderByConditionType.Desc);
        //sql :SELECT `id` as Id,`test_name` as TestName FROM test  WHERE  `sort` > 0    order by sort desc LIMIT 0,10;
        //     SELECT COUNT(1)  FROM `test`   WHERE  `sort` > 0 
        var categorys = repository.GetPageList(allSelectColumnCondition, simpleWhere, pageNumber: 1, rowsPerPage: 10, order: orderBy);
        Assert.Pass();
    }
获取总数
    public void GetRecordCount()
    {
        ComplexWhere simpleWhere = new ComplexWhere();
        simpleWhere.Gt("sort", 0);
       
        //sql : SELECT COUNT(1)  FROM `test`   WHERE  `sort` > 0 
        var reponse = repository.RecordCount(simpleWhere);
        Assert.Pass();
    }

其他

单个保存
save 逻辑步骤

1.会按照条件查询是否存在对应的数据

 select test_name from test where id=1
  1. 判断是否存在 如果存在则更新,不存在则插入

    更新语句-注意:这里由于排除了sort 所以就没有sort了更新

        update test set test_name='test' where id=1 

    插入语句

        insert into test (id,test_name) values (1,'test')
demo
    public void Save()
    {
        var entity = new Test()
        {
            Id = 1,
            TestName = "test"
        };

        var saveRequest = new SaveExcludeRequest();
        saveRequest.UpdateExclude.Add("sort"); //更新排除sort
        // save 逻辑步骤
        // 1.会按照条件查询是否存在对应的数据
        //  select test_name from test where id=1
        // 2. 判断是否存在 如果存在则更新,不存在则插入
        //  更新语句: update test set test_name='test' where id=1 
        //         注意:这里由于排除了sort 所以就没有sort了更新
        //  插入语句: insert into test (id,test_name) values (1,'test')
        repository.Save(entity, new UpdateWhere(new string[] { "id" }), saveRequest);

    }
批量保存

和单个保存逻辑类似,只是改成了批量

 

    public void BatchSave()
    {
        var entitys = new List<Test>();
        entitys.Add(new Test()
        {
            Id = 1,
            TestName = "batchTest"
        });

        entitys.Add(new Test()
        {
            Id=2,
            TestName = "batchTest"
        });
        var where = new ComplexWhere();
        where.Gt("sort", 0);

        BatchSaveRequest<Test> request = new BatchSaveRequest<Test>();
        request.Entity = entitys; // 要保存的实体
        request.UpdateWhere = where;
        request.UpdateColmunsWhere = "id";
        request.UpdateColmuns = new List<string>() { "test_name" };
        repository.BatchSave(request);
    }

posted on 2025-04-25 11:55  ausions  阅读(31)  评论(0)    收藏  举报