Gorm笔记 | 青训营笔记

75 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天

特性

  • 全功能 ORM
  • 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)
  • Create,Save,Update,Delete,Find 中钩子方法
  • 支持 PreloadJoins 的预加载
  • 事务,嵌套事务,Save Point,Rollback To Saved Point
  • Context、预编译模式、DryRun 模式
  • 批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD
  • SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询
  • 复合主键,索引,约束
  • Auto Migration
  • 自定义 Logger
  • 灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…
  • 每个特性都经过了测试的重重考验
  • 开发者友好

连接数据库

        db, err := gorm.Open(mysql.New(mysql.Config{
		DSN:               "root:password@123@tcp(123.249.111.0:3306)/gorm_class?charset=utf8mb4&parseTime=True&loc=Local",
		DefaultStringSize: 171,
	}), &gorm.Config{
		SkipDefaultTransaction: false,
		NamingStrategy: schema.NamingStrategy{
			TablePrefix:   "gov_", // table name prefix, table for `User` would be `t_users`
			SingularTable: true,   // use singular table name, table for `User` would be `user` with this option enable
		},
		DisableForeignKeyConstraintWhenMigrating: true,
	})
	if err != nil {
		log.Println(err)
	}

设置连接池

        sqlDB, err := db.DB()
	sqlDB.SetMaxIdleConns(10)           //最大的空闲连接数
	sqlDB.SetMaxOpenConns(100)          //连接池最大连接数量
	sqlDB.SetConnMaxLifetime(time.Hour) //连接池中链接的最大可复用时间
	M := db.Migrator()

sql操作

创建表

       M := db.Migrator()
       M.CreateTable(&User{})

查询数据

// 获取第一条记录(主键升序)  
db.First(&user)  
// SELECT * FROM users ORDER BY id LIMIT 1;  
  
// 获取一条记录,没有指定排序字段  
db.Take(&user)  
// SELECT * FROM users LIMIT 1;  
  
// 获取最后一条记录(主键降序)  
db.Last(&user)  
// SELECT * FROM users ORDER BY id DESC LIMIT 1;  
  
result := db.First(&user)  
result.RowsAffected // 返回找到的记录数  
result.Error // returns error or nil  
  
// 检查 ErrRecordNotFound 错误  
errors.Is(result.Error, gorm.ErrRecordNotFound)

插入数据

//批量插入
var users = []User{{Name: "jinzhu1"}, {Name: "jinzhu2"}, {Name: "jinzhu3"}} db.Create(&users)

删除数据

// Email 的 ID 是 `10`  
db.Delete(&email)  
// DELETE from emails where id = 10;  
  
// 带额外条件的删除  
db.Where("name = ?", "jinzhu").Delete(&email)  
// DELETE from emails where id = 10 AND name = "jinzhu";

总结

这次总结了gorm的一些基础操作,在之后的应用中遇到不会的还是得多查询文档,文档地址:GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.