首页 > 数据库 >Gorm实现数据库增删查改——mysql篇

Gorm实现数据库增删查改——mysql篇

时间:2023-08-22 23:44:32浏览次数:43  
标签:Username 表项 数据库 TableEntity 查改 mysql null Gorm

本文的目标

本文力图实现用简短的篇幅,结合一些具体的应用场景来讲述gorm基本的增删查改功能。

Gorm介绍

在现代软件开发中,数据库操作是构建应用程序不可或缺的一部分。

GORM是Go语言的一个ORM(Object Relational Mapping)库。它可以让我们通过Go来操作数据库中的数据。其中ORM(Object Relational Mapping:对象关系映射)是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。其有如下特点:

  • 全功能 ORM

  • 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)

  • Create,Save,Update,Delete,Find 中钩子方法

  • 支持 PreloadJoins 的预加载

  • 事务,嵌套事务,Save Point,Rollback To Saved Point

  • Context,预编译模式,DryRun 模式

  • 批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD

  • SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询

  • 复合主键,索引,约束

  • Auto Migration

  • 自定义 Logger

  • 灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…

  • 每个特性都经过了测试的重重考验

  • 开发者友好

快速引入

Gorm框架引入

go get -u gorm.io/gorm

定义模型结构

在做具体的增删查改之前,我们要根据自身的需求来定义结构体,以相应的结构体为依托。这里以UserInfo表为例:

type UserInfo struct {  
    Avatar string // 用户头像  
    BackgroundImage string // 用户个人页顶部大图  
    FavoriteCount int64 // 喜欢数  
    FollowCount int64 // 关注总数  
    FollowerCount int64 // 粉丝总数  
    ID int64  // 用户id  
    IsFollow bool // true-已关注,false-未关注  
    Name string // 用户名称  
    Signature string // 个人简介  
    TotalFavorited int64 // 获赞数量  
    WorkCount int64 // 作品数  
}

数据库创建

在mysql中创建表,sql语句如下:

create table user_infos
(
    avatar           longtext   null,
    background_image longtext   null,
    favorite_count   bigint     null,
    follow_count     bigint     null,
    follower_count   bigint     null,
    id               bigint auto_increment
        primary key,
    name             longtext   null,
    signature        longtext   null,
    total_favorited  bigint     null,
    work_count       bigint     null,
    is_follow        tinyint(1) null
);

同时,我们也可以使用gorm中的db.AutoMigrate(&User{})方法来实现数据库的自动创建。对结构体相关条目进行标记可以指定主键和自增等操作:

ID int64 `gorm:"primaryKey"`
// 用primaryKey标记主键

Mysql连接

Gorm连接

mysqlInfoString = fmt.Sprintf("%s:%s@%s(%s:%d)/%s?parseTime=true",  
mysqlConf.Username, mysqlConf.Password, mysqlConf.Protocol, mysqlConf.Url, mysqlConf.Port,  
mysqlConf.Dbname)  
mysqlDb, err := sql.Open("mysql", mysqlInfoString)
GormDb, err := gorm.Open(mysql.Open(mysqlInfoString), &gorm.Config{})
// Username:数据库用户名 Password:数据库登录密码 Protocol:数据库协议(指明是哪种数据库)
// URL:数据库地址 Port:数据库端口 Dbname:具体要读取的数据库名称

CURD基本操作

  1. Create 新增记录
var userAccount = &TableEntity.UserAccountInfo{  
    UserID: userId,  
    Password: password,  
    Username: rUser.Username,  
}
tx.Create(userAccount)

这里通过给相应的结构体进行赋值,再调用Create函数实现表项的创建

同时,我们还可以对数据库表项进行批量创建,只需创建相应的切片,步骤如下:

var users = []TableEntity.UserAccountInfo{
    {
        UserID: 1, Password: "25123",Username: "张三" 
        },
    {   UserID: 2, Password: "12wqe", Username: "李四"
        }, 
} 
db.Create(&users)
  1. Where 记录查询

在mysql中语句中where语句是最为灵活与多样化的存在,通过指定相应的查询语句即可实现多样化的功能查询,举例如下:

mysqldb.Model(&TableEntity.UserAccountInfo{}).Where("username =?", username).Find(&num)

上述语句通过db.Model指定要查询的表项(通过grom指定创建相关表项的结构体),where方法中给出相关的查询语句,用Find方法来接受查询到的表项并转化为相应的结构体实例

  1. Delete 记录删除

负责指定主键删除mysql数据库中指定的表项,不指定主键就会触发批量删除,这点需要注意

mysqldb.Delete(&TableEntity.UserAccountInfo{}, 10)

其中TableEntity.UserAccountInfo{}是与数据库相对应的表项,10是主键的值

  1. Update 记录更新

更新数据库中相关记录

mysqldb.Model(&TableEntity.UserAccountInfo{}).Where("user_iD = ?", 30).Updates(TableEntity.UserAccountInfo{Password: "25123", Username: "王五"})

上述即通过指定了相应的条件对满足条件的表项进行了修改与更新

标签:Username,表项,数据库,TableEntity,查改,mysql,null,Gorm
From: https://www.cnblogs.com/johnsonstar/p/17649945.html

相关文章

  • mysql
    Mysql基础以最常见的学生表查询为基础数据库与测试的关系检查界面可见输入数据存储检查界面不可见数据存储检查是否符合数据库事务的一致性聚合函数max(字段):求该字段的最大值min(字段):求该字段的最小值avg(字段):求该字段的平均值sum(字段):对该字段的值求和count(*......
  • Mysql 分页查询总结
    背景最近在做项目的时候,有一个场景需要进行分页查询某个分类下的商品信息,发现对这块不熟悉,故总结一下01表结构CREATETABLE`tb_goods`(`id`bigint(20)NOTNULLAUTO_INCREMENTCOMMENT'主键',`item_id`int(11)NOTNULLCOMMENT'商品id',`category_id`int(......
  • mysql-给用户添加表权限
    指定用户的表权限grantselect,insert,update,delete,indexonmqdt_sjzl_dev.t_bz_jdsf_question_reformtoshujugu@'%';给mysql用户分配制度库的查询权限GRANTselectONmqdt_sjzl_longtu_dev.*TOshujugu@'%';grantselect,insert,update,delete,indexonmqdt_sjzl_d......
  • mysql单库并发优化
    是否在使用Mysql时有以下疑问:1、限制连接数时CPU占用量不大吞吐量也不高!2、增大连接数后吞吐量提升不大却容易导致Mysql服务器卡死!3、横向增加Mysql服务器时感觉并发能力提升也有限!4、...以下仅以mysql的innodb引擎说明,独享数据库服务器为例。吞吐量瓶颈mysql的吞吐量主要受:磁盘读......
  • python · SQL | MySQL 配置与 python 连接数据库
    来存档一下搞sql的过程,方便以后查阅。安装与配置mysqlserver:https://blog.csdn.net/zhende_lan/article/details/129318514在同一个网页下载mysqlworkbench(数据库可视化);打开workbench,新建一些表,用来测试:https://zhuanlan.zhihu.com/p/260139380python连接sql的代......
  • windows 安装mysql
    首先去下载Mysql文件我下载的是zip版本的 2.解压文件3.在解压的文件主目录下创建一个my.ini文件#Foradviceonhowtochangesettingspleasesee#http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html#***DONOTEDITTHISFILE.It'sa......
  • kylin操作系统安装mysql
    首先坑的是麒麟说自己基于ubuntu。结果包管理工具用的yum。然后yum包里还没有mysql只能自己下载安装。1.第一种方式直接下MySQL::DownloadMySQLCommunityServer(ArchivedVersions) 里装好的mysql的tar包,然后解压。解压以后拷贝到/usr/local/mysql目录下注意如果在别的目......
  • 基于JAVA+MySQL技术智能服装推荐系统的设计与实现-计算机毕业设计源码+LW文档
    1.开题依据1.1研究的目的意义在过去到现在,消费方式从物物交换到以通俗认知中的“货币”购买物品,再到如今的网上支付交易,实物物流运输到达我们的手上。购物方式从实体店的消费模式,转到了网上店铺的交易。相信很多人在现实生活中都有过实体店购物的消费的体验,在实体店消费需要安排......
  • MySQL基本SQL语句4(DCL)
    前言DCL英文全称是DataControlLanguage(数据控制语言),用来管理数据库用户、控制数据库的访问权限。一、DCL用户管理1.查询用户select*frommysql.user; Host代表当前用户访问的主机,如果为localhost,仅代表只能够在当前本机访问,是不可以远程访问的。User代表的是访问该数......
  • mysql基础理论知识(面试)
    MySQL面试题(基础篇一)原创 Suren 婺青年 2023-08-1511:02 发表于上海收录于合集#面试14个#数据库5个#sql7个#计算机5个基础篇什么是MySQL?MySQL有什么特点?MySQL是一种开源的关系型数据库管理系统,它使用SQL语言来存储、管理和处理数据。MySQL具有以下特点:......