首页 > 其他分享 >Gorm简单入门

Gorm简单入门

时间:2024-03-05 19:58:05浏览次数:21  
标签:users Where db 入门 简单 jinzhu WHERE Gorm name

Gorm简单入门

介绍简单的数据库连接和CRUD内容

0.基本配置

go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql

1.连接数据库

package main

import (
	"time"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

type User struct {
	ID       uint
	Name     string
	Age      uint8
	BirthDay time.Time
}

func main() {
	dsn := "root:@tcp(127.0.0.1:3306)/gorm?charset=utf8mb4&parseTime=true&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("failed to connect database")
	}

	err = db.AutoMigrate(&User{})
	if err != nil {
		panic("failed to migrate")
	}

	user := User{Name: "jinzhu", Age: 18, BirthDay: time.Now()}

	db.Create(&user)
}

也可以批量创建

users := []User{
		{Name: "hjr", Age: 18, BirthDay: time.Now()},
		{Name: "csn", Age: 19, BirthDay: time.Now()},
		{Name: "cqh", Age: 20, BirthDay: time.Now()},
	}
	db.Create(users)

根据Map创建

db.Model(&User{}).Create([]map[string]interface{}{
		{"Name": "hjr", "Age": 18},
		{"Name": "csn", "Age": 19},
	})

2. 查询

一般查询

//根据主键查询第一条记录
db.First(&user)
//根据主键查询最后一条记录
db.Last(&user)
//查询id在1, 2, 3之间的记录
db.Find(&user, []int{1, 2, 3})

Where条件

// Get first matched record
db.Where("name = ?", "jinzhu").First(&user)
 SELECT * FROM users WHERE name = 'jinzhu' limit 1;

// Get all matched records
db.Where("name = ?", "jinzhu").Find(&users)
 SELECT * FROM users WHERE name = 'jinzhu';

// <>
db.Where("name <> ?", "jinzhu").Find(&users)
 SELECT * FROM users WHERE name <> 'jinzhu';

// IN
db.Where("name IN (?)", []string{"jinzhu", "jinzhu 2"}).Find(&users)
 SELECT * FROM users WHERE name in ('jinzhu','jinzhu 2');

// LIKE
db.Where("name LIKE ?", "%jin%").Find(&users)
 SELECT * FROM users WHERE name LIKE '%jin%';

// AND
db.Where("name = ? AND age >= ?", "jinzhu", "22").Find(&users)
 SELECT * FROM users WHERE name = 'jinzhu' AND age >= 22;

// Time
db.Where("updated_at > ?", lastWeek).Find(&users)
 SELECT * FROM users WHERE updated_at > '2000-01-01 00:00:00';

// BETWEEN
db.Where("created_at BETWEEN ? AND ?", lastWeek, today).Find(&users)
 SELECT * FROM users WHERE created_at BETWEEN '2000-01-01 00:00:00' AND '2000-01-08 00:00:00';

Struct & Map查询

// Struct
db.Where(&User{Name: "jinzhu", Age: 20}).First(&user)
 SELECT * FROM users WHERE name = "jinzhu" AND age = 20 LIMIT 1;

// Map
db.Where(map[string]interface{}{"name": "jinzhu", "age": 20}).Find(&users)
 SELECT * FROM users WHERE name = "jinzhu" AND age = 20;

// 主键的切片
db.Where([]int64{20, 21, 22}).Find(&users)
 SELECT * FROM users WHERE id IN (20, 21, 22);

3.更新

保存所有字段

Save()默认会更新该对象的所有字段,即使没有赋值

单列使用Update进行更新


// Update with conditions
db.Model(&User{}).Where("active = ?", true).Update("name", "hello")
// UPDATE users SET name='hello', updated_at='2013-11-17 21:34:10' WHERE active=true;

// User's ID is `111`:
db.Model(&user).Update("name", "hello")
// UPDATE users SET name='hello', updated_at='2013-11-17 21:34:10' WHERE id=111;

// Update with conditions and model value
db.Model(&user).Where("active = ?", true).Update("name", "hello")
// UPDATE users SET name='hello', updated_at='2013-11-17 21:34:10' WHERE id=111 AND active=true;

多列使用Updates更新

// Update attributes with `struct`, will only update non-zero fields
db.Model(&user).Updates(User{Name: "hello", Age: 18, Active: false})
// UPDATE users SET name='hello', age=18, updated_at = '2013-11-17 21:34:10' WHERE id = 111;

// Update attributes with `map`
db.Model(&user).Updates(map[string]interface{}{"name": "hello", "age": 18, "active": false})
// UPDATE users SET name='hello', age=18, active=false, updated_at='2013-11-17 21:34:10' WHERE id=111;

4.删除

删除记录时,请确保主键字段有值,GORM 会通过主键去删除记录,如果主键为空,GORM 会删除该 model 的所有记录。

//删除id为10的数据
db.Delete(&User{}, 10)
//删除id为1和2和3的数据
db.Delete(&User{}, []int{1, 2, 3})
//带条件的删除
db.Where("name = ?", "hjr").Delete(&User{})
//带 SQL 语句的删除
db.Set("gorm:delete_option", "OPTION (OPTIMIZE FOR UNKNOWN)").Delete(&User{})

标签:users,Where,db,入门,简单,jinzhu,WHERE,Gorm,name
From: https://www.cnblogs.com/showball/p/18054764

相关文章

  • 网络安全入门(持续更新...)
    第零章网络安全概述网络安全是什么网络安全基本要素(CIA)机密性(Confidentiality):确保一些重要信息/敏感数据不会被未授权访问(不会被窃取);完整性(Integrity):确保数据在传输过程中不会被篡改;可用性(Availability):确保已授权人员可以正常获取数据;网络安全关心什么网络通信安全:......
  • 从0开始入门智能知识库和星火大模型,打造AI客服。
    介绍FastWikiFastWiki是一个高性能、基于最新技术栈的知识库系统,旨在为大规模信息检索和智能搜索提供解决方案。它采用微软SemanticKernel进行深度学习和自然语言处理,在后端使用MasaFramework,前端采用MasaBlazor框架,实现了一个高效、易用、可扩展的智能向量搜索平台。其目标是帮......
  • GDB调试入门笔记
    目录What?WhyHow安装GDB安装命令查看是否安装成功调试简单的程序预备一个程序调试使用breakinfolistnextprintstepWhat?GDB是什么?全称GNUsymbolicdebugger百度百科的解释:程序调试工具UNIX及UNIX-like下的调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试......
  • jmeter+nmon+crontab简单的执行接口定时压测
    临时接到任务要对系统的接口进行压测,上面的要求就是:压测,并发2000在不熟悉系统的情况下,按目前的需求,需要做的步骤:需要有接口脚本需要能监控系统性能需要能定时执行脚本二、观察>针对第一点:接口脚本需要观察系统接口的情况:系统使用swagger文档编辑接口,这很好,可以直接引......
  • 243. 一个简单的整数问题2
    #include<iostream>#include<stdio.h>#include<algorithm>#include<string>#defineFor(i,j,n)for(inti=j;i<=n;++i)usingnamespacestd;typedeflonglongLL;constintN=1e5+5;intn,m;LLa[N];structno......
  • Linux入门(五)
    Linux入门(五)本篇文章主要讲述下文件处理相关的命令1:显示权限ls-lh总用量36Kdrwxrwxr-x5zhzh4.0K2月2816:47app-rw-rw-r--1zhzh5302月2218:25build.gradledrwxrwxr-x3zhzh4.0K2月2218:25gradle-rw-rw-r--1zhzh1.1K2月2608:58gr......
  • 使用Npoi简单生成Excel并赋值导出小案例
    publicasyncTask<byte[]>ExportNewReportByQuotationId(GuidquotationId){IWorkbookwookbook=newXSSFWorkbook();//EngineerQuoteSheetawaitDoEngineerQuoteWork(wookbook,quotationId);//ILSheetawa......
  • Three.js 快速入门指南
    Three.js介绍Three.js是一个开源的应用级3DJavaScript库,可以让开发者在网页上创建3D体验。Three.js屏蔽了WebGL的底层调用细节,让开发者能更快速的进行3D场景效果的开发。Three.js的开发环境搭建创建目录并使用npminit-y初始化package.json使用npminstall--sa......
  • jQuery UI简单的讲解
    原文链接:https://blog.csdn.net/omygodvv/article/details/134469683我们先进入一下问答时间,你都知道多少呢?(1)什么是jQueryUI呢?解答:jQueryUI是以jQuery为基础的开源JavaScript网页用户界面代码库。包含底层用户交互、动画、特效和可更换主题的可视控件。我们可以直接用......
  • javaweb04-maven&web入门
    maven依赖管理:管理项目依赖的jar包,避免版本冲突统一项目结构:提供标准统一的项目结构标准的项目构建:标准跨平台的自动化项目构建方式maven坐标groupid:定义当前项目隶属组织名称artifactid:定义当前项目名称version:定义当前项目版本号依赖依赖传递排除依赖<exclusion>......