網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
一、引言
做.Net這么多年,出現(xiàn)了很多很多ORM框架,比如Dapper,Sqlsugar,Freesql等等。在之前的項(xiàng)目中,用到的ORM框架也大多數(shù)是這幾個(gè)老牌的框架。
不過(guò)最近園子關(guān)于.NET ORM HiSql的討論挺多的,本系列將通過(guò)不斷學(xué)習(xí) HiSql官網(wǎng)教程,嘗試將之前使用SqlSuger ORM的一個(gè)項(xiàng)目,使用HiSql框架實(shí)現(xiàn)相關(guān)功能,看看hisql能帶給我們哪些驚喜。
HiSql GitGub地址
HiSql官網(wǎng)教程
項(xiàng)目介紹:項(xiàng)目是一個(gè)通用的后臺(tái)管理系統(tǒng),包含菜單管理、權(quán)限管理、組織架構(gòu)、用戶(hù)管理等等。
數(shù)據(jù)庫(kù)采用SqlServer 2016;前端使用Element-UI;后端采用.Net5 Web Api。
二、集成HiSql到項(xiàng)目
1、安裝 HiSql 核心包、 HiSql.SqlServer。
2、在項(xiàng)目中新建類(lèi)文件 HiSqlSetupExtension.cs, 用于注入數(shù)據(jù)庫(kù)配置,hisql數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)對(duì)象。
using HiSql;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;
namespace H.CRM.Action.API.Helper
{
public static class HiSqlSetupExtension
{
public static IServiceCollection AddHiSqlSetup(this IServiceCollection services)
{
//注入HiSqlConfig
services.AddTransient<HiSqlConfig>();
//注入HiSqlClient
services.AddTransient<HiSqlClient>((d) =>
{
var config = d.GetService<HiSqlConfig>();
var hisql = new HiSqlClient(config);
return hisql;
});
return services;
}
}
class HiSqlConfig : ConnectionConfig
{
static readonly NLog.Logger logger = NLog.LogManager.GetLogger("HiSqlSetup");
public HiSqlConfig(IConfiguration configuration)
{
DbType = DBType.SqlServer;
DbServer = "HISQL";
ConnectionString = configuration.GetSection("ConnectionStrings:Admin").Value;
Schema = "dbo";
SqlExecTimeOut = 1000 * 5;
AppEvents = new AopEvent()
{
OnDbDecryptEvent = (connstr) =>
{
//解密連接字段
return connstr;
},
OnLogSqlExecuting = (sql, param) =>
{
//sql執(zhí)行前 日志記錄 (異步)
#if DEBUG
logger.Trace($"執(zhí)行前sql:{sql} time:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ffff")}");
#endif
},
OnLogSqlExecuted = (sql, param) =>
{
#if DEBUG
//sql執(zhí)行后 日志記錄 (異步)
logger.Trace($"執(zhí)行后sql:{sql} time:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ffff")}");
#endif
},
OnSqlError = (sqlEx) =>
{
//sql執(zhí)行錯(cuò)誤后 日志記錄 (異步)
logger.Error($"執(zhí)行錯(cuò)誤:{sqlEx.Message} sql:{sqlEx.Sql} time:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ffff")}");
},
OnTimeOut = (int timer) =>
{
//logger.Trace($"執(zhí)行超時(shí):{timer} time:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ffff")}");
}
};
}
}
}
3、在 Startup 中的ConfigureServices方法中,添加 hisql的使用。
//注入Hisql相關(guān)
services.AddHiSqlSetup();
4、新建 控制器 HiSqlController,添加初始化方法。
using Microsoft.AspNetCore.Mvc;
using HiSql;
using System.Linq;
namespace HSMB.Admin.WebApi.Controllers
{
[Route("api/[controller]/[action]")]
[ApiController]
public class HiSqlController : ControllerBase
{
private readonly HiSqlClient sqlClient;
public HiSqlController(
HiSqlClient hiSqlClient
)
{
this.sqlClient = hiSqlClient;
}
[HttpGet, HttpPost]
public IActionResult Install()
{
sqlClient.CodeFirst.InstallHisql();
var tables = sqlClient.DbFirst.GetTables().ToList().Where(t=>t.TabName.StartsWith("H"));
return new JsonResult(tables);
}
}
}
5、啟動(dòng)項(xiàng)目后,訪(fǎng)問(wèn) 項(xiàng)目地址 http://localhost:8868/api/hisql/Install 初始化hisql。
如圖表示初始化成功,同時(shí)在數(shù)據(jù)庫(kù)也可以看到,系統(tǒng)創(chuàng)建了下圖的4個(gè)基礎(chǔ)表:
- 1.Hi_TabModel #表結(jié)構(gòu)信息主表
- 2.Hi_FieldModel #表結(jié)構(gòu)信息明細(xì)表
- 3.Hi_Domain #數(shù)據(jù)域
- 4.Hi_DataElement #數(shù)據(jù)元素
到此,項(xiàng)目就完成了HiSql的引入了,后面就可以愉快的使用HiSql各個(gè)功能。
原文鏈接:https://www.cnblogs.com/pengxianyuan/p/16427131.html
相關(guān)推薦
- 2022-07-22 vi編輯器設(shè)置自定義快捷鍵自動(dòng)生成c語(yǔ)言的main函數(shù)
- 2022-10-26 Anaconda環(huán)境變量的配置圖文詳解_python
- 2022-06-21 Android基于Sqlite實(shí)現(xiàn)注冊(cè)和登錄功能_Android
- 2022-06-08 HDFS免重啟掛載新磁盤(pán)_服務(wù)器其它
- 2022-08-20 swift?framework使用OC?代碼兩種方式示例_Swift
- 2022-05-24 python中的元組與列表及元組的更改_python
- 2023-01-28 Python進(jìn)程間通訊與進(jìn)程池超詳細(xì)講解_python
- 2023-07-26 TypeScript中的keyof、typeof、索引訪(fǎng)問(wèn)類(lèi)型、條件類(lèi)型
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支