gorm是一个使用Go语言编写的ORM框架。它文档齐全,对开发者友好,支持主流数据库。这里主要演示一下gorm的实际使用。
// 打开项目终端 安装gormgo get -u gorm.io/gorm
链接数据库
连接不同的数据库都需要导入对应数据的驱动程序,gorm的包装了一些驱动程序,只需要按如下方式导入需要的数据库驱动就可以使用。
以mysql 为列
import ("github.com/jinzhu/gorm" // 引入gorm_"github.com/jinzhu/gorm/dialects/mysql" // 引入mysql 驱动)
链接mysql
// 链接数据库db,err := gorm.Open("mysql","root:18482155682.@tcp(127.0.0.1:3306)/demo?charset=utf8mb4&parseTime=True&loc=Local")if err !=nil {panic(err)}//最后关闭数据库defer db.Close() // 程序结束后关闭mysql 数据库
进行进行增删改查
// 列 简历一个用户表 进行c r u d 操作// 声明一个user结构体type User struct {ID int64Name stringGender string}func main(){// 链接数据库db,err := gorm.Open("mysql","root:18482155682.@tcp(127.0.0.1:3306)/demo?charset=utf8mb4&parseTime=True&loc=Local")if err !=nil {panic(err)}// gorm 自动迁移 会自动建立一张表db.Aut// 传递user 结构体指针 通过grom自动迁移 建表db.AutoMigrate(&User{})// 声明 变量进行 结构体赋值u1 := User{1,"坤坤","唱"}u2 := User{1,"caicai","跳"}// 创建一个数据行 == 插入一条数据// Create grom 传递指针db.Create(&u1) // 将 u1 插入到数据库中db.Create(&u1) // 将 u2 插入到数据库中// 查询一个数据 == 查询数据var u = new(User) // 实例化一个user 结构体 用来存储查询回来的数据db.First(u) // first 查第第一条数据 存储变量 u 中fmt.Printf("%#v\n", u) // 输出 查询出的的数据// 通过条件查询db.Find(u,"Gender=?","唱") // 查询字段 Gender 中符合条件的数据// 更新操作db.Model(&u).Update("Gender", "篮球") // 修改数据中 Gender 字段// 删除// 通过grom 中 delete 方法 进行物理删除db.Delete(&u)defer db.Close() // guanb}
gorm model 的定义
算了不想写了 看代码吧
// grom model的定义type Model struct {ID uint `gorm:"primary_key"`CreatedAt time.TimeUpdatedAt time.TimeDeletedAt *time.Time}2 : 嵌入到自己的模型中// 将 `ID`, `CreatedAt`, `UpdatedAt`, `DeletedAt`字段注入到`User`模型中type User struct {gorm.ModelName string}
gorm 复杂查询
// 定义模型type User struct {ID int64Name stringAge int64}user := User{Name: "大佬", Age: 18} // 模拟数据db.Create(&user) // 插入数据// 根据主键查询第一条记录 主键 默认等于iddb.First(&user)// 通过 toke 在数据表user表中 随机获取一条记录db.Take(&user)// 根据主键查询表中最后一条记录db.Last(&user)// 查询表中所有的记录db.Find(&user)// 查询指定的某条记录(仅当主键为int类型时可用)db.First(&user, 10) // 查询主键10
where 查询
// 查询表中 name 符合条件的 第一条数据db.Where("name = ?", "大佬").First(&user)// 查询表中 name 符合条件的所有数据db.Where("name = ?", "大佬").Find(&user)// 查询表中 name 不符合条件的所有数据db.Where("name <> ?", "jinzhu").Find(&user)//条件查询db.Where(&user{Name: "lc",Age: 19}).Find(&user)// 查询所有数据 但是返回的是指定的字段db.Select("name,age").Find(&user)// 指定一次查询多少条db.Limit(10).Find(&user)//偏移 跳过多少条开始查询 ./ 组合Limit 进行分页查询db.Offset(10).Find(&user)//分页查询 第一条开始查 查询 2条数据db.Offset(1).Limit(2).Find(&user)

简单的gorm crud
学习 李老师的博客 https://www.liwenzhou.com/posts/Go/gorm_crud/
附上雪花算法 生成 递增 不重复分布式id
import ("fmt""github.com/bwmarrin/snowflake""time")/**snowFlake 算法雪花算法 他是twitter开源的有64位整数组成分布式id 性能较高 并且在单机上递增*/var node *snowflake.Nodefunc Init(startTime string, machineID int64) (err error) {var st time.Timest, err = time.Parse("2006-01-02", startTime) //自定义开始时间 和 结束时间if err != nil {return err}snowflake.Epoch = st.UnixNano() / 1000000 //设置一个毫秒值node, err = snowflake.NewNode(machineID)return nil}func Genid() (id int64, err error) {//if err := Init("2021-07-29", 1); err != nil {fmt.Println("init failed,err :%v\n", err)return 0, err}return node.Generate().Int64(), nil}
文章转载自Note2020,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




