目前流行的ORM框架如果需要动态的拼接查询语句,只能用原生的sql进行拼接,无法跨不同数据库执行。hisql推出新的语法一套语句可以在不同的数据库执行

传统ORM框架最大的弊端就是完全要依赖于实体用lambda表达式写查询语句,但最大的问题就是如果业务场景需要动态拼接条件时只能又切换到原生数据库的sql语句进行完成,如果自行拼接开发人员还要解决防注入的问题,hisql 刚才完美的解决这些问题,Hisql底层已经对sql注入进行了处理,开发人员只要关注于业务开发

hisql github源码下载

git clone https://github.com/tansar/HiSql.git

HiSql不仅仅是一个ORM框架而且是一个HiSql SQL语句 如下所示

    string sql = sqlClient.HiSql($"select * from Hi_FieldModel  where (tabname = 'h_test') and  FieldType in (11,21,31) and tabname in (select tabname from Hi_TabModel)").ToSql();

以上语法是不是与sqlserver 和sql语句有点类似?是的 但他可不是原生的sql,现在统一命名为hisql ,这个语法可以在hisql 支持的任意库中运行

hisql 支持 常规sql基本join操作

inner joinjoin

left inner joinleft join

outer join

也支持 子查询 in (select ....)

hisql inner join 示例

    string sql = sqlClient.HiSql($"select b.tabname, a.fieldname,a.IsPrimary from  Hi_FieldModel as a  inner join   Hi_TabModel as  b on a.tabname = b.tabname" ).ToSql();

以上示例的hisql代码编译后成的sqlserver的原生sql如下

select [b].[tabname],[a].[fieldname],[a].[IsPrimary] from [Hi_FieldModel] as [a]
inner join [Hi_TabModel] as [b] on [a].[tabname]=[a].[tabname]

在生成的mysql 原生sql如下

select `b`.`tabname`,`a`.`fieldname`,`a`.`IsPrimary` from `Hi_FieldModel` as `a`
inner join `Hi_TabModel` as `b` on `a`.`tabname`=`a`.`tabname`

也可以多表Join

string sql = sqlClient.HiSql($"select b.tabname, a.fieldname,a.IsPrimary from  Hi_FieldModel as a  inner join   Hi_TabModel as  b on a.tabname = b.tabname" +
$" inner join Hi_TabModel as c on a.tabname = c.tabname ").ToSql();

注意如果出现语法错误将会抛出异常并提示HiSql语法检测错误:xxxxx 根据这个错误提示可自行定位问题

hisql 语句实现分页

示例代码如下

int total = 0;
var table = sqlClient.HiSql($"select fieldlen,isprimary from Hi_FieldModel order by fieldlen ")
.Take(3).Skip(2)
.ToTable(ref total);

注意:分页查询时一定有一个order by 语句,并可以返回当前条件的数据总记录数total

hisql 语句实现 in查询 及select in 查询

    string sql = sqlClient.HiSql($"select * from Hi_FieldModel  where (tabname = 'Hi_FieldModel') and  FieldType in (11,21,31) and tabname in (select tabname from Hi_TabModel) order by tabname asc")
.Take(2).Skip(2)
.ToSql();

hisql 语句实现 group by 查询

string sql = sqlClient.HiSql($"select FieldName,FieldType from Hi_FieldModel  group by FieldName,FieldType ")
.Take(2).Skip(2)
.ToSql();

hisql 新功能 支持一套sql在不同数据库执行的更多相关文章

  1. laxcus的新功能:支持表跨数据库操作

    关系数据库的层次结构,是账号.数据库.表,一个账号下可以有多个数据库,每个数据库有多个表,但是不同数据库下的表是不能够互相操作的.例如:"select a.*, b.* from Title ...

  2. Apache Flink 1.9.0版本新功能介绍

    摘要:Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,它能够基于同一个Flink运行时,提供支持流处理和批处理两种类型应用的功能.目前,Apache Flink 1.9 ...

  3. sqlserver2016新功能

    SQL Server 2016中的新功能(数据库引擎) 2017年1月13日  23分钟阅读时长 作者 本人建了个领优惠卷购物群,平时网购可以省点钱.有需要的加群:511169656交流,谢谢 本主题 ...

  4. 05-TypeScript中的方法新功能(下)

    再TypeScript中,方法还有一些新功能能够让我们更好的控制方法执行. 1.Generator方法: yield关键字用于控制方法在执行的时候暂停住,后续方法调用方又可以从暂停的地方继续执行,这种 ...

  5. SQL*Plus 与数据库的交互(SQL*Plus时什么)

    Oracle 的 SQL*Plus 是与数据库进行交互的客户端工具,在 SQL*Plus中,可以运行 SQL*Plus 命令与 SQL*Plus 语句.   SQL*Plus 时一个基于 C/S 两层 ...

  6. SQL Server2016 新功能实时查询统计信息

    SQL Server2016 新功能实时查询统计信息 很多时候有这样的场景,开发抱怨DBA没有调优好数据库,DBA抱怨开发写的程序代码差,因此,DBA和开发都成为了死对头,无法真正排查问题. DBA只 ...

  7. SQL Server On Linux:基于实际项目案例,总结功能支持情况及相关问题解决方案,讲如何快速完成迁移

    上个月,有个朋友问我说Sql Sever向Mysql迁移有什么好的经验分享,他们公司客户明确提出不再提供Windows服务器,现在计划Mysql迁移.我说Mysql迁移成本太高了,不妨可以了解一下SQ ...

  8. Tapdata Cloud 版本上新!率先支持数据校验、类型映射等6大新功能

    Tapdata Cloud cloud.tapdata.net Tapdata Cloud 是国内首家异构数据库实时同步云平台,目前支持 Oracle.MySQL.PG.SQL Server.Mong ...

  9. Sql Server 2016新功能之 Row-Level Security

    Sql Server 2016 有一个新功能叫 Row-Level Security ,大概意思是行版本的安全策略(原来我是个英语渣_(:з」∠)_) 直接上例子.这个功能相当通过对表添加一个函数作为 ...

随机推荐

  1. 侵入式&非侵入式

    侵入式设计 引入了框架,对现有的类的结构有影响:即需要实现或继承某些特定类. 例如:Struts框架 非侵入式设计 引入了框架,对现有的类结构没有影响. 例如:Hibernate框架 / Spring ...

  2. 【C/C++】最长无重复子数组

    题目描述 给定一个数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同. 子数组是连续的,比如[1,2,3,4,5]的子数组有[1,2],[2,3,4]等等,但是[1,3, ...

  3. SharedWorker实现多标签页联动计时器

    web workers对于每个前端开发者并不陌生,在mdn中的定义:Web Worker为Web内容在后台线程中运行脚本提供了一种简单的方法.线程可以执行任务而不干扰用户界面.此外,他们可以使用XML ...

  4. CPU进程优先级

    目录 一.简介 二.NICE值 三.优先级 四.实时进程 一.简介 进程优先级起作用的方式从发明以来基本没有什么变化,无论是只有一个cpu的时代,还是多核cpu时代,都是通过控制进程占用cpu时间的长 ...

  5. [IDEA] chapter_reader - idea看小说插件 idea阅读插件 idea摸鱼插件

    目录 1. 简述: 2. 使用说明: 2.1 版本说明: 2.2 重要说明: 2.3 简单使用方法: 2.4 目前支持的网站有 (新↓): 2.5 菜单介绍: 2.6 快捷键设置及推荐: 2.7 在线 ...

  6. 原来这才是 Socket !

    关于对 Socket 的认识,大致分为下面几个主题,Socket 是什么,Socket 是如何创建的,Socket 是如何连接并收发数据的,Socket 套接字的删除等. Socket 是什么以及创建 ...

  7. java JDK8 时间处理

    目录 时间格式化 LocalDate:年月日 LocalTime:时分秒毫秒 LocalDateTime:年月日时分秒 Instant:纳秒时间戳 Duration:两时间间隔 Duration:处理 ...

  8. CVE 2021-44228 Log4j-2命令执行复现及分析

    12月11日:Apache Log4j2官方发布了2.15.0 版本,以修复CVE-2021-44228.虽然 2.15.0 版本解决了Message Lookups功能和JNDI 访问方式的问题,但 ...

  9. LuoguP6850 NOI 题解

    Content 小 L 参加了 \(\texttt{NOI}\),现在他告诉你九个数 \(a,b,c,d,e,f,g,h,i\),分别表示--笔试作对的题数.D1T1.D1T2.D1T3.D2T1.D ...

  10. CF1560D Make a Power of Two 题解

    Content 给定一个整数 \(n\).每次操作你可以做两件事情中的一件: 删去这个数中的一个数位(如果这个数只剩下一位,则可以把它删空). 在这个数的右边添加一个数位. 你可以以任意顺序执行无限次 ...