golang 利用 gorm 链接数据库、增删改查
package main
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type Student struct {
Id int `gorm:"primary_key" json:"id"`
Username string `json:"username"`
Password string `json:"password"`
}
//type User struct {
// Id int64 `gorm:"primary_key" json:"id"`
// Name string
// CreatedAt *time.Time `json:"createdAt" gorm:"column:create_at"`
// Email string `gorm:"type:varchar(100);unique_index"` // 唯一索引
// Role string `gorm:"size:255"` //设置字段的大小为255个字节
// MemberNumber *string `gorm:"unique;not null"` // 设置字段唯一且不为空
// memberNumber
// Num int `gorm:"AUTO_INCREMENT"` // 设置 Num字段自增
// Address string `gorm:"index:addr"` // 给Address 创建一个名字是 `addr`的索引
// IgnoreMe int `gorm:"-"` //忽略这个字段
//}
var db *gorm.DB
var err error
// gorm链接数据库
func initDB() {
dsn := "root:@tcp(localhost:3306)/godb?charset=utf8mb4&parseTime=True&loc=Local"
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Println(err)
return
} else {
fmt.Println("链接成功", db)
}
}
// 利用gorm 自动创建表
func createTable() {
db.AutoMigrate(
Student{},
)
}
// 增
func insertData(username string, password string) {
db.Create(&Student{
Username: username,
Password: password,
})
}
// 改
func modfiy(id int, name string) {
db.Model(Student{Id: id}).Update("username", name)
}
// 查
func queryOne(id int) {
s := Student{Id: id}
db.First(&s)
fmt.Println("student====", s)
}
// 查所有数据
func queryAll() {
stus := []Student{}
db.Find(&stus)
fmt.Println(stus)
}
// 删除
func deleteData(id int) {
db.Delete(&Student{
Id: id,
})
// 条件删
//db.Where("username = ?","xiaoming").Delete(&Student{})
}
func main() {
fmt.Println("begin")
initDB()
createTable()
//insertData("xiaoming", "123456") // 增加用户
//modfiy(1, "xiaohong")
//queryOne(1)
deleteData(1)
queryAll()
}
细节和更多操作:
user := User{}
// 获取第一条记录(主键升序)
db.First(&user)
// SELECT * FROM users ORDER BY id LIMIT 1;
// 获取一条记录,没有指定排序字段
db.Take(&user)
// SELECT * FROM users LIMIT 1;
// 获取最后一条记录(主键降序)
db.Last(&user) // 升序下最后一条,降序下第一条,总之跟First相反。
// SELECT * FROM users ORDER BY id DESC LIMIT 1;
// 查询主键为 10 的第一条数据,int和string都无所谓,会自动匹配
db.First(&user, 10)
db.First(&user, "10")
设置查询条件 Where
db.Where("name = ?", "l").First(&user)
// SELECT * FROM users WHERE user_name = 'l' ORDER BY id LIMIT 1;
// 获取全部匹配的记录
db.Where("name <> ?", "l").Find(&users)
// SELECT * FROM users WHERE user_name <> 'l';
// IN
db.Where("name IN ?", []string{"lzq", "qqq"}).Find(&users)
// SELECT * FROM users WHERE user_name IN ('lzq','qqq');
// LIKE
db.Where("name LIKE ?", "%l%").Find(&users)
// SELECT * FROM users WHERE user_name LIKE '%l%';
// AND
db.Where("name = ? AND age = ?", "lzq", "aaa").Find(&users)
// SELECT * FROM users WHERE user_name = 'lzq' AND password = aaa;
// BETWEEN
db.Where("created_at BETWEEN ? AND ?", lastWeek, today).Find(&users)
// SELECT * FROM users WHERE created_at BETWEEN '2020-11-01 00:00:00' AND '2020-11-08 00:00:00';
表的删除。
要在 GORM 中删除 "user" 表,可以使用 Migrator 对象的 DropTable 方法。Migrator 对象用于处理数据库的迁移操作,而 DropTable 方法用于删除表。
// 获取 Migrator 对象
migrator := db.Migrator()
// 删除 "users" 表
if migrator.HasTable(&User{}) {
migrator.DropTable(&User{})
fmt.Println("users表删除成功")
} else {
fmt.Println("users表不存在")
}