• Dapper.Lite 扩展


    最近重构并精简了Dapper.Lite,然后把不依赖Dapper的版本LiteSql也重构了一下,和Dapper.Lite保持一致。感觉这两款ORM基本完工,自荐一下。

    Dapper.Lite是一款Dapper扩展,单表查询和SQL拼接查询条件支持Lambda表达式,旨在为大家提供一款简单易用、稳定可靠的ORM,支持Oracle、MSSQL、MySQL、PostgreSQL、SQLite、Access、ClickHouse等数据库。照着抄一份Provider改改,写100多行代码,就可以支持国产数据库或其它数据库。

    它的特色有:

    1. 单表查询支持Lambda
      就一个单表查询还写SQL有点麻烦,我也不想写,所以做了Lambda支持。
    List list = session.Queryable().Where(t => t.Id <= 20 && t.Remark.Contains("测试")).ToList();
    

    这次重构,连表查询、子查询等复杂功能都删除了,减少出bug的可能。

    1. 以SQL为主,无论何种数据库,都是下面的写法,这是最常用的用法
      前缀有的数据库是@符有的是:符,但ClickHouse数据库有点不一样,写起来麻烦一点,这里统一了。
      session的意思是一次数据库会话,主要是为了数据库事务,如果没有事务,可以直接db.Sql
    List list = session.Sql("select * from sys_user where id <= @Id and remark like @Remark", 20, "%测试%").ToList(); //参数按顺序来,一两个也不容易眼花
    

    List list = session.Sql("select * from sys_user where id <= @Id and remark like @Remark", new { Id = 20, Remark = "%345%" }).ToList(); //参数多的话就这么写吧
    

    接着拼接:

    .Append("and name like @Name", "%测试%"); 
    
    1. SQL拼接查询条件支持Lambda表达式
      既然写SQL了,那也无法使用强类型了,表名改了SQL要改。Where条件这样写比SQL方便一点点。有的orm在字符串中使用{nameof(xxx)},但有点丑,写起来也费事,字符串里都是大括号不好阅读。
    List kpTaskList = await session
        .Sql(@"
          select t.*, m.model_start as ModelStart, m.model_end as ModelEnd
          from kp_task t
          left join kp_model m on m.model_id=t.model_id")
        .Where(t => t.IsDel == 0)
        .Where(t => new int?[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }.Contains(t.OpeType))
        .Where(m => m.ModelStart <= DateTime.Now && DateTime.Now <= m.ModelEnd)
        .ToListAsync();
    

    Dapper.Lite的目标是简单易用,稳定可靠。

    Dapper没有扩展并不方便,支持Lambda表达式的扩展,有SqlSugar方便吗?没有,功能也没有SqlSugar全。不支持Lambda表达式的扩展,拼SQL也不方便。

    正经项目能用EF当然是EF,但如果你不想用EF,也不想用SqlSugar,或者你喜欢写SQL,打算用Dapper,不妨试试Dapper.Lite,直接NuGet下载安装,如果有问题,至少Dapper.Lite的源码是你能hold住的。

    源码地址

    https://gitee.com/s0611163/Dapper.Lite

    https://github.com/0611163/Dapper.Lite

  • 相关阅读:
    互联网Java工程师面试题·Java 并发编程篇·第七弹
    Redis的安装与基本使用
    代码随想录 | Day 57 - LeetCode 647. 回文子串、516. 最长回文子序列
    python使用pandas中的read_csv函数读取csv数据为dataframe、使用isnull函数查看数据中是否包含缺失值
    数字创新的风口:创业者如何在Web3时代抢占先机
    力扣1704
    shell 基础
    Linux三级等保基本设置
    网络工程实训&eNSP学习记录
    心电贴技术方案芯片LH001-91
  • 原文地址:https://www.cnblogs.com/s0611163/p/17807007.html