# gorm初探
ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象与关系数据库相互映射
ORM让你的数据库里边的表结构变成你的代码定义的数据结构,从而做到:代码结构即为数据库结构,代码行为即为数据库行为
安装gorm
[官方文档](GORM - The fantastic ORM library for Golang, aims to be developer friendly.)
| go get -u gorm.io/gorm |
| go get -u gorm.io/driver/sqlite |
| go get -u gorm.io/driver/mysql |
连接mysql
| |
| |
| |
| |
| |
| |
| dsn := "root:root@tcp(127.0.0.1:8889)/test_gin?charset=utf8mb4&parseTime=True&loc=Local" |
| db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) |
| if err != nil { |
| fmt.Println("连接数据库失败:", err.Error()) |
| } |
| db, err := gorm.Open(mysql.New(mysql.Config{ |
| DSN: "root:root@tcp(127.0.0.1:8889)/test_gin?charset=utf8mb4&parseTime=True&loc=Local", |
| DefaultStringSize: 256, |
| DisableDatetimePrecision: true, |
| DontSupportRenameIndex: true, |
| DontSupportRenameColumn: true, |
| SkipInitializeWithVersion: false, |
| }), &gorm.Config{ |
| SkipDefaultTransaction: false, |
| NamingStrategy: schema.NamingStrategy{ |
| TablePrefix: "", |
| SingularTable: true, |
| }, |
| DisableForeignKeyConstraintWhenMigrating: true, |
| }) |
| |
| if err != nil { |
| fmt.Println("连接数据库失败:", err.Error()) |
| } |
| |
| fmt.Println(db) |
创建一个表
| type User struct { |
| Name string |
| } |
| _ = db.AutoMigrate(&User{}) |
| |
| |
| m := db.Migrator() |
| m.CreateTable(&User{}) |
| |
| m.HasTable(&User{}) |
| m.HasTable("user") |
| |
| m.DropTable(&User{}) |
| m.DropTable("user") |
| |
| m.RenameTable(&User{}, "user_rename") |
| type Yingxiaozhu struct { |
| Name string |
| } |
| m.RenameTable(&User{}, &Yingxiaozhu{}) |
| |
| |
| m.AddColumn(&User{}, "Age") |
| m.RenameColumn(&User{}, "Name", "ReName") |
| fmt.Println(m.HasColumn(&User{}, "Name")) |
| |
| |
| if m.HasTable(&User{}) { |
| fmt.Println("user表已经存在,无需重复创建") |
| } else { |
| m.CreateTable(&User{}) |
| fmt.Println("表创建成功") |
| } |
连接池
| sqlDb, _ := db.DB() |
| sqlDb.SetMaxIdleConns(10) |
| sqlDb.SetMaxOpenConns(100) |
| sqlDb.SetConnMaxLifetime(time.Hour) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!