# HiSql
**Repository Path**: dotnetlowcode/hisql
## Basic Information
- **Project Name**: HiSql
- **Description**: HiSql 新一代无实体ORM框架 为低代码而生的ORM框架,第一个支持sql语句跨数据平台的ORM框架,第一个支持HANA的ORM框架!
- **Primary Language**: C#
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://hisql.net
- **GVP Project**: No
## Statistics
- **Stars**: 63
- **Forks**: 27
- **Created**: 2021-11-11
- **Last Updated**: 2025-05-20
## Categories & Tags
**Categories**: database-dev
**Tags**: hisql, ORM, 低代码
## README
# HiSql
目前的ORM框架对是基于实体的,包发生变化或增加字段时比较麻烦,所以有了开发无体实ORM的想法,结合项目中对于数据库中操作的痛点通过HiSql来实现解决
支持常用的数据库且国内第一个支持Hana的ORM框架
### 特点
1. 支持无实体数据交互,(无需要创建实体类)
2. 数据动态检测(类型,长度 与表结构预先匹配)
3. 语法更帖近于原生SQL
4. 支持超时监控(如监控过5S的执行的SQL语 并记录)
5. 支持多种库,可自主选择需要支持的库
### 项目引用
注:也可以通过nuget安装
1. 引用HiSql.dll文件
2. 根据使用数据库的需要可以引用以下数据库实现的sdk
1. HiSql.sqlserver.dll
2. HiSql.hana.dll
3. HiSql.mysql.dll
4. HiSql.oracle.dll
5. HiSql.postgresql.dll
6. HiSql.dameng.dll `新支持1.0.4及以上支持`
7. HiSql.Sqlite.dll `新支持1.0.4.7以上支持`
### hisql官方群
为了更好的服务于真正使用hisql的用户, 进群的伙伴必须是在github或gitee 上star了hisql项目或进行过捐的伙伴的方能进群
### 初始安装
注:只需要执行一次即可
```c#
sqlclient.CodeFirst.InstallHisql();
```
目前流行的ORM框架如果需要动态的拼接查询语句,只能用原生的sql进行拼接,无法跨不同数据库执行。hisql推出新的语法一套语句可以在不同的数据库执行
传统ORM框架最大的弊端就是完全要依赖于实体用lambda表达式写查询语句,但最大的问题就是如果业务场景需要动态拼接条件时只能又切换到原生数据库的sql语句进行完成,如果自行拼接开发人员还要解决防注入的问题,hisql 刚才完美的解决这些问题,Hisql底层已经对sql注入进行了处理,开发人员只要关注于业务开发
### 2024.4.16 发布更新
1.修复SQlite 的已经BUG
### 2023.11.13 1.0.6.1 发布更新
1. 修复 模糊查询时%号占长度限制的问题
2. 修复获取视图表结构描述问题(如果该字图字段的描述有人为变更将以Hi_FieldModel中的描述为准)
### 2023.6.12 hisql语法优化
以下语句的的子语句的条件可以引用上层语句的字段
```c#
var _sql = sqlClient.HiSql("select a.tabname from Hi_TabModel as a where a.tabname in (select b.tabname from Hi_FieldModel as b where b.tabname = `a.tabname`)").ToSql();
```
### 2023.5.30 修复update 的bug
1. 1.0.5.9 发布
2. 修复在特定场景定update语句生成的Bug
### 2023.4.18 参数化优化
可以看以下demo
```c#
var _paramsql = sqlClient.HiSql(@"select * from Hi_FieldModel where tabname in (@TabName) and fieldname=@fieldname and tabname in (select tabname from hi_tabmodel where tabname in (@TabName) )", new { TabName = new List { "Hi_TestQuery", "Hi_FieldModel" }, FieldName = "DbServer" }).ToSql();
Console.WriteLine(_paramsql);
```
### 2023.04.11 更新
1. 修复第一次获取表信息在多线程下会报表错的总是
2. sqlserver的表结构信息字段为varchar|nvarchar|(max) 转到HANA及其它库抛出异常的问题
3. 针对于HANA库中表中的字段类型包括[TEXT]类型使用[sqlClient.Modi] 方法抛出错误提示(HANA中的临时表不支持text类型)
事务优化
如果业务中需要使用多表且多动作更新请参数以下定法
为了防止死锁请参照 `业务锁` 的处理方式
```c#
void transDemo(HiSqlClient sqlClient)
{
int count = 10;
string tabname = typeof(H_Test02).Name;
List