数据库的连接
1. 代码预览
package main
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type Student struct {
ID uint
Name string
Age uint8
}
// 设置 `Student` 的表名为 `student`
func (Student) TableName() string {
return "student"
}
func main() {
/* 1. 创建一个数据库连接对象db */
dsn := "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil{
panic(err)
}
/* 2. 执行查询工作 */
var studentList []Student
db.Find(&studentList)
for _, student := range studentList {
fmt.Println(student)
}
/* 3. 进行条件查询 */
var student1 Student
db.Where("id=?", 2).First(&student1)
fmt.Println(student1)
}
2. 使用步骤
2.1 引入 grom
go get -u gorm.io/gorm
2.2 使用gorm.Open 打开数据库
dsn := “user:password@tcp(ip:port)/tableName?charset=utf8mb4&parseTime=True&loc=Local”
db, err := gorm.Open(mysql.Open(dns), &gorm.Config{})
举例:
/* 1. 创建一个数据库连接对象db */
dsn := "root:123456@tcp(127.0.0.1:3306)/users?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
注意:在mysql.Open()
方法中,mysql 指的是"gorm.io/driver/mysql"
2.3 创建一个结构体和数据表字段对应
现在我们有一个叫做student的表在test数据库中,字段如下
那么我们可以使用结构体来映射数据表
type Student struct {
ID uint
Name string
Age uint8
}
// 设置 `Student` 的表名为 `student`
func (Student) TableName() string {
return "student"
}
注意:如果不使用func (Student) TableName()
执行查询会提示如下错误
Error 1146: Table 'test.students' doesn't exist
可见gorm默认Student 对应 students 数据库。 那有小伙伴可能会问了如果定义了type Students struct
会不会对应 studentss呢?这里帮大家试过了,Students 也对应 students
2.4 执行查询工作
- 查询所有
db.Find([]Students) // Find会把查询到的结果放到,传给他的列表中
var studentList []Students
db.Find(&studentList)
for _, student := range studentList {
fmt.Println(student)
}
db.Find([]Students) 相当于完成了Select * From student
操作
- 条件查询
db.Where(“条件字段=?”, 值).First(&student)
var student1 Student
db.Where("id=?", 2).First(&student1)
fmt.Println(student1)
db.Where(“条件字段=?”, 值).First(&student)相当于完成了Select * From student Where 条件字段=值