这是一个系列的文章,上一篇的地址:
现在我们来看看如何查询某一条数据。例如现在我想查询数据库中是否存在一个名为“灰太狼”的人,那么就可以这么写代码:
package main
import "fmt"
type Student struct {
ID uint `gorm:"size:10"`
Name string `gorm:"size:16"`
Age int `gorm:"size:3"`
Gender bool
Email *string `gorm:"size:128"`
}
func main() {
var student Student
err := DB.Take(&student, "name = ?", "灰太狼").Error
if err != nil {
fmt.Println(err)
} else {
fmt.Println(student.Email)
}
}
注意,上述的代码已经不在connection.go中了,我新开了一个文件,名叫SingleTable.go,上面的代码是写在SingleTable.go中的。现在目录结构看起来这样:
你可能想问,那么现在connection.go中的代码长啥样呢?长这样:
package main
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
var DB *gorm.DB
var mysqlLogger logger.Interface
func init() {
username := "root"
password := "xhw200116long3"
host := "127.0.0.1"
port := 3306
Dbname := "gorm"
timeout := "10s"
//日志操作相关
mysqlLogger = logger.Default.LogMode(logger.Info)
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local&timeout=%s", username, password, host, port, Dbname, timeout)
//skip后面那个东西是跳过更新删除等,这样可以获得性能的提升
//官方文档:https://gorm.cn/docs/index.html
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
SkipDefaultTransaction: true,
Logger: mysqlLogger,
})
//连接失败
if err != nil {
panic("连接数据库失败, error=" + err.Error())
}
//连接成功
DB = db
fmt.Println(DB)
}
你可能还想问,如何运行上面刚开始那个go文件呢,目前我只有一种办法:按住ctrl,然后同时选中connection.go和SingleTable.go,然后右键,再点击运行。
可以看到运行结果如下:
也就是说我们查到了这条数据,它是真实存在的。
所以现在问题来了,为什么这条数据存在呢?我甚至从来都没有向表中插入过数据啊!
有意思,其实我是插入过数据的,不过我忘记怎么写插入数据的代码了,各位看官不如自己慢慢去别处查吧。
开个玩笑,插入数据的代码如下:
package main
import "fmt"
type Student struct {
ID uint `gorm:"size:10"`
Name string `gorm:"size:16"`
Age int `gorm:"size:3"`
Gender bool
Email *string `gorm:"size:128"`
}
func main() {
email := "[email protected]"
var s1 = Student{
Name: "灰太狼",
Age: 24,
Gender: true,
Email: &email,
}
err := DB.Create(&s1).Error
if err != nil {
fmt.Println(err)
} else {
fmt.Println("插入数据成功!")
}
}
大功告成。
还记得我们最开始的查询方法吗?其实查询方法远不止那一种,还有很多,下面再列举至少一个:
标签:err,fmt,DB,查询数据库,go,gorm,size From: https://www.cnblogs.com/EvanTheGreat/p/17092559.html