【gin学习笔记】07初识GROM使用GORM进行数据库操作
本文学习视频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的结构体和数据库之间产生映射,让我们对数据库的关系,表的内容,直观的体现在结构体上
- 使用结构体即可完成增删改查操作
如何连接数据库
- 引入gorm包 github.com/jinzhu/gorm
- 引入mysql驱动包 github.com/go-sql-driver/mysql
- 首次建立一个数据库连接,代码如下
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,})
}
运行后可以看到在表中多了一条数据。
我们再随便创建两条数据来查下。
查操作
- db.First方法使用
我们用db.First来查数据库里的第一条数据
运行后结果如下
指定条件进行查询
查询结果如下
- 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()
- db, err := gorm.Open(“mysql”,
- 建表
- 先定义一个结构体比如HelloWorld
- 然后db.AutoMigrate(&HelloWorld{})来建表
- 增操作
- db.Create(&HelloWorld{
Name: “kaka”,
Sex: true,
Age: 21,
}) - &HelloWorld{}表示指定哪张表
- db.Create(&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进行数据库操作相关推荐
- PHP学习笔记——在phalapi框架内的orm数据库操作
今天将自己的聚合支付接口集成到了phal框架内,由于在phalapi框架内如何返回视图不知道,因此需要将原本的wap站点的sdk包转化为api资源.具体过程稍晚点记录,现在将phalapi框架内的数据 ...
- Hadoop学习笔记—4.初识MapReduce
一.神马是高大上的MapReduce MapReduce是Google的一项重要技术,它首先是一个 编程模型 ,用以进行大数据量的计算.对于大 数据量的计算,通常采用的处理手法就是并行计算.但对许多开 ...
- JavaScript学习笔记07【6个经典案例——电灯开关、轮播图、自动跳转首页、动态表格、表格全选、表单验证】
Java后端 学习路线 笔记汇总表[黑马程序员] w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符. ...
- MySQL学习笔记07【事务、用户管理和权限管理】
MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...
- 【EF学习笔记07】----------加载关联表的数据 贪婪加载
[EF学习笔记07]----------加载关联表的数据 贪婪加载 讲解之前,先来看一下我们的数据库结构:班级表 学生表 贪婪加载 //贪婪加载 using (var db = new Entitie ...
- 《机电传动控制》学习笔记-07
<机电传动控制>学习笔记07 胡恒谦 机卓1301 (注:本周补上第7周的学习笔记) PLC的编程元件: PLC内部有许多不同功能的器件,实际上这些器件是由电子电路和存储器组成的. 1. ...
- ASM学习笔记1 - 初识ClassVistor ——以ClassReader的应用为例
ASM学习笔记1 - 初识ClassVistor --以ClassReader的应用为例 1 ASM简介 什么是ASM? Java操纵类字节码的工具.是一个jar包. 如何使用? ASM提供两类API ...
- C语言学习笔记-P1 初识C语言(2)
C语言学习笔记-P1 初识C语言(2) C语言学习笔记-P1 初识C语言(2) 一.常量 1.字面常量 2.const修饰的常变量 3.#define定义的标识符常量 3.枚举常量 二.字符串+转义字 ...
- C语言学习笔记-P1 初识C语言(1)
C语言学习笔记-P1 初识C语言(1) P1 初识C语言(1) 一.什么是C语言 1.定义 2.发展 二.第一个C语言程序 Hello World 三.数据类型 四.变量,常量 未完待续!!! P1 ...
最新文章
- 编写同时在PyTorch和Tensorflow上工作的代码
- 大剑无锋之内存泄漏是什么?【面试推荐】
- javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/el/ELResolver错误解决办法...
- 《C++ Primer》2.1.2节练习
- python nums函数获取结果记录集有多少行记录_PHP mysqli_num_rows():获取查询结果的行数...
- 栈溢出笔记1.9 认识SEH
- php在登录页面使用ajax,使用Ajax安全的登录界面
- 小米的语音识别系统是如何搭建的
- Oracle 将一个查询结果值动态赋值给一个变量
- 存储过程中“ 警告: 聚合或其他 SET 操作消除了 Null 值” 导致错误的解决
- Jquery小菜鸟---防止按钮在短时间内被多次点击
- 【软件】如何批量手机号码归属地查询并且快速分类?批量号码归属地告诉查询分类系统怎么使用?全部教会你
- Android 定制关机界面
- 身份证识别-全方位突破,高精度,轻量级!
- wind金融数据接口python_python使用用Wind接口获取全部A股历史交易数据
- 胜利学院计算机考试时间,胜利学院2019年3月全国计算机等级考试报名时间
- Skip-Thought词向量模型实现Sent2Vec
- 赛门铁克召开2010财年中国合作伙伴高峰会
- 如何高效地阅读英文文献?
- JAVA版微信机器人(非公众号)【L】