源码地址: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
-
判断是否存在 如果存在则更新,不存在则插入
更新语句-注意:这里由于排除了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);
}
浙公网安备 33010602011771号