本文学习视频https://www.bilibili.com/video/BV1Bz411v78U/?spm_id_from=333.788

gorm中文官方文档 https://jasperxu.com/Programming/Golang/GORM/
另外一个文档 https://learnku.com/docs/gorm/v2/index/9728

什么是orm

  • 一种数据库操作辅助工具
  • 在我们go的结构体和数据库之间产生映射,让我们对数据库的关系,表的内容,直观的体现在结构体上
  • 使用结构体即可完成增删改查操作

如何连接数据库

  1. 引入gorm包 github.com/jinzhu/gorm
  2. 引入mysql驱动包 github.com/go-sql-driver/mysql
  3. 首次建立一个数据库连接,代码如下
package mainimport (_ "github.com/go-sql-driver/mysql""github.com/jinzhu/gorm"
)func main() {db, err := gorm.Open("mysql","root:123456@/ginclass?charset=utf8mb4&parseTime=True&loc=Local")defer db.Close()if err != nil {panic(err)}
}

用grom建表

用db.AutoMigrate去建表,说明:db.AutoMigrate会自动判断表是否存在,如果不存在则建表。

package mainimport (_ "github.com/go-sql-driver/mysql""github.com/jinzhu/gorm"
)type HelloWorld struct {gorm.ModelName stringSex  boolAge  int
}func main() {db, err := gorm.Open("mysql","root:123456@/ginclass?charset=utf8mb4&parseTime=True&loc=Local")defer db.Close()if err != nil {panic(err)}//db.AutoMigrate判断是否存在表,如果不存在则自动创建db.AutoMigrate(&HelloWorld{})
}

HelloWorld结构体中的gorm.Model是一个包含了ID, CreatedAt, UpdatedAt, DeletedAt四个字段的Golang结构体,建表时会自动创建这些字段。
建表后结构如下

建完表后来进行一些基本的增删改查操作。

增操作

用db.Create来创建一条数据Name为kaka,Sex为true, Age为21的数据

package mainimport (_ "github.com/go-sql-driver/mysql""github.com/jinzhu/gorm"
)type HelloWorld struct {gorm.ModelName stringSex  boolAge  int
}func main() {db, err := gorm.Open("mysql","root:123456@/ginclass?charset=utf8mb4&parseTime=True&loc=Local")defer db.Close()if err != nil {panic(err)}//db.AutoMigrate判断是否存在表,如果不存在则自动创建db.AutoMigrate(&HelloWorld{})//创建数据db.Create(&HelloWorld{Name: "kaka",Sex:  true,Age:  21,})
}

运行后可以看到在表中多了一条数据。

我们再随便创建两条数据来查下。

查操作

  1. db.First方法使用
    我们用db.First来查数据库里的第一条数据

    运行后结果如下

    指定条件进行查询
    查询结果如下
  2. db.Find方法使用
    注意:db.Find的时候要接受的是一个切片的地址
    代码如下

    打印结果如下

    可以看到不加条件的话db.Find把所有结果都查出来了。
    我们加上where sex = false条件来查询下
    代码如下
    结果如下

    一般在实际开发过程中会把where写在前面,示例如下

    or语句比较简单可以在where里面写或者db.where().Or.Find()

改操作

db.Update()修改单个字段
将helloworld表中id为1的数据中的name字段的值改成Jack
代码如下

db.Updates()来修改多个字段

Updates(HelloWorld{})里面如果是一个空属性,比如age=0,或者Name=“”, 或者sex=false,则这些字段不会被修改。

如果想要修改把字段改成这些空属性,比如将Age改成0,则要加一个map
代码如下

如果要修改多条数据,比如id in 1,2的都改下
代码如下

注意First方法里要加切片

删操作

用db.Delete方法

但是这个删除是软删除,见下图

删除id为1和2的数据,代码如下

这个也是软删除,如果想进行硬删除要加上Unscoped()方法
代码如下

总结

  • 创建连接

    • db, err := gorm.Open(“mysql”,
      “root:123456@/ginclass?charset=utf8mb4&parseTime=True&loc=Local”)
      defer db.Close()
  • 建表
    • 先定义一个结构体比如HelloWorld
    • 然后db.AutoMigrate(&HelloWorld{})来建表
  • 增操作
    • db.Create(&HelloWorld{
      Name: “kaka”,
      Sex: true,
      Age: 21,
      })
    • &HelloWorld{}表示指定哪张表
  • 查操作
    • db.First()来查数据库里的第一条数据
    • db.First()中加where来进行条件查找
    • db.Find()查找,方法中需要指定一个结构体切片
    • db.Where.Find()
  • 改操作
    • db.Update()修改单条数据的单个字段
    • db.Updates()修改单条数据的多个字段
    • db.Updates()将字段修改为0值的方法,比如false, 数字0, 空字符串
    • db.Updates()修改多条数据的方法
  • 删操作
    • db.Delete() 软删除
    • db.Where().Unscoped().Delete()硬删除

【gin学习笔记】07初识GROM使用GORM进行数据库操作相关推荐

  1. PHP学习笔记——在phalapi框架内的orm数据库操作

    今天将自己的聚合支付接口集成到了phal框架内,由于在phalapi框架内如何返回视图不知道,因此需要将原本的wap站点的sdk包转化为api资源.具体过程稍晚点记录,现在将phalapi框架内的数据 ...

  2. Hadoop学习笔记—4.初识MapReduce

    一.神马是高大上的MapReduce MapReduce是Google的一项重要技术,它首先是一个 编程模型 ,用以进行大数据量的计算.对于大 数据量的计算,通常采用的处理手法就是并行计算.但对许多开 ...

  3. JavaScript学习笔记07【6个经典案例——电灯开关、轮播图、自动跳转首页、动态表格、表格全选、表单验证】

    Java后端 学习路线 笔记汇总表[黑马程序员] w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符. ...

  4. MySQL学习笔记07【事务、用户管理和权限管理】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  5. 【EF学习笔记07】----------加载关联表的数据 贪婪加载

    [EF学习笔记07]----------加载关联表的数据 贪婪加载 讲解之前,先来看一下我们的数据库结构:班级表 学生表 贪婪加载 //贪婪加载 using (var db = new Entitie ...

  6. 《机电传动控制》学习笔记-07

    <机电传动控制>学习笔记07 胡恒谦 机卓1301 (注:本周补上第7周的学习笔记) PLC的编程元件: PLC内部有许多不同功能的器件,实际上这些器件是由电子电路和存储器组成的. 1.  ...

  7. ASM学习笔记1 - 初识ClassVistor ——以ClassReader的应用为例

    ASM学习笔记1 - 初识ClassVistor --以ClassReader的应用为例 1 ASM简介 什么是ASM? Java操纵类字节码的工具.是一个jar包. 如何使用? ASM提供两类API ...

  8. C语言学习笔记-P1 初识C语言(2)

    C语言学习笔记-P1 初识C语言(2) C语言学习笔记-P1 初识C语言(2) 一.常量 1.字面常量 2.const修饰的常变量 3.#define定义的标识符常量 3.枚举常量 二.字符串+转义字 ...

  9. C语言学习笔记-P1 初识C语言(1)

    C语言学习笔记-P1 初识C语言(1) P1 初识C语言(1) 一.什么是C语言 1.定义 2.发展 二.第一个C语言程序 Hello World 三.数据类型 四.变量,常量 未完待续!!! P1 ...

最新文章

  1. 编写同时在PyTorch和Tensorflow上工作的代码
  2. 大剑无锋之内存泄漏是什么?【面试推荐】
  3. javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/el/ELResolver错误解决办法...
  4. 《C++ Primer》2.1.2节练习
  5. python nums函数获取结果记录集有多少行记录_PHP mysqli_num_rows():获取查询结果的行数...
  6. 栈溢出笔记1.9 认识SEH
  7. php在登录页面使用ajax,使用Ajax安全的登录界面
  8. 小米的语音识别系统是如何搭建的
  9. Oracle 将一个查询结果值动态赋值给一个变量
  10. 存储过程中“ 警告: 聚合或其他 SET 操作消除了 Null 值” 导致错误的解决
  11. Jquery小菜鸟---防止按钮在短时间内被多次点击
  12. 【软件】如何批量手机号码归属地查询并且快速分类?批量号码归属地告诉查询分类系统怎么使用?全部教会你
  13. Android 定制关机界面
  14. 身份证识别-全方位突破,高精度,轻量级!
  15. wind金融数据接口python_python使用用Wind接口获取全部A股历史交易数据
  16. 胜利学院计算机考试时间,胜利学院2019年3月全国计算机等级考试报名时间
  17. Skip-Thought词向量模型实现Sent2Vec
  18. 赛门铁克召开2010财年中国合作伙伴高峰会
  19. 如何高效地阅读英文文献?
  20. JAVA版微信机器人(非公众号)【L】

热门文章

  1. linux赋予文件夹所有权限_linux赋予用户文件夹权限
  2. [Java]NaN与NaN比较是否相等
  3. 【弗洛伊得算法的改良(可以求出具体的路径)】
  4. fastboot刷机——理论
  5. 关于Android 版本向下兼容
  6. 架构师之路--HTTP请求headr的Referer
  7. 820-彻底弄懂TCP协议
  8. Flink乱序延迟时间处理-Watermark
  9. 泰国监管机构放宽ICO政策
  10. PyTorch中文教程 | (14) 基于注意力机制的seq2seq神经网络翻译