Day1:GORM入门
1.环境的安装
在项目文件的terminal中输入下面两条命令进行gorm安装
go get gorm.io/driver/mysql go get gorm.io/gorm
2.安装好之后使用以下代码进行检测,其中的地址拼接是重点
"%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local&timeout=%s", username, password, host, port, Dbname, timeout
func init() { username := "root" //账号 password := "147258" //密码 host := "127.0.0.1" //数据库地址,可以是Ip或者域名 port := 3306 //数据库端口 Dbname := "gorm" //数据库名 timeout := "10s" //连接超时,10秒 // root:root@tcp(127.0.0.1:3306)/gorm? dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local&timeout=%s", username, password, host, port, Dbname, timeout) //连接MYSQL, 获得DB类型实例,用于后面的数据库读写操作。 db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{ NamingStrategy: schema.NamingStrategy{ TablePrefix: "f_", // 表名前缀 NoLowerCase: false, // 关闭小写转换 }, }) if err != nil { panic("连接数据库失败, error=" + err.Error()) } // 连接成功 fmt.Println(db) DB = db }
3.连接数据库的重点语句是gorm.open(数据库类型.open(数据库拼接地址)),在Open中添加&gorm.config(根据需求添加相关配置)
例如数据表命名的策略如下所示
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{ NamingStrategy: schema.NamingStrategy{ TablePrefix: "f_", // 表名前缀 SingularTable: false, // 单数表名 NoLowerCase: false, // 关闭小写转换 }, })
4.打印日志的三种方式
1.DB.Debug().AutoMigrate(&Student{})
2.展示部分日志:var model Student session := DB.Session(&gorm.Session{Logger: newLogger})
session.First(&model)
3.var mysqlLogger logger.Interface
// 要显示的日志等级 mysqlLogger = logger.Default.LogMode(logger.Info)
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{ Logger: mysqlLogger, })
Day2:GORM模型定义、单表操作
一、模型定义
1.当自动创建表的结构太大时,可以使用gorm:size:大小,进行操作,如下图所示
操作方式,实现结果如下:
字段标签,将gorm后面的size替换下面指令就行
type
定义字段类型
size
定义字段大小
column
自定义列名
primaryKey
将列定义为主键
unique
将列定义为唯一键
default
定义列的默认值
not null
不可为空
embedded
嵌套字段
embeddedPrefix
嵌套字段前缀
comment
注释
多个标签之前用 ;
连接
二、单表操作
1.使用DB.create(interface{})进行插入数据
DB.AutoMigrate(&students{}) email := "[email protected]" s := students{ Name: "xx", Age: 22, Gender: false, Email: &email, } DB.Create(&s)
2.批量插入
for i := 0; i < 10; i++ { studentsList = append(studentsList, students{ Name: fmt.Sprintf("Robot%d号", i+1), //使用Sprintf可以拼接字符串 Age: 22, Gender: true, Email: nil, }) } DB.Create(&studentsList)
3.单表查询
var student students DB.Take(&student) //查询一个student数据 fmt.Println(student) DB = DB.Session(&gorm.Session{Logger: mysqlLogger}) //打印操作日志 var studentList []students //查询所有students的数据 DB.Take(&studentList) fmt.Println(studentList) DB.First(&studentList) fmt.Println(studentList) DB.Last(&studentList) fmt.Println(studentList)
4.根据主键查询
//根据主键查询,查询主键为3的数据 DB.Take(&studentList, 3) //第二个参数是主键位置 fmt.Println(studentList)
5.根据其他条件查询
//根据其他条件查询,查询名字为Robot5号的信息 err := DB.Take(&studentList, "name=?", "Robot5号").Error switch err { case gorm.ErrRecordNotFound: fmt.Println("没有找到") default: fmt.Println("sql错误") } fmt.Println(studentList)
6.根据结构体查询
var student students student.ID = 3 DB.Take(&student) fmt.Println(student)
7.查询多条记录
count := DB.Find(&studentList).RowsAffected //获取查询的记录数 fmt.Println(count) for _, student := range studentList { data, _ := json.Marshal(student) fmt.Println(string(data)) }
8.根据主键查询多条记录
//DB.Find(&studentList, []int{1, 3, 5, 7}) //DB.Find(&studentList, 1, 3, 5, 7) // 一样的 //fmt.Println(studentList)
9.根据其它条件查询多条记录
DB.Find(&studentList, "name in ?", []string{"Robot3号", "xx"}) fmt.Println(studentList)
三、更新表操作
1.更新所有字段,指定字段
//更新所有字段 var student students email := "[email protected]" DB.Take(&student) //获取第一个数据 student.Age = 18 //更改第一个数据的年龄 student.Email = &email student.XXX=xxx
//使用select更新指定字段
DB.Select("age").Save(&student) //重新提交数据库
DB.Save(&student) //重新提交数据库
2.批量更新
//批量更新 var studentList []students DB.Find(&studentList, "age=?", 22).Update("email", "[email protected]")
3.更新多列
var studentList []students DB.Model(&studentList).Where("age=?", 22).Updates(map[string]any{ "name": "坨哥", "gender": false, })
4.根据ID删除
//根据ID删除行数据 var student students DB.Delete(&student, 4)
标签:fmt,DB,gorm,学习,studentList,student,Println,GORM From: https://www.cnblogs.com/99wsr/p/17867983.html