網(wǎng)站首頁 編程語言 正文
gorm是目前用得最多的go語言orm庫,但是目前gorm官方并不支持oracle的驅(qū)動,需要用到第三驅(qū)動,最近有個項目要往oracle寫數(shù)據(jù),記錄一下踩到的坑
下載依賴
go get github.com/cengsin/oracle
這個驅(qū)動與最新的gorm庫不匹配,要將gorm降級到1.21版本,不然會出現(xiàn)“......github.com/cengsin/oracle@v1.0.0/oracle.go:53:59: unknown field 'WithReturning' in struct literal of type callbacks.Config” 錯誤
項目結(jié)構(gòu)
包含main.go和一個model目錄。
|——oracle_test
| |——model
| |——model.go
| |——main.go
| |——go.mod
編輯go.mod將gorm降級
module oracle_test go 1.16 require ( github.com/cengsin/oracle v1.0.0 gorm.io/gorm v1.21.16 )
運(yùn)行g(shù)o mod tidy命令生效
定義model類型
假設(shè)數(shù)據(jù)庫里有張商店信息的表shops,包含ID和店名兩個字段,編寫如下model.go文件。其中結(jié)構(gòu)體方法TableName指定改類型對應(yīng)的數(shù)據(jù)表。
package model type ShopInfo struct { ShopId string `gorm:"column:SHOPID;not null"` ShopName string `gorm:"column:SHOPNAME;not null"` } func (s *ShopInfo) TableName() string { return "shops" }
連接數(shù)據(jù)庫?
連接名"database/password@127.0.0.1:1521/XE"中database是數(shù)據(jù)庫名,password是密碼,XE是服務(wù)名。LogLevel為logger.Warn會打印大多數(shù)sql語句,設(shè)為logger.Error只會打印運(yùn)行出錯的sql語句。
package main import ( "fmt" "log" "os" "time" "oracle_test/model" "github.com/cengsin/oracle" "gorm.io/gorm" "gorm.io/gorm/logger" ) func test() { log.Println("initial database connect……") db, err := gorm.Open(oracle.Open("database/password@127.0.0.1:1521/XE"), &gorm.Config{ Logger: logger.New(log.New(os.Stdout, "\r\n", log.LstdFlags), logger.Config{ SlowThreshold: 1 * time.Millisecond, LogLevel: logger.Warn, //打印級別 Colorful: true, }), //SkipDefaultTransaction: true, }) if err != nil { log.Fatalln(err) } if e := db.AutoMigrate(&model.ShopInfo{}); e != nil { log.Fatalln(e.Error()) } shopInfo := new(model.ShopInfo) db.First(shopInfo) fmt.Print(*shopInfo) }
測試運(yùn)行
go run ./main.go
原文鏈接:https://blog.csdn.net/Monkey_D_Newdun/article/details/122644097
相關(guān)推薦
- 2022-07-25 Android開發(fā)之Fragment懶加載的幾種方式及性能對比_Android
- 2022-10-14 Mybatis-plus配置多數(shù)據(jù)源
- 2023-04-12 Docker?login和logout的使用_docker
- 2023-01-07 一篇文章徹底弄懂Python中的if?__name__?==?__main___python
- 2022-07-27 Golang的strings.Split()踩坑記錄_Golang
- 2022-07-07 ASP.NET對Cookie的操作_ASP.NET
- 2022-11-18 Python實現(xiàn)常見數(shù)據(jù)格式轉(zhuǎn)換的方法詳解_python
- 2022-07-28 Jquery回調(diào)對象與延遲對象用法詳解_jquery
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- 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)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支