- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章golang gorm 操作mysql及gorm基本用法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
golang 官方的那个操作mysql的有点麻烦所以就使用了gorm,下面就gorm的使用做下简单介绍 。
下载gorm:
go get -u github.com/jinzhu/gorm 。
在项目中引入gorm:
1
2
3
4
|
import
(
"github.com/jinzhu/gorm"
_
"github.com/jinzhu/gorm/dialects/mysql"
)
|
定义db连接信息 。
1
2
3
4
5
6
7
8
9
|
func DbConn(MyUser, Password, Host, Db string, Port int) *gorm.DB {
connArgs :=
fmt
.Sprintf(
"%s:%s@(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local"
, MyUser,Password, Host, Port, Db )
db, err := gorm.Open(
"mysql"
, connArgs)
if
err != nil {
log.Fatal(err)
}
db.SingularTable(
true
)
return
db
}
|
由于grom是使用的orm映射,所以需要定义要操作的表的model,在go中需要定义一个struct, struct的名字就是对应数据库中的表名,注意gorm查找struct名对应数据库中的表名的时候会默认把你的struct中的大写字母转换为小写并加上“s”,所以可以加上 db.SingularTable(true) 让grom转义struct名字的时候不用加上s。我是提前在数据库中创建好表的然后再用grom去查询的,也可以用gorm去创建表,我感觉还是直接在数据库上创建,修改表字段的操作方便,grom只用来查询和更新数据.
假设数据库中的表已经创建好,下面是数据库中的建表语句:
1
2
3
4
5
6
7
8
9
10
11
12
|
CREATE TABLE `xz_auto_server_conf` (
`
id
` int(11) NOT NULL AUTO_INCREMENT,
`group_zone` varchar(32) NOT NULL COMMENT
'大区例如:wanba,changan,aiweiyou,360'
,
`server_id` int(11) DEFAULT
'0'
COMMENT
'区服id'
,
`server_name` varchar(255) NOT NULL COMMENT
'区服名称'
,
`open_time` varchar(64) DEFAULT NULL COMMENT
'开服时间'
,
`service` varchar(30) DEFAULT NULL COMMENT
'环境,test测试服,formal混服,wb玩吧'
,
`username` varchar(100) DEFAULT NULL COMMENT
'data管理员名称'
,
`submit_date` datetime DEFAULT NULL COMMENT
'记录提交时间'
,
`status` tinyint(2) DEFAULT
'0'
COMMENT
'状态,0未处理,1已处理,默认为0'
,
PRIMARY KEY (`
id
`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
定义model,即struct, 定于struct时我们可以只定义我们需要从数据库中取回的特定字段:
gorm在转义表名的时候会把stuct的大写字母(首字母除外) 替换成“_”,所以下面的"XzAutoServerConf "会转义成数数据库中对应“xz_auto_server conf”的表名, 对应的字段名的查找会先按照tag里面的名称去里面查找,如果没有定义标签则按照struct定义的字段查找,查找的时候struct字段中的大写会被转义成“ ”,例“GroupZone”会去查找表中的group_zone字段 。
1
2
3
4
5
6
7
8
|
//
定义struct
type
XzAutoServerConf struct {
GroupZone string `gorm:
"column:group_zone"
`
ServerId int
OpenTime string
ServerName string
Status int
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
//
定义数据库连接
type
ConnInfo struct {
MyUser string
Password string
Host string
Port int
Db string
}
func main () {
cn := ConnInfo{
"root"
,
123456",
"127.0.0.1"
,
3306,
"xd_data"
,
}
db := DbConn(cn.MyUser,cn.Password,cn.Host,cn.Db,cn.Port)
defer db.Close()
//
关闭数据库链接,defer会在函数结束时关闭数据库连接
var rows []api.XzAutoServerConf
//select
db.Where(
"status=?"
, 0).Select([]string{
"group_zone"
,
"server_id"
,
"open_time"
,
"server_name"
}).Find(&rows)
//update
err := db.Model(&rows).Where(
"server_id=?"
, 80).Update(
"status"
, 1).Error
if
err !=nil {
fmt
.Println(err)
}
fmt
.Println(rows)
}
|
更多grom操作可以参考: https://jasperxu.github.io/gorm-zh/ 。
下面看下Golang GORM使用 。
gorm 。
gorm是go语言中实现数据库访问的ORM(对象关系映射)库。使用这个库,我们可以利用面向对象的方法,更加方便的对数据库中的数据进行CRUD(增删改查).
基本使用 。
下载依赖 。
1
2
|
go get github.com
/jinzhu/gorm
go get github.com
/go-sql-driver/mysql
|
第一个是核心库。 第二个是mysql驱动包.
连接数据库 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
packae main
import
(
"github.com/jinzhu/gorm"
_
"github.com/jinzhu/gorm/dialects/mysql"
"fmt"
)
func main() {
db, err := gorm.Open(
"mysql"
,
"root:root@/test?charset=utf8&parseTime=True&loc=Local"
)
if
err != nil {
fmt
.Println(err)
return
}
else
{
fmt
.Println(
"connection succedssed"
)
}
defer db.Close()
|
新增数据 。
1
2
3
4
5
6
7
8
|
type
User struct {
ID int `gorm:
"primary_key"
`
Name string `gorm:
"not_null"
`
}
func add() {
user := &User{Name:
"zhangsan"
}
db.Create(user)
}
|
删除数据 。
1
2
|
user := &User{ID:1}
db.delete(user)
|
更新数据 。
1
2
|
user := &User{ID:1}
db.Model(user).update(
"Name"
,
"lisi"
)
|
查询数据 。
1
2
3
4
5
6
7
8
|
//
query all
var
users
[]User
db.Find(&
users
)
fmt
.Println(
users
)
//
query one
user := new (User)
db.First(user,1)
fmt
.Println(user)
|
其它 。
判断数据库中是否有结构体对应的表:
1
|
db.HasTable(User{})
|
创建表 。
1
|
db.CreateTable(User{})
|
以上就是gorm基本的用法.
总结 。
以上所述是小编给大家介绍的golang gorm 操作mysql及gorm基本用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。
最后此篇关于golang gorm 操作mysql及gorm基本用法的文章就讲到这里了,如果你想了解更多关于golang gorm 操作mysql及gorm基本用法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我在使用 Go 进行应用程序开发,我使用 gorm 库连接到数据库。我看到 gorm 有 2 个库 github.com/jinzhu/gorm和 gorm.io/gorm . 我不知道该用哪个。它们
我是 Gorm 的新手。我正在尝试进行级联删除,如果我删除一个用户,则与该用户关联的角色(属于)、个人资料(有一个)和书籍(一对多)也将被删除。 我在下面设置了我的模型,但级联似乎不起作用。当我删除我
使用 Jinzhu 的 GORM 包,顺便说一句,我现在有这个结构: type User struct { gorm.Model // The Users username U
Golang 的 GORM 库支持复合主键。但是如何从相关模型中引用它们呢? 例如,假设我有一个 User 和一个 Note 模型: type User struct { Organizati
我正在尝试使用 Grails 项目作为插件,基本上将我的域类放在插件中,然后在多个 Grails 项目中使用它们。 我已经这样做了: grails 创建应用程序网页 grails 创建应用程序插件 在
Golang 的 GORM 库支持复合主键。但是如何从相关模型中引用它们呢? 例如,假设我有一个 User 和一个 Note 模型: type User struct { Organizati
如何省略来自 gorm.Model 的列。例如。创建日期、修改日期。 考虑以下模型: type User struct{ gorm.Model Firstname string
当我在 Grails 中执行 domainObj1 == domainObj2 时,对象是按 ID 进行比较的吗?如果不是,如何比较? 最佳答案 首先,您需要了解 GORM/Grails 在 equa
目前正在为此苦苦挣扎。 我希望能够使用抽象域类来使我能够使用一些通用代码来执行一些常用操作。 我的问题是很多 GORM 操作都是域类上的静态方法,这使得它变得困难。想知道这些方法是否有任何非静态等价物
我有一个结构/模型 type User struct { gorm.Model Name string `gorm:"unique;not null"
我想创建一组在我的应用程序中使用的 gorm 类型。所以我想用我的类型定义一个 map gorm.DB作为键和空的结构{}作为标志: var ( autoMigrations map[gorm
有表 customer_account (postgres) 是从 YII2 迁移过来的。 数据链接: CREATE TABLE public.test_table ( id INTEGER PR
我有一个域对象,它已经有一个名为 versions 的属性,所以我想给内置的 version 属性一个不同的名称(在 GORM 中用于乐观锁定)。例如,我想将其称为 updateCount。 请注意,
我有一个普通的 Grails 3.3.2 应用程序。我可以使用 gradle testintegrationTest 很好地运行测试。但是,当我尝试右键单击并在 IntelliJ 中运行测试类或单个测
除了这样做对性能的明显影响之外,还有什么好的技术原因 不是 设置 grails.gorm.autoFlush = true和 grails.gorm.failOnError = true在 Confi
GORM 似乎不尊重我基于外键关联表的尝试,而我的主键关联有效。 我有 3 个结构,它们与 3 个单独的数据库表相关联。它们的关系如下: Inventory.CustID 与 Customer.Cus
我有一个像这样的 golang 结构的表: Order { ID TransactionID Transaction } Transaction { ID ProfileID
我正在使用 Gorm,对如何从模型中检索嵌套的 SubComments 有一些疑问。我遇到的问题是评论嵌套了两层深,即 Comment.SubComments 没有加载。我是否遗漏了 Preload
我正在尝试使用 golang gorm 创建一个自我引用的一对多关系。每个用户可以创建多个其他用户 (Created),但一个用户始终由另一个用户创建 (UserID)。 type User stru
假设我有 2 个表,它们共享一些列名,例如: table_1 - id - created_at - deleted_at - name - color table_2 - id - created_
我是一名优秀的程序员,十分优秀!