当前位置:网站首页>go : 使用gorm查询记录
go : 使用gorm查询记录
2022-07-30 05:51:00 【行人已】
生活本沉闷 跑起来才有风
具体代码已放在: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)
}
边栏推荐
- Ali: How many methods are there for multi-threaded sequential operation?
- 不会吧,Log4j 漏洞还没有完全修复?
- Local Implicit Grid Representations for 3D Scenes详解
- mysql高阶语句(一)
- STL源码剖析:bound friend template friend代码测试和理解
- uniapp中canvas与v-if更“配”
- The Geometric Meaning of Vector Cross Product and the Calculation of Modulus
- 预测人们对你的第一印象,“AI颜狗”的诞生
- 学生成绩管理系统(C语言)
- Camera coordinate system, world coordinate system, pixel coordinate system conversion, and Fov conversion of OPENGLDEFocal Length and Opengl
猜你喜欢
随机推荐
识别“数据陷阱”,发现数据的可疑之处
Go 结合Gin导出Mysql数据到Excel表格
Selenium01
DHCP原理与配置
【MySQL】MySQL中如何实现分页操作
从追赶到超越,国产软件大显身手
Boot process and service control
学生成绩管理系统(C语言)
手机端滚动至页面指定位置
(GGG)JWT
From catching up to surpassing, domestic software shows its talents
Electron日常学习笔记
MySQL主从复制配置搭建,一步到位
Pioneer in Distributed Systems - Leslie Lambert
阿里二面:Sentinel vs Hystrix 对比,如何选择?
不会吧,Log4j 漏洞还没有完全修复?
Oracle查看表空间使用率及爆满解决方案
Camera coordinate system, world coordinate system, pixel coordinate system conversion, and Fov conversion of OPENGLDEFocal Length and Opengl
万能js时间日期格式转换
相机坐标系,世界坐标系,像素坐标系三者转换,以及OPENGLDEFocal Length和Opengl 的 Fov转换









