让EFCore更疯狂些的扩展类库(一):通过json文件配置sql语句

前言

EF通过linq和各种扩展方法,再加上实体模型,编写数据库的访问代码确实是优美、舒服,但是生成的sql不尽如意、性能低下,尤其是复杂些的逻辑关系,最终大家还是会回归自然,选择能够友好执行sql语句的ORM,认认真真的编写sql;问题是:EF是否也能够很友好的执行sql语句?EF提供直接执行sql语句的方法并不多,而且也是极其简单的是否容易进行扩展?答案是肯定的,在DbContext下提供了Database属性就是为了执行sql用的,然后自己就通过Database下的方法属性进行了扩展(不过最后为了各种数据库的兼容性,使用了DbContext的扩展方法GetService获取相应的服务进行sql语句的执行),完成这个扩展类库的编写

扩展类库大体功能简介:

1) sql语句执行器:用于直接执行sql语句

2) EF的查询缓存器IQueryable(linq) sql语句 的查询缓存,分为本地存储 或 非本地存储(Redis)

a) 缓存存储:永久缓存(不过期) 或者 过期缓存

b) 缓存清理

3) sql配置管理器(让EFCoreMyBatis配置sql,但是通过json配置):加载与管理配置文件中的sql语句

a) sql配置执行器:用于执行配置的sql语句

b) 策略管理器:用于管理策略 策略执行器(目前分为三种策略执行器)

i. 策略管理:管理各种策略类型,用于初始化配置文件中的策略配置转换成对象

ii. 策略执行器(一般通过策略对象进行相应的处理)

1. 初始化的策略执行器

a) 配置策略对象的初始化、替换表名合并分部sql等的策略执行器

2. sql执行前的策略执行器

a) foreach策略执行器:对SqlParameter或者某些数据类型(list/dictionary/model)进行遍历生成字串替换到sql

3. sql执行时的策略执行器

a) sql与参数的日志记录策略执行器

b) 查询缓存与清理策略执行器

4) 类库的扩展与优化(因为类库中的各种类是通过DI进行管理的,因此易于扩展与优化)

a) 将查询缓存存储到Redis

b) 策略与策略执行器的扩展

c) 其他:例如反射帮助类的优化(如果有更好的实现,因为类库内部有不少实现需要通过反射)

 

源码:

githubhttps://github.com/skigs/EFCoreExtend 

引用类库:

nugethttps://www.nuget.org/packages/EFCoreExtend/ 

PM> Install-Package EFCoreExtend

查询缓存引用Redis

PM> Install-Package EFCoreExtend.Redis

类库的使用说明会分几篇文章进行详细描述,也可参考源码(源码中也有使用测试),类库目前仅支持EFCore 1.1.0,兼容性:MSSqlServersqlitemysqlPostgreSql基本都兼容(EFCore兼容的应该都可以兼容),因为刚完成不久,可能还存在一些bug或不合理的地方,望大家谅解,也请告知。

 

通过json文件配置sql

Person.json配置文件内容:

{
  //"name" :  "Person", //设置表名,如果不指定name,那么默认文件名为表名
  //配置sql:key为Sql的名称(SqlName,获取配置sql执行器的时候需要根据key获取)
  "sqls": {
    "GetList": {
      //"sql": "select name,birthday,addrid from [Person] where name=@name or id=@id",
      "sql": "select name,birthday,addrid from ##tname where name=@name or id=@id", //##tname => 表名
      "type": "query"
    }
  }
}

表的实体模型:

1     [Table(nameof(Person))]
2     public class Person
3     {
4         public int id { get; set; }
5         public string name { get; set; }
6         [Column(TypeName = "datetime")]
7         public DateTime? birthday { get; set; }
8         public int? addrid { get; set; }
9     }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java 有很多知名的框架和类库,以下是其中一些比较常用的: 1. Spring Framework:一个开源的应用程序框架,用于Java平台的企业级应用程序开发。 2. Hibernate:一个流行的对象关系映射(ORM)框架,用于将Java应用程序中的对象映射到关系型数据库中的表。 3. Struts:一个基于MVC模式的Web应用程序框架,用于开发Java Web应用程序。 4. Log4j:一个用于记录日志的Java类库,支持多种日志级别和日志输出格式。 5. Apache Commons:一个由Apache提供的常用的Java类库集合,包括字符串操作、IO操作、集合操作等常用功能。 6. Gson:一个用于将Java对象序列化为JSON格式的类库,也支持将JSON反序列化为Java对象。 7. JUnit:一个流行的Java单元测试框架,用于编写和运行测试用例。 8. Apache Maven:一个开源的项目管理和构建工具,用于自动化构建、测试和部署Java应用程序。 ### 回答2: Java有很多知名的框架类库,以下是其中一些: 1. Spring框架:是最为广泛使用的Java开发框架之一,提供了全面的企业级应用开发解决方案,包括依赖注入、面向切面编程、容器管理、事务管理等功能。 2. Hibernate框架:是一个持久层框架,用于简化Java应用程序的数据库操作。它通过对象关系映射(ORM)提供了面向对象的数据访问接口,并支持多种数据库。 3. Spring Boot框架:是Spring框架的扩展,使得开发者能够快速地构建基于Spring的应用程序。它提供了自动化配置和约定优于配置的原则,使得开发者可以在几分钟内搭建起一个可运行的Spring应用。 4. MyBatis框架:是一款优秀的持久层框架,将SQL语句Java对象之间的映射工作简化。它提供了灵活的SQL编写方式,可以灵活地控制SQL语句的执行,适用于各种复杂的数据库操作需求。 5. Apache Struts框架:是一个用于构建基于Java的Web应用程序的开源框架。它采用了MVC(模型-视图-控制器)架构模式,提供了可重用的组件和处理器,使得开发者能够快速地搭建Web应用程序。 6. Apache Kafka:是一个分布式流数据平台,用于高效地处理大规模、实时的数据流。它支持高吞吐量、低延迟的消息传递,并能够处理多个消费者和生产者之间的数据传输。 除了以上的框架之外,还有许多其他知名的Java框架类库,如Apache Tomcat、Spring MVC、Junit、Log4j等,每个框架都有各自的特点和优势,开发者可以根据自己的需求选择适合的框架来进行开发。 ### 回答3: Java是一种常用的编程语言,有许多知名的框架和类库可以帮助开发人员高效地构建应用程序。以下是一些著名的Java框架和类库: 1. Spring框架:Spring是Java最流行的企业级应用程序开发框架之一。它提供了一个轻量级的容器,用来管理Java对象的创建、配置和管理。Spring还包含许多模块,如Spring MVC用于构建Web应用程序,Spring Data用于数据库访问,以及Spring Security用于身份验证和授权等。 2. Hibernate框架:Hibernate是一个Java持久化框架,用于将Java对象映射到关系数据库。它简化了数据库操作,通过自动生成SQL语句和执行数据库事务,使开发人员能够轻松地与数据库交互。 3. Apache Struts框架:Struts是一个用于构建基于MVC(Model-View-Controller)模式的Web应用程序的框架。它提供了一套标准的Action、Form和View组件,通过配置文件将它们与请求映射起来。Struts使开发人员能够好地组织和管理Web应用程序的代码。 4. Apache Tomcat服务器:Tomcat是一个开源的Java Servlet容器,用于运行Java Web应用程序。它提供了一个Web服务器环境,能够处理HTTP请求和响应,并支持Java Servlet和JavaServer Pages(JSP)等Java技术。 5. Apache Maven构建工具:Maven是一个Java项目管理和构建工具,用于自动化构建、依赖管理、测试和部署Java应用程序。它使用基于XML的配置文件来定义项目结构和构建过程,使开发人员能够方便地管理项目的生命周期。 6. Apache Log4j日志框架:Log4j是一个Java日志框架,用于记录应用程序的运行日志。它提供了灵活的配置选项,可以将日志输出到不同的目标(如控制台、文件数据库),并支持不同级别的日志记录。 这只是一小部分Java框架和类库的例子,Java生态系统中还有许多其他知名的框架和类库,用于不同的开发目的和场景。开发人员可以根据自己的需求选择合适的框架和类库来提高开发效率和应用程序性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值