十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
orm
创新互联专注于博州网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供博州营销型网站建设,博州网站制作、博州网页设计、博州网站官网定制、重庆小程序开发服务,打造博州网络公司原创品牌,更为您提供博州网站排名全网营销落地服务。
-
即object/relation
mapping
详细说明参见:
大概地说,这类框架的是为了将类对象和关系建立映射,在应用程序和数据库的io之间建立一个中间层,在程序中只需要直接操作对象(数据库中对象的增删改查),而不用去关心数据库中表的列啊,关系啊什么的
举个例子:
以前一直自己一个人在家吃饭,需要自己去买米买菜,然后自己再做,做完了还得收拾,觉得好麻烦,但是也得做,没办法啊,苦逼的单身-
-
这也就相当于传统的操作关系(未使用orm);
而终于有一天,发现去饭馆吃饭很方便,不用操心买菜啊什么的,也不用操心吃完还得去收拾一大堆什么的,点好菜,吃好付钱走人就行了
-
什么做饭烧菜的事儿都有别人去做好,具体人家怎么做,就不用管了
-
-
这饭馆就相当于是一个orm的映射框架,为你处理那些烦琐的无聊的事,只把最重要的环节--吃饭--让你来做
而点菜就相当于你在做orm映射的配置,你告诉饭馆你要吃点啥,饭馆就根据你的需要去配菜准备,做好了就给你送上来!
可以先直接使用go自带的http server 框架,这个框架涵盖了绝大多数的功能,比如request response 的基本封装,简单的路由管理,文件上传处理。
如果发现Go 自带的框架解决不了问题,可以引入相应的第三方组件,比如ORM可以采用中国人写的gorm 比如web 的session 管理可以使用gorilla/session
当然你也可以直接上大一统的框架比如你提到的beego 还有大名鼎鼎的martini 。不过不推荐,因为这样的大框架和Go 语言本身的模块设计有冲突。
实际开发建议用vscode 加Go 插件来做IDE,基本包含了其他成熟IDE的所有功能,而且还自带强大的debug 功能。其他IDE debug 用起来非常麻烦比如idea 和liteIDE。题主也可以自己试下。
ORM(ObjectRelationalMapping)框架采用元数据来描述对象一关系映射细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。
基本内容
ORM框架采用元数据来描述对象一关系映射细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。只要提供了持久化类与表的映射关系,ORM框架在运行时就能参照映射文件的信息,把对象持久化到数据库中。当前ORM框架主要有三种:Hibernate,iBATIS,EclipseLink。
models.go
============================
package main
import (
"github点抗 /astaxie/beego/orm"
)
type User struct {
Id int
Name string
Profile *Profile `orm:"rel(one)"` // OneToOne relation
}
type Profile struct {
Id int
Age int16
User *User `orm:"reverse(one)"` // 设置反向关系(可选)
}
func init() {
// 需要在init中注册定义的model
orm.RegisterModel(new(User), new(Profile))
}
main.go
==============
package main
import (
"fmt"
"github点抗 /astaxie/beego/orm"
_ "github点抗 /go-sql-driver/mysql"
)
func init() {
//orm.RegisterModel(new(User))
orm.RegisterDataBase("default", "mysql", "ta3:ta3@/ta3?charset=utf8")
orm.RunSyncdb("default", false, true) // true 改成false,如果表存在则会给出提示,如果改成false则不会提示 , 这句话没有会报主键不存在的错误
}
func main() {
o := orm.NewOrm()
o.Using("default") // 默认使用 default,你可以指定为其他数据库
user := User{Id: 1}
err := o.Read(user)
if err == orm.ErrNoRows {
fmt.Println("查询不到")
} else if err == orm.ErrMissPK {
fmt.Println("找不到主键")
} else {
fmt.Println(user.Id, user.Name)
}
}
执行结果:
create table `user`
-- --------------------------------------------------
-- Table Structure for `main.User`
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `user` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`name` varchar(255) NOT NULL,
`profile_id` integer NOT NULL UNIQUE
) ENGINE=InnoDB;
create table `profile`
-- --------------------------------------------------
-- Table Structure for `main.Profile`
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `profile` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`age` smallint NOT NULL
) ENGINE=InnoDB;
查询不到
第二次再执行:
table `user` already exists, skip
table `profile` already exists, skip
查询不到
如果 orm.RunSyncdb("default", false, true)改成 orm.RunSyncdb("default", false, false)
则执行结果不会提示。