hisql 新功能 支持一套sql在不同数据库执行
2024-09-01 05:36:56
目前流行的ORM框架如果需要动态的拼接查询语句,只能用原生的sql进行拼接,无法跨不同数据库执行。hisql推出新的语法一套语句可以在不同的数据库执行
传统ORM框架最大的弊端就是完全要依赖于实体用lambda表达式写查询语句,但最大的问题就是如果业务场景需要动态拼接条件时只能又切换到原生数据库的sql语句进行完成,如果自行拼接开发人员还要解决防注入的问题,hisql 刚才完美的解决这些问题,Hisql底层已经对sql注入进行了处理,开发人员只要关注于业务开发
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 join
或join
left inner join
或 left 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();
最新文章
- XP系统电脑带安卓手机上网教程(无需adhoc补丁)
- node中的模块
- Eclipse反编译工具Jad及插件JadClipse配置(转)
- C++中指针和引用的选择
- 对JSON数组对象排序-有键相同的元素,分组数量不一致,可采用如下的JS进行循环表格输出
- listview的条目(item)如何做出卡片效果
- 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程
- Scala环境搭建之eclipse
- Ubuntu16.04部署phantomjs的一个问题
- 用xstart远程连接linux图形用户界面
- byte[] 解析、转码二三事
- MVC 设计模式概述
- Sql函数的三种写法
- python字典解析
- 强连通tarjan模版
- 代码规范审查 – Sonar分析项目
- Jenkins Pipeline shell脚本用svn_revision当做系统版本号
- Cannot forward after response has been committed 错误
- windows主机与virtualbox虚拟机下的Linux共享网络
- Asp.net Core学习文章
热门文章
- wsdl实例
- MyBatis(2):CRUD操作
- 解决 nginx: [error] invalid PID number ";"; in ";/usr/local/nginx/logs/nginx.pid";
- 【Linux】【Services】【Disks】zfs
- 【Java 基础】Arrays.asList、ArrayList的subList注意事项
- 使用Booststrap布局网页页面
- 【C#】【MySQL】C#连接MySQL数据库(一)代码
- 【JAVA今法修真】 第四章 redis特性 击穿雪崩!
- Excel如何使用vlookup
- CF975A Aramic script 题解