gorm基础知识汇总
gorm的引入
orm
即Object-Relational Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了。
gorm
gorm 是 go语言的一个orm框架,golang写的,开发人员友好的orm库、
中文文档
安装gorm命令
go get github.com/jinzhu/gorm
// 下面这个 有时候需要, 有时候不需要
go get github.com/jinzhu/gorm/dialects/mysql@v1.9.16
gorm连接数据库
特别是这里导入的第二包,可以不用,但是不能没有
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql" // 引入mysql驱动
)
func main() {
// 1. 连接数据库。。
// 第一个参数: 指定要连接的数据库
// 第二个参数: 指的是数据库的设置信息: 用户名:密码@tcp(ip:端口号)/数据库名字?charset = utf8 & parseTime = True & loc = Local
// charset = utf8 设置字符集
// parseTime = True 为了处理time.Time
// loc = Local 时区设置,与本地时区保持一致
db, err := gorm.Open("mysql", "root:zhubao@tcp(localhost:3306)/testgorm?charset=utf8&parseTime=True&loc=Local")
if err != nil {
panic(err) // 如果出错,后续代码 没有必要执行,让程序中断
}
// 数据库资源的释放:
defer db.Close()
}
补充二代gorm引入
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/redis/go-redis/v9"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var Conn *gorm.DB
var Rdb *redis.Client
func NewMysql() {
my := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8&parseTime=True&loc=Local","root","zhubao","127.0.0.1:3306","vote")
conn ,err := gorm.Open(mysql.Open(my), &gorm.Config{
})
if err != nil {
fmt.Printf("err:%s\n", err)
panic(err)
}
Conn = conn
}
对表进行操作
创建表
// 定义结构体:
type User struct {
Age int
Name string
}
// 创建表:通常情况下,数据库中新建的表的名字是结构体名字的小写复数形式,例如,结构体User,表名 users
db.CreateTable(&User{
})
// 这种情况,可以 自己设定表的名字。
db.Table("user").CreateTable(&User{
})
删除表
// 通过 &User{} 指定结构体,删除对应的表
db.DropTable(&User{
})
// 通过指定 表名 删除对应的表
db.DropTable("users")
判断表是否存在
flag := db.HasTable(&User{
})
flag1 := db.HasTable("user")
fmt.Println(flag, flag1) // 输出 true true
自定义表名
type User struct {
Age int
Name string
}
db.CreateTable(&User{
})
func (User) TableName() string {
// 给对应结构体返回的表 命名
return "user"
}
数据增删改查
增加 : 要先创建对应表结构的 结构体,然后创建一个表映射函数,确定是哪个表,然后进行 添加
可以用 RecordNotFound 函数来确定查询结果是否为空
// 定义结构体:
type User struct {
Age int
Name string
}
func main() {
db, err := gorm.Open("mysql", "root:zhubao@tcp(localhost:3306)/testgormcharset=utf8&parseTime=True&loc=Local")
if err != nil {
panic(err) // 如果出错,后续代码 没有必要执行,让程序中断
}
// 数据库资源的释放:
defer db.Close()
// 增加
db.Create(&User{
Age: 18,
Name: "张三",
})
// 查询数据 : 第一个参数: 查询出来的数据的载体:
var myuser User
db.First(&myuser, "age = ?", 19)
fmt.Println(myuser)
// 更新数据
db.Model(&myuser).Update("age", 626)
db.Model(&myuser).Update("name", "菲菲")
//删除数据
db.Delete(&myuser)
}
func (User) TableName() string {
return "user"
}