当前位置:网站首页>Go: use gorm query record
Go: use gorm query record
2022-07-30 08:03:00 【pedestrians have】
生活本沉闷 Running is the wind
Specific code has been placed on:https://gitee.com/hjx_RuGuoYunZhiDao/strom-huang-go/blob/master/go_mysql/db_grom_select.go
官方中文文档地址:https://learnku.com/docs/gorm/v2/query/9733
1、 引入gorm
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
2、添加一个model
type TUser struct {
ID uint `gorm:"primaryKey"`
Name string
Password string
Phone string `gorm:"phone"`
NickName string `gorm:"nick_name"`
CreatedAt time.Time `gorm:"column:created_at;type:datetime"`
UpdatedAt time.Time `gorm:"column:updated_at;type:datetime"`
DeletedAt time.Time `gorm:"column:deleted_at;type:datetime"`
}
3、链接数据库
dsn := "root:[email protected](localhost:3306)/go_test?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: newLogger,
})
4、普通查询
var user01 = TUser{
}
db.First(&user01)
fmt.Printf("S: %#v\n", user01)
5、具体代码
package main
import (
"fmt"
"log"
"os"
"time"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
//model:
type TUser struct {
ID uint `gorm:"primaryKey"`
Name string
Password string
Phone string `gorm:"phone"`
NickName string `gorm:"nick_name"`
CreatedAt time.Time `gorm:"column:created_at;type:datetime"`
UpdatedAt time.Time `gorm:"column:updated_at;type:datetime"`
DeletedAt time.Time `gorm:"column:deleted_at;type:datetime"`
}
//指定数据库表名称
func (TUser) TableName() string {
return "t_user"
}
func main() {
//启用打印日志
newLogger := logger.New(
log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
logger.Config{
SlowThreshold: time.Second, // 慢 SQL 阈值
LogLevel: logger.Info, // Log level: Silent、Error、Warn、Info
Colorful: false, // 禁用彩色打印
},
)
dsn := "root:[email protected](127.0.0.1:3306)/go_admin?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: newLogger,
})
if err != nil {
fmt.Println(err)
return
}
//获取第一条
var user01 = TUser{
}
db.First(&user01)
fmt.Printf("S: %#v\n", user01)
// 获取一条记录,没有指定排序字段
var user02 = TUser{
}
db.Take(&user02)
fmt.Printf("S: %#v\n", user02)
//获取最后一条
var user03 = TUser{
}
db.Last(&user03)
fmt.Println(user03)
//获取第一条匹配的记录
var user04 = TUser{
}
result01 := db.Where("name", "xx").First(&user04)
fmt.Println(result01.RowsAffected)
//或者这样写
db.Find(&user04, "name", "xx")
fmt.Println("或者这样写:", result01.RowsAffected)
// 获取全部匹配的记录
var user05 = TUser{
}
result02 := db.Where("name <> ?", "r").First(&user05)
fmt.Println(result02.RowsAffected)
//in
var user06 = TUser{
}
db.Where("name IN ?", []string{
"r", "r 2"}).Find(&user06)
//like
db.Where("name like ?", "%aa%").Find(&user06)
//and
db.Where("name =? and phone =?", "r", "12345").Find(&user06)
//time
db.Where("created_at >?", "2022-05-12").Find(&user06)
// BETWEEN
db.Where("created_at BETWEEN ? AND ?", "lastWeek", "today").Find(&user06)
//Struct--查询,用model来匹配参数
db.Where(&TUser{
Name: "r", Phone: "123"}).Find(&user06)
// Map ----查询,用json的方式来匹配参数
db.Where(map[string]interface{
}{
"name": "r", "phone": "123"}).Find(&user06)
//-------------------------------------------------------------------or---------------------------------
db.Where("name", "r").Or("phone", "123").Find(&user06)
db.Where("name", "r").Or(&TUser{
Phone: "123", NickName: "x"}).Find(&user06)
//------------------------------------------------------------------order--------------------------
db.Order("id desc").Find(&user06)
//多个order
db.Order("id desc,created_at asc").Find(&user06)
//---------------------------------------------------------------Limit & Offse--------------
db.Limit(1).Find(&user06)
db.Offset(1).Find(&user06)
//分页操作
var PageNum = 1
var PageSize = 10
db.Limit(PageSize).Offset((PageNum - 1) * PageSize).Find(&user06)
}
边栏推荐
猜你喜欢

Camera coordinate system, world coordinate system, pixel coordinate system conversion, and Fov conversion of OPENGLDEFocal Length and Opengl

人工肌肉智能材料新突破

图解关系数据库设计思想,这也太形象了

bean的生命周期

Calculate the inverse source of the matrix (using the adjoint matrix, a 3x3 matrix)

Go语学习笔记 - gorm使用 - 数据库配置、表新增 Web框架Gin(七)

预测人们对你的第一印象,“AI颜狗”的诞生

Redis 如何实现防止超卖和库存扣减操作?

识别“数据陷阱”,发现数据的可疑之处

How does Redis prevent oversold and inventory deduction operations?
随机推荐
相机坐标系,世界坐标系,像素坐标系三者转换,以及OPENGLDEFocal Length和Opengl 的 Fov转换
Electron中设置菜单(Menu),主进程向渲染进程共享数据
空间顶点到平面的距离计算的证明及其源码
Goto statements
Test Development Engineer Growth Diary 010 - CI/CD/CT in Jenkins (Continuous Integration Build/Continuous Delivery/Continuous Testing)
STL source code analysis: conceptual understanding of iterators, and code testing.
Electron之初出茅庐——搭建环境并运行第一个程序
assert
idea built-in translation plugin
一段神奇的没有主方法的代码
STL源码剖析:bound friend template friend代码测试和理解
What new materials are used in the large aircraft C919?
[硬核干货]由0到1,突破信息系统项目管理师(呕心沥血经验之谈)!!!
When does MySQL use table locks and when does it use row locks?
Universal js time date format conversion
Playing script killing with AI: actually more involved than me
Go 使用 freecache 缓存
@Bean 与 @Component 用在同一个类上,会怎样?
B站崩了,如果是你是那晚负责的开发人员你会怎么做?
Electron日常学习笔记