网站首页 > 技术文章 正文
gorm安装
gorm框架是go的一个数据库连接及交互框架,一般用于连接关系型数据库。
安装gorm,使用命令安装:
go get -u -v github.com/jinzhu/gorm
连接数据库
构建连接的目标为数据库中某一个库,同大多数框架一样使用url进行连接,url基本格式:
用户名:密码@连接方式(ip:port)/数据库名?参数
参数描述:
用户名:连接数据库用户名
密码:连接数据库密码
连接方式:或称为访问协议,一般为tcp
ip:数据库所在服务器地址
port:数据库监听端口
数据库名:数据库中对应要连接库名
参数:附加数据库参数,根据数据库不同内容不同
确定url后,就可以调用gorm中参数进行连接数据库操作:
//调用Open函数连接数据库,第一个参数为对应数据库名称,这里以mysql为例,mariadb也可以使用mysql作为名称。第二个参数为刚才设置好的url。
//得到两个结果:第一个为连接后对象,用于操作数据库对象;第二个为错误信息,连接失败会返回内容,连接成功返回nil,空。
dbConn, err := gorm.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test1?charset=utf8&parseTime=True&loc=Local")
if err != nil {
panic(err)
}
别忘记import语句导入包:
// gorm包
"github.com/jinzhu/gorm"
//数据库方言,因为不会直接使用,所以前面要加下划线
_ "github.com/jinzhu/gorm/dialects/mysql"
操作完数据库后不要忘了关闭连接:
dbConn.Close()
表操作
创建表
gorm创建表基于结构体,所以创建表前要先用结构体规划表结构,这里简单写一个结构体,创建表时默认结构体第一个字段作为主键:
//创建结构体映射表结构
type User struct {
Id int
Name string
Data string
}
写好结构体后,调用创建表语句直接按照结构体结构创建表:
// 直接创建表
dbConn.CreateTable(&User{})
// 自定义表名创建表
dbConn.Table("user").Create(&User{})
当直接创建表时,表名遵循规范:
1、大写字母全部小写,所有位于中间的大写字母都变成小写字母并且前面加下划线,例如UserInfo结构体创建为表名称为user_infos。
2、上面最后的那个s是因为直接创建表时,名称最后都会加上一个s。所以上面结构体User创建表后名称为users。
删除表
// 按照结构体删除,即默认表名
dbConn.DropTable(&User{})
//按照表名删除,可为自定义的表名
dbConn.DropTable("user")
增删改查
插入数据
插入数据,插入数据方法结构使用Create方法:
// 默认表名插入数据
dbConn.Create(&User{Id: 1, Name: "awda", Data: "ssss"})
// 自定义表名插入数据
dbConn.Table("user").Create(&User{Id: 1, Name: "awda", Data: "ssss"})
查询数据
查询第一条找到的数据,使用First,该方法返回值仍然为db对象,所以接收数据时我们需要先定义一个对应表结构的结构体接收数据:
//定义user的结构体对象
var user User
// 还是两种操作方式
//其中&user代表上面定义的结构体对象用于接收数据,使用时通过上面变量直接操作
//默认查询的话相当于查询第一条数据
dbConn.First(&user)
dbConn.Table("user").First(&user)
//输出内容
fmt.Print(user.Id)
//带条件查询
//只传入一个参数时代表默认查询主键
dbConn.First(&user, 1)
dbConn.Table("user").First(&user, 1)
//也可以指定查询条件,条件书写格式与普通sql语句并无不同,其中?代表占位符,First方法是动态参数方法,可以传入任意参数,将按照?占位符逐个传入。
dbConn.First(&user, "name=? and id = ?", "awda", 1)
dbConn.Table("user").First(&user, "name=? and id = ?", "awda", 1)
有First就有Last,同First调用格式一致。
批量查询,批量查询使用Find方法,其余参数结构同First或Last相同,只不过传参时一般传入数组参数,当然,First或Last方法也可以传入数组参数,但得到的数组只有一个数据,批量查询操作:
//定义结构体数组接收批量数据
var user[] User
//其余操作与之前相同,不再过度演示
dbConn.Find(&user)
dbConn.Table("user").Find(&user)
更新数据
//根据Where语句更新
//更新单个字段
dbConn.Table("user").Where("id=?", 1).Update("id", 1234)
//更新批量字段
dbConn.Table("user").Where("id=?",2).Updates(&User{Id: 123, Name: "awdawd1231"})
//按主键更新,传入结构体对象,根据对应主键更新相应内容
dbConn.Table("user").Save(&user1)
删除内容
//按照主键删除
dbConn.Table("user").Delete(&user1)
//指定条件删除,后面需要指定一个空指针,因为Delete方法必须有参数
dbTable("user").Where(条件表达式).Delete(&User{})
//传入空指针代表指定结构,按照默认表名去删除其中内容
db.Where(条件表达式).Delete(&User{})
猜你喜欢
- 2024-09-09 混合云资产管理项目(二)(混合云存储产品有哪些)
- 2024-09-09 Go语言进阶之Go语言高性能Web框架Iris项目实战-完善用户管理EP04
- 2024-09-09 数据库与 Go 的交互(go数据库和kegg数据库)
- 2024-09-09 七爪源码:N+1 查询如何烧毁您的数据库
- 2024-09-09 Go的安全编程和防御性编程(防止代码注入)
- 2024-09-09 Vue3+Go 仿抖音项目架构设计与实现
- 2024-09-09 腾讯Go安全指南(腾讯官网最新安全公告)
- 2024-09-09 Grails指南24查询高阶(grails中文参考手册)
- 2024-09-09 Redis优化高并发下的秒杀性能(redis秒杀高并发代码)
- 2024-09-09 10.Go语言编写个人博客 文章分类(基于golang的个人博客系统)
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)