AgileRepository - 一个基于接口的Repository快速开发库

Posted 菜鸟耕地

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AgileRepository - 一个基于接口的Repository快速开发库相关的知识,希望对你有一定的参考价值。

AgileRepository

这是一个可以帮助你快速开发Repository的lib。有点像SpringData JPA根据方法名、注解来自动生成查询方法的功能。
对于一些简单的查询,只需要定义接口就行了,实现都不用。
Github: AgileRepository

依赖

AspectCore >= 0.2.4
Dapper >= 1.50.4
DapperExtensions >= 1.6.3
System.Threading.Tasks.Extensions >= 4.3.0

使用

public interface IUserRepository:IAgileRepository<Users>
{
    [QueryByMethodName]
    IEnumerable<Users> QueryByUserName(string userName);

}
var repository = AgileRepository.Proxy.SingletonInstance<IUserRepository>();
repository.QueryByUserName("admin"); 

配置

    AgileRepository.SetConfig(new AgileRepositoryConfig()
    {
            SqlMonitor = (sql, paramters ) =>
            {
                    Console.WriteLine(sql);
            },
            ConnectionName = "conn"
    });

示例

根据sql查询

    [QueryBySql("SELECT * FROM USERS")]
    IEnumerable<User> TestSql();

    [QueryBySql("SELECT * FROM USERS where [email protected]")]
    IEnumerable<User> TestSql1(string userName); 

根据方法名称查询

    [QueryByMethodName]
    IEnumerable<User> QueryByUserName(string userName);

    [QueryByMethodName]
    IEnumerable<User> QueryByUserNameAndId(string userName, string id);

    [QueryByMethodName]
    IEnumerable<User> QueryByCreaterIsNull();

    [QueryByMethodName]
    IEnumerable<User> QueryByCreaterIsNotNull(); 

查询所有

    [QueryAll]
    IEnumerable<User> QueryAll(); 

根据 sql Count

    [CountBySql("Select count(*) from users")]
    int TestCount();

    [CountBySql("Select count(*) from users where [email protected]")]
    int TestCount1(string userName); 

根据方法名Count

    [CountByMethodName]
    int CountByUserName(string userName);

    [CountByMethodName]
    int CountByIdAndUserName(string id, string userName);

Count所有

    [CountAll]
    int CountAll();

Insert

    [Insert]
    int Insert(User user);
    [Insert]
    int Insert(IEnumerable<User> users);

Update

    [Update]
    int Update(User user);

    [Update]
    int Update(IEnumerable<User> users);

    [Delete]
    int Delete(User user);

    [Delete]
    int Delete(IEnumerable<User> users);

    [DeleteByMethodName]
    int DeleteByUserName(string userName);

执行非查询sql

    [ExecuteBySql("Delete from [users] where id [email protected] ")]
    int Execute(string id);

支持的where关键字

Key Name Where
And QueryByUserNameAndId where [email protected] And [email protected]
Or QueryByUserNameOrId where [email protected] Or [email protected]
IsNull QueryByUserNameIsNull where UserName Is Null
IsNotNull QueryByUserNameIsNotNull where UserName Is Not Null
GreaterThen QueryByAgeGreaterThen where Age>@Age
GreaterEqual QueryByAgeGreaterEqual where Age>[email protected]
LessThen QueryByAgeLessThen where Age<@Age
LessEqual QueryByAgeLessEqual where Age<[email protected]
Not QueryByAgeNot where [email protected]
In QueryByUserNameIn where UserName in @UserName
NotIn QueryByUserNameNotIn where UserName Not in @UserName
Like QueryByUserNameLike where UserName Like @UserName
NotLike QueryByUserNameNotLike where UserName Not Like @UserName

以上是关于AgileRepository - 一个基于接口的Repository快速开发库的主要内容,如果未能解决你的问题,请参考以下文章

动态代理(基于接口)

如何请求一个需要登陆才能访问的接口(基于cookie)——apipost

我可以基于 TypeScript 中的另一个接口以某种方式定义接口中的索引名称吗?

(Laravel) 接口的动态依赖注入,基于用户输入

dapi 基于Django的轻量级接口测试平台三 关联

基于双向责任链的接口设计