go mysql dsn_Golang数据库编程之GORM库入门

bc3f9276acf88283a0569b9b9ef9ee92.png

在线QQ客服:1922638

专业的SQL Server、MySQL数据库同步软件

在上一篇文章中,我们解释了使用Go语言的标准库

包操作数据库过程,尽管使用

打包操作数据也非常方便,但是您需要自己编写每个SQL语句,因此我们可以再次封装它以更好地使用,并使用现有的Go语言开源

该框架是替代您自己的更好方法。

,即对象关系映射(

),可以简单地理解为

中间

映射到编程语言中的特定数据类型(例如

),虽然

该库在Go中实现,非常完整且易于使用

帧。

让我们探索如何使用

框起来!

协会(有一个,有很多,属于,多对多,多态)

钩子(在创建/保存/更新/删除/查找之前或之后)

预载

商业

复合主键

SQL生成器

自动数据库迁移

自定义日志

可扩展,可基于GORM回调编写插件

安装

使用非常简单

您可以

在目录中安装最新版本

帧。

转到-u github.com/jinzhu/gorm

复制代码

安装后,您可以使用

关键字导入

库,开始使用它!

导入" github.com/jinzhu/gorm"

复制代码

框架支持

四个数据库驱动程序,如果要连接到这些数据库,则需要导入不同的驱动程序包并定义不同的格式

(

)。

MySQL

1.导入

import _" github.com/jinzhu/gorm/dialects/mysql"

//或//导入_" github.com/go-sql-driver/mysql"

复制代码

2.DSN

//用户是指用户名,密码是指密码,dbname是数据库名

"用户:密码@/dbname?charset = utf8 \ parseTime = True \ loc = Local"

复制代码

SQL Server

1.导入

import _" github.com/jinzhu/gorm/dialects/postgres"

复制代码

2.DSN

//用户名是指用户名,密码是指密码,主机是指主机地址,端口是指端口号,数据库是指数据库名称

" sqlserver://用户名:密码@主机:端口?数据库= dbname"

复制代码

Sqlite3

1.导入

import _" github.com/jinzhu/gorm/dialects/sqlite"

复制代码

2.DSN

连接到Sqlite3数据库的DSN只需要指定Sqlite3数据库文件的路径,例如:

//数据库路径

/tmp/gorm.db

复制代码

PostgreSQL

1.导入

import _" github.com/jinzhu/gorm/dialects/mssql"

复制代码

2.DSN

//host指主机地址,port指端口号,user指用户名,dbname指数据库名,password指密码

主机= myhost端口= myport用户= gorm dbname = gorm密码= mypassword

复制代码

上面我们定义了DSN以连接到不同的数据库,下面演示了如何使用

方法可以初始化并返回

结构,此结构封装了GORM框架的所有数据库操作方法,以下是

方法的定义:

func Open(方言字符串,args...接口{})(db * DB,错误错误)

复制代码

示例代码:

包主要

导入" github.com/jinzhu/gorm"

import _" github.com/jinzhu/gorm/dialects/mysql" http://导入连接到MySQL数据库的驱动程序包

//DSN

const DSN =" root:123456 @ tcp(localhost:3306)/test?charset = utf8 \ parseTime = True \ loc = Local"

//指定驱动程序

const DRIVER =" mysql"

var db * gorm.DB

func init(){

var err错误

db,err = gorm.Open(DRIVER,DSN)

如果错了! =无{

惊慌失措

}

}

func main(){

defer db.Close()//退出前关闭

//调用db执行特定的逻辑

}

复制代码

在上面的示例中,我们在init方法中进行了初始化

结构,因此在以下示例中,您可以直接使用变量

直接数据库操作。

使用

该函数返回一个

结构完成后,我们可以使用

该结构提供的方法可操作数据库。下面我们演示如何使用

执行最基本的操作,例如创建,查询,更新和删除。

其实

在围棋中

在图书馆

重新包装在结构上,因为

提供许多

相同的方法如下:

func(s * DB)Exec(SQL字符串,值...接口{})* DB

func(s * DB)Row()* sql.Row

func(s * DB)行()(* sql.Rows,错误)

func(s * DB)扫描(目标接口{})* DB

复制代码

另外,使用

在结构上

方法,可以返回一个

这些对象如下:

func(s * DB)DB()* sql.DB

复制代码

以下演示了

基本数据库操作的结构中有一些更简单的方法,但是在演示之前,我们需要定义一个模型,如下所示:

类型User struct {

id int//对应数据表的递增id

用户名字符串

密码字串

电邮字串

电话字符串

}

复制代码

我们将名称定义为

结构

支持根据规则将结构映射到数据表的一行。结构的每个字段代表数据表的一列。结构字段的首字母必须大写。

创建

使用

中间

方法,

将基于

方法模型,在数据表中插入一行。

函数(s * DB)创建(值接口{})* DB//创建一行

func(s * DB)NewRecord(value interface())bool//根据自增id确定主键是否存在

复制代码

示例

func main(){

延迟db.Close()

//具体的逻辑

u:= \用户{用户名:" test_one",密码:" testOne123456",电子邮件:" test_one@163.com",电话:" 13711112222"}

db.Create(u)

如果db.NewRecord(u){

fmt.Println("写入失败")

}其他{

fmt.Println("成功写入")

}

}

复制代码

查询

框入

程序包的原始程序包封装了一个简单的方法,可以直接调用该方法将数据映射到相应的结构模型。使用起来非常简单,例如以下方法:

//返回第一篇文章

func(s * DB)首先(出接口{},其中...接口{})* DB

//返回最后一项

func(s * DB)最后(出接口{},其中...接口{})* DB

//返回符合条件的内容

func(s * DB)查找(出接口{},其中...接口{})* DB

//返回计数(*)结果

func(s * DB)计数(值接口{})* DB

复制代码

示例代码

//查找方法示例

func find(){

var users = make([] * User,0)

db.Model(\ User2 {})。查找(\用户)

fmt.Println(用户)

}

//第一个方法示例

func first(){

var user1,user2用户

db.First(\ user1)

fmt.Println(user1)

db.First(\ user2," id =?",20)

fmt.Println(user2)

}

//最后一个方法示例

func last(){

var user1,user2用户

db.Last(\ user1)

fmt.Println(user1)

db.First(\ user2," id =?",19)

fmt.Println(user2)

}

//计数方法示例

func count(){

var count int

db.Model(\用户{})。计数(\计数)

fmt.Println(计数)

}

复制代码

更新

可以使用更新数据

要么

和其他方法一样,接下来的四种方法需要

方法在一起。

函数(s * DB)保存(值接口{})* DB

func(s * DB)模型(值接口{})* DB

//以下方法需要与Model方法一起使用,以指定通过Model方法更新数据的条件

func(s * DB)更新(属性...接口{})* DB

func(s * DB)UpdateColumn(attrs...interface {})* DB

func(s * DB)UpdateColumns(值接口{})* DB

func(s * DB)更新(值接口{},ignoreProtectedAttrs...bool)* DB

复制代码

代码示例

//Save()方法示例

func save(){

u:= \用户{}

db.First(u)

u.Email =" test@163.com"

db.Save(u)

fmt.Println(u)

}

//更新方法示例

func update(){

u:= \用户{}

db.First(u)

db.Model(u).Update("用户名","你好")

}

//更新方法示例

功能更新(){

u:= \用户{}

db.First(u)

db.Model(\ u).Updates(映射[string]接口{}

复制代码

删除

使用

该方法可以简单地删除符合条件的记录,以下是

方法的定义:

//值如果存在主键id,则将其包含在判断条件中,并可以通过以下方式指定其他条件:

func(s * DB)删除(值接口{},其中...接口{})* DB

复制代码

示例代码

func delete(){

延迟db.Close()

u:= \用户{Id:16}

db.Delete(u)//根据id

db.Delete(\ User {}," username =?"," test_one")//根据其他条件删除

}

复制代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值