【Golang】GORM - GEN工具 快速開始

文章目錄

  • 建項目
  • 建庫建表
  • main.go
  • user.go
  • company.go
  • 生成效果
  • (更進一步)自定義dynamic SQL實踐

官方地址:https://gorm.io/zh_CN/gen/index.html

以mysql為例

建項目

go mod init 項目名稱
go mod tidy

建庫建表

建數據庫demo,正常排序和字符集utf8mb4即可

在數據庫內建表,可參考如下代碼:

CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),role VARCHAR(50),age INT
);CREATE TABLE companies (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100)
);

main.go

安裝gen

go get -u gorm.io/gen

前大半部分為官方快速入門的代碼,后嘗試創建用戶的部分可自行調整。

package mainimport ("context""gorm-gen-demo/model""gorm-gen-demo/query""gorm.io/driver/mysql""gorm.io/gen""gorm.io/gorm""log"
)// Dynamic SQL
type Querier interface {// SELECT * FROM @@table WHERE name = @name{{if role !=""}} AND role = @role{{end}}FilterWithNameAndRole(name, role string) ([]gen.T, error)
}func main() {dsn := "user:password@(127.0.0.1:3306)/demo?charset=utf8mb4&parseTime=True&loc=Local"    //替換成自己的,此句兩次執行代碼均保留// ------------------------------- 官方代碼gormdb, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})if err != nil {log.Fatalf("failed to connect database: %v", err)}g := gen.NewGenerator(gen.Config{OutPath: "query",Mode:    gen.WithoutContext | gen.WithDefaultQuery | gen.WithQueryInterface, // generate model})g.UseDB(gormdb) // reuse your gorm db// Generate basic type-safe DAO API for struct `model.User` following conventionsg.ApplyBasic(model.User{})// Generate Type Safe API with Dynamic SQL defined on Querier interface for `model.User` and `model.Company`g.ApplyInterface(func(Querier) {}, model.User{}, model.Company{})// Generate the codeg.Execute()// ------------------------------------上下兩段代碼可分兩次執行db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})query.SetDefault(db)user := model.User{Name: "Modi", Age: 18}u := query.Userctx := context.Background()err = u.WithContext(ctx).Create(&user)if err != nil {log.Fatalf("failed to create user: %v", err)}}

其中嘗試創建用戶部分,query.SetDefault(db)句不可少,否則會報錯panic: runtime error: invalid memory address or nil pointer dereference

接下來兩個文件都是在根目錄下的model文件夾下新建,定義數據庫表結構所用

user.go

package modeltype User struct {ID   intName stringRole stringAge  int
}

company.go

package modeltype Company struct {ID   intName string
}

生成效果

在這里插入圖片描述
在這里插入圖片描述

(更進一步)自定義dynamic SQL實踐

如果添加了自定義注解的sql查詢,需要先gen生成,然后再調用自定義的函數查詢!否則會報錯,說不認識自定義的這個函數unresovled

代碼:

// Dynamic SQL
type Querier interface {// SELECT * FROM @@table WHERE name = @name{{if role !=""}} AND role = @role{{end}}// FilterWithNameAndRole(name, role string) ([]gen.T, error)// 添加注解和函數注冊!!!//// SELECT * FROM @@table WHERE id=@idGetByID(id int) (gen.T, error) // returns struct and error
}// main中添加綁定!!!
g.ApplyInterface(func(Querier) {}, model.User{})   // 綁定的是User結構體,所以只會在user.gen.go里注冊和實現

寫好注解和函數,進行g.Execute(),可以在user.gen.go里看到如下已經被注冊的函數:

在這里插入圖片描述

進行調用查詢,添加代碼:

	res, err := query.User.WithContext(context.Background()).GetByID(1)if err != nil {fmt.Printf("GetByID failed , err:%v\n", err)return}fmt.Printf("GetByID result : %v", res)

查詢結果:

第一遍生成,第二遍才是在調用GetByID這個新自定義函數

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/89164.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89164.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89164.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

飛書 “打破” AI 與協同辦公的「黑箱」

文 | 智能相對論作者 | 陳泊丞在協同辦公領域,自從有了AI,微軟、釘釘、Google Workspace、Salesforce、企業微信、飛書等廠商都試圖通過深度整合AI技術,從智能會議、內容創作、數據管理等場景重構辦公范式。微軟通過Microsoft 365 Copilot將A…

leetcode:674. 最長連續遞增序列[動歸]

學習要點 練習動歸注意不要馬虎 題目鏈接 674. 最長連續遞增序列 - 力扣&#xff08;LeetCode&#xff09; 題目描述 解法&#xff1a;動歸 class Solution { public:int findLengthOfLCIS(vector<int>& nums) {int n nums.size();if(nums.size() < 1) …

【html常見頁面布局】

考拉商城界面效果htmlcss效果 html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</ti…

摩爾線程MUSA架構深度調優指南:從CUDA到MUSA的顯存訪問模式重構原則

點擊 “AladdinEdu&#xff0c;同學們用得起的【H卡】算力平臺”&#xff0c;H卡級別算力&#xff0c;按量計費&#xff0c;靈活彈性&#xff0c;頂級配置&#xff0c;學生專屬優惠。 當國產GPU面臨生態壁壘&#xff0c;顯存訪問效率成為性能突破的關鍵戰場。本文將深入揭示摩爾…

2025江蘇省信息安全管理與評估賽項二三階段任務書

任務 3 網絡安全事件響應、數字取證調查、網絡安全滲透任務3.1&#xff1a;網絡安全事件響應&#xff08;100分&#xff09;X集團的一臺存儲關鍵信息的服務器遭受到了黑客的攻擊&#xff0c;現在需要你對該服務器進行應急排查&#xff0c;該服務器的系統目錄被上傳惡意文件&…

核電概念盤中異動,中核科技漲停引領板塊熱度

今日股市交易時段&#xff0c;核電概念板塊表現活躍&#xff0c;中核科技強勢漲停&#xff0c;成為市場關注焦點&#xff0c;為核電產業鏈相關投資與發展增添新的動態信號。中核科技作為核電閥門等關鍵設備領域的重要企業&#xff0c;其漲停背后&#xff0c;是多重因素共同作用…

《Java語言程序設計》1.2.3復習題

縮寫"CPU"代表什么含義?測量CPU速度的單位是什么?中央處理器(Central Processing Unit,CPU)是計算機的大腦。它從內存中獲取指令并執行這些指令。CPU通常由兩部分組成&#xff1a;控制單元(control unit)和算術/邏輯單元(arithmetic/logic unit)。控制單元用于控制…

【迭代】繪本生成方案迭代2,解決錄音播放問題

代碼分享】AI輔助編程&#xff1a;動手制作繪本生成器&#xff0c;實現繪本自由 前面分享了生成繪本PDF的方案&#xff0c;只有圖片和文字。所以想加上文字的錄音播放。 經過一番探索&#xff0c;發現要實現這個功能的可行性高的方案是用戶點擊播放&#xff0c;需要跳轉到瀏覽…

C++設計模式之創建型模式

1.前言 設計模式一共有23種&#xff0c;主要分為三大類型&#xff1a;創建型&#xff0c;結構型&#xff0c;行為型。本篇文章著重講解的是創建型一些相關的設計模式 2.單例模式 Singleton 模式是設計模式中最為簡單、最為常見、最容易實現&#xff0c;也是最應該熟悉和掌握的…

kubernetes學習筆記(一)

kubernetes學習筆記(一) kubernetes簡介 ? Kubernetes是Google開源的一個容器編排引擎&#xff0c;它支持自動化部署、大規模可伸縮、應用容器化管理。在生產環境中部署一個應用程序時&#xff0c;通常要部署該應用的多個實例以便對應用請求進行負載均衡。 ? 在Kubernetes…

Eureka實戰

1.創建父工程SpringCloudTestSpringCloudTest為父工程&#xff0c;用于引入通用依賴&#xff0c;如spring-boot-starter-web、lombok&#xff0c;這樣子工程就可以直接繼承&#xff0c;無需重復引入。在dependencyManagement標簽中引入和springboot版本對應的springcloud&#…

如何把鏡頭對焦在超焦距上

要把鏡頭對焦在超焦距上&#xff0c;可以按照以下步驟操作&#xff1a;1. 計算超焦距 首先需要知道你的鏡頭參數和相機參數&#xff1a; 焦距 f&#xff08;如 24mm、35mm&#xff09;光圈 N&#xff08;如 f/8、f/11&#xff09;容許彌散圓直徑 c&#xff08;與傳感器尺寸有關…

idea docker插件連接docker失敗

報錯org.apache.hc.client5.http.HttpHostConnectException:Connect to http://localhost:2375 [localhost/127.0.0.1, localhost/0:0:0:o:0:0:0:1] failed:Connection refused:getsockopt解決方法&#xff1a;

【后端】.NET Core API框架搭建(6) --配置使用MongoDB

目錄 1.添加包 2. 連接配置 2.1.鏈接字符串 2.2.連接類 3.倉儲配置 3.1.倉儲實現 3.2.倉儲接口 4.獲取配置和注冊 4.1.添加配置獲取方法 4.2.注冊 5.常規使用案例 5.1實體 5.2.實現 5.3.接口 5.4.控制器 NET Core 應用程序中使用 MongoDB 有許多好處&#xff0c;尤其是在…

Spring AI快速入門

文章目錄1 介紹1_大模型對比2_開發框架對比2 快速入門1_引入依賴2 配置模型3 配置客戶端4 測試3 會話日志1_Advisor2 添加日志Advisor4 會話記憶1_定義會話存儲方式2 配置會話記憶Advisor5 會話歷史1_管理會話歷史2 保存會話id3 查詢會話歷史6 后續1 介紹 SpringAI整合了全球&…

Windows下編譯pthreads

本文記錄在Windows下編譯pthreads的流程。 零、環境 操作系統Windows 11VS Code1.92.1Git2.34.1MSYS2msys2-x86_64-20240507Visual StudioVisual Studio Community 2022CMake3.22.1 一、編譯安裝 1.1 下載 git clone https://git.code.sf.net/p/pthreads4w/code 1.2 構建…

WP Force SSL Pro – HTTPS SSL Redirect Boost Your Website‘s Trust in Minutes!

In the vast digital landscape where security and user trust are paramount, ensuring your WordPress site uses HTTPS is not just a recommendation—it’s a necessity. That’s where WP Force SSL Pro – HTTPS SSL Redirect steps in as your silent guardian, makin…

jvm--java代碼對照字節碼圖解

java代碼&#xff1a;無靜態方法&#xff1b;&#xff08;對應字節碼沒有方法&#xff09; 任何一個類&#xff0c;至少有一個構造器&#xff0c;默認是無參構造java代碼包含&#xff1a;靜態方法java代碼包含&#xff1a;靜態方法、顯示構造方法public class ClassInitTest {p…

動態規劃題解_打家劫舍【LeetCode】

198. 打家劫舍 你是一個專業的小偷&#xff0c;計劃偷竊沿街的房屋。每間房內都藏有一定的現金&#xff0c;影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統&#xff0c;如果兩間相鄰的房屋在同一晚上被小偷闖入&#xff0c;系統會自動報警。 給定一個代表每個…

電腦安裝 Win10 提示無法在當前分區上安裝Windows的解決辦法

原因&#xff1a; win10系統均添加快速啟動功能&#xff0c;預裝的win10電腦默認都是UEFI引導和GPT硬盤&#xff0c;傳統的引導方式為Legacy引導和MBR硬盤&#xff0c;UEFI必須跟GPT對應&#xff0c;同理Legacy必須跟MBR對應。如果BIOS開啟UEFI&#xff0c;而硬盤分區表格式為M…