前言

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

使用gorm进行数据库操作

gorm如何链接数据库
导入gorm-------导入mysql驱动器----------使用open链接得到数据库操作对象(以mysql为例)
do,err:=gorm.Open(“mysql”,“user:password@/dbname?charset=utf8&parseTime=True$loc=Local”)
defer db.Close()
自动化创建数据库表
gorm支持自动迁移模式 使用AutoMigrate 方法来帮助我们自动化创建数据库表
db.AutoMigrate(&Product{})
代码实例

type HelloWord struct{gorm.ModelName stringSex    boolAge   int
}func main(){db.err:=gorm.Open("mysql","root:123456@/ginclass?charset=utf8&parseTime=True$loc=Local")if err!=nil{panic(err)
}
db.AutoMigrate(&HelloWord{})
defer db.close()
}

最简单的增删改查
增:Create (跟结构体指针地址)

type HelloWord struct{gorm.ModelName stringSex    boolAge   int
}func main(){db.err:=gorm.Open("mysql","root:123456@/ginclass?charset=utf8&parseTime=True$loc=Local")if err!=nil{panic(err)
}
db.AutoMigrate(&HelloWord{})db.Create(&HelloWord{Name:"qm",Sex:true,Age:18,
})
defer db.close()
}

删:Delete (跟结构体指针地址)或者会根据主键自动去查询单条或者查询单条或者根据条件删除多条

db.Deleter(&HelloWord{},"id=?",1)
db.Where("id in (?)",[]int {1,2}).Unscoped().Delete(&HelloWord{})

改:Update 更新单一数据 还有Updates 更新数据中指定内容Save更新所有内容

db.Where(:"id = ?",1).First(&HelloWord{}).Update(:"name","qimiao")
db.Where(:"id in (?)",[]int{1,2}).Find(&[]HelloWord{}).Updates(map[string]interface{}{"Name":"qimiaoshuai","Sex":true,"Age":26,
})

查:First(跟结构体示例指针地址) Find(跟结构体切片指针地址)
条件:Where Or 填写简单的sql查询语句执行得到model
模型:model

gorm结构体的创建技巧和结合gin使用


注:上图第一列是tag设置

type User struct{gorm.ModelName string `gorm:primary_key;column:'user_name';type:'varchar(100)';"`
}func (u User)TableName()string{return "qm_users"
}func main(){db,_:=gorm.Open("mysql","root:123456@ginclass?charset=utf8&parseTime=True$loc=Local")db.AutoMigrate(&User{})defer db.Close()
}

type Class struct{gorm.ModelClassName stringStudents []Student}type Student struct{gorm.ModelStudentName stringClassId uintIDCard IDCardTeachers []Teachers  `gorm:"many2many:student_teachers;"`}
type IDCard struct{gorm.ModelStudentID uintNum   int
}type Teacher struct{gorm.ModelTeacherName stringStudents []Student `gorm:"many2many:student_teachers;"`
}func main(){db,_:=gorm.Open("mysql","root:123456@ginclass?charset=utf8&parseTime=True$loc=Local")db.AutoMigrate(&Teacher{},&Class{},&Student{},&IDCard{})s:=Student{StudentName:"qm",IDCard:i,}i:=IDCard{Num:123456,}t:=Teacher{TeacherName:"老师傅“,Students: []Student{s},}c:=Class{ClassName:"XXX的班级“,Students: []Student{s},}_ := db.Create(&c).Error_:=db.Create(&t).Errordefer db.Close()
}

配合gin框架
结构体和上文一样,就是main函数里需要变换

func main(){db,_:=gorm.Open("mysql","root:123456@ginclass?charset=utf8&parseTime=True$loc=Local")db.AutoMigrate(&Teacher{},&Class{},&Student{},&IDCard{})defer db.Close()r:=gin.Default()r.POST("/student", func(c *gin.Context){var student Student_=c.BindJSON(&student)db.Create(student)
})r.GET("/student/:id",func(c *gin.Context){id := c.Param("ID")var student Student_ = c.BindJSON(&student)db.Preload().First(&student,"id = ?",id)c.JSON(200,gin.H{"s":student,})
})r.Run(":8080")
}

grom的理解与掌握相关推荐

  1. DotnetSpider (一) 架构的理解、应用、搭建

    本文连接:http://www.cnblogs.com/grom/p/8931650.html 受业务影响,决定将Downloader单独分层,做出修改. 最近在做爬虫,之前一直在使用 HttpWeb ...

  2. 通用解题法——回溯算法(理解+练习)

    积累算法经验,积累解题方法--回溯算法,你必须要掌握的解题方法! 什么是回溯算法呢? 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就&quo ...

  3. stream流对象的理解及使用

    我的理解:用stream流式处理数据,将数据用一个一个方法去 . (点,即调用) 得到新的数据结果,可以一步达成. 有多种方式生成 Stream Source: 从 Collection 和数组 Co ...

  4. Linux shell 学习笔记(11)— 理解输入和输出(标准输入、输出、错误以及临时重定向和永久重定向)

    1. 理解输入和输出 1.1 标准文件描述符 Linux 系统将每个对象当作文件处理.这包括输入和输出进程.Linux 用文件描述符(file descriptor)来标识每个文件对象.文件描述符是一 ...

  5. java局部变量全局变量,实例变量的理解

    java局部变量全局变量,实例变量的理解 局部变量 可以理解为写在方法中的变量. public class Variable {//类变量static String name = "小明&q ...

  6. 智能文档理解:通用文档预训练模型

    预训练模型到底是什么,它是如何被应用在产品里,未来又有哪些机会和挑战? 预训练模型把迁移学习很好地用起来了,让我们感到眼前一亮.这和小孩子读书一样,一开始语文.数学.化学都学,读书.网上游戏等,在脑子 ...

  7. 熵,交叉熵,散度理解较为清晰

    20210511 https://blog.csdn.net/qq_35455503/article/details/105714287 交叉熵和散度 自己给自己编码肯定是最小的 其他的编码都会比这个 ...

  8. mapreduce理解_大数据

    map:对不同的数据进行同种操作 reduce:按keys 把数据规约到一起 看这篇文章请出去跑两圈,然后泡一壶茶,边喝茶,边看,看完你就对hadoop 与MapReduce的整体有所了解了. [前言 ...

  9. 文件句柄和文件描述符的区别和理解指针

    句柄是Windows用来标识被应用程序所建立或使用的对象的唯一整数,Windows使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等.Windows句柄有点象C语言中的文件句柄. ...

最新文章

  1. java图书凭租_如何通过java一步实现租书系统
  2. Tensorflow 错误总结:ImportError: cannot import name add_newdocs.
  3. python安装后怎样配解释器_python解释器安装教程以及环境变量的配置
  4. Express实现路由分发控制、RESTful API
  5. #10172. 「一本通 5.4 练习 1」涂抹果酱 题解
  6. 《C++ Primer》13.1.6节练习(部分)
  7. CC254x--BLE
  8. android 75 新闻列表页面
  9. 从入门到入土:Python爬虫学习|实例练手|爬取新浪新闻搜索指定内容|Xpath定位标签爬取|代码注释详解
  10. 俄罗斯:国家机构今年已遭1000多万起网络攻击
  11. 安卓手机上跑_直接在电脑上浏览操作安卓手机 #效率App #scrcpy
  12. java 读取txt乱码_java 逐行读取txt文本如何解决中文乱码
  13. 目标检测之单阶段和两阶段检测算法的对比
  14. Git使用教程详解之四 服务器上的Git
  15. ACCV2020国际细粒度网络图像识别亚军方案总结
  16. 计算机组成原理 清华大学教学大纲,计算机组成原理-教学大纲.doc
  17. 二叉树任意两点间最短路径(利用栈-找公共祖先,不需要建立二叉树)
  18. 网易邮箱阻止一次非法访问解除方法
  19. 3dMax 灯光(街道的白天与夜晚)
  20. IDEA连接mysql又报错!Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' prope

热门文章

  1. KBEngine奇技淫巧<五>
  2. 计算机毕业设计Java校园约拍系统(源码+系统+mysql数据库+lw文档
  3. 龙格库塔法求微分方程
  4. 使用SymPy求微分方程
  5. python 高斯过程_高斯过程 Gaussian Processes 原理、可视化及代码实现
  6. 山东省农村幼儿教师关于工资和待
  7. Jenkis 增加参数构建
  8. STM32F1系列定时器 最大定时时间
  9. 七、svn带历史信息迁移到Gitlib
  10. router-view、router-link属性、动态路由的使用、路由嵌套、路由传参