赞
踩
在线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")//根据其他条件删除
}
复制代码
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。