重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
orm
创新互联建站专注于中大型企业的成都做网站、成都网站设计和网站改版、网站营销服务,追求商业策划与数据分析、创意艺术与技术开发的融合,累计客户上千余家,服务满意度达97%。帮助广大客户顺利对接上互联网浪潮,准确优选出符合自己需要的互联网运用,我们将一直专注品牌网站建设和互联网程序开发,在前进的路上,与客户一起成长!
-
即object/relation
mapping
详细说明参见:
大概地说,这类框架的是为了将类对象和关系建立映射,在应用程序和数据库的io之间建立一个中间层,在程序中只需要直接操作对象(数据库中对象的增删改查),而不用去关心数据库中表的列啊,关系啊什么的
举个例子:
以前一直自己一个人在家吃饭,需要自己去买米买菜,然后自己再做,做完了还得收拾,觉得好麻烦,但是也得做,没办法啊,苦逼的单身-
-
这也就相当于传统的操作关系(未使用orm);
而终于有一天,发现去饭馆吃饭很方便,不用操心买菜啊什么的,也不用操心吃完还得去收拾一大堆什么的,点好菜,吃好付钱走人就行了
-
什么做饭烧菜的事儿都有别人去做好,具体人家怎么做,就不用管了
-
-
这饭馆就相当于是一个orm的映射框架,为你处理那些烦琐的无聊的事,只把最重要的环节--吃饭--让你来做
而点菜就相当于你在做orm映射的配置,你告诉饭馆你要吃点啥,饭馆就根据你的需要去配菜准备,做好了就给你送上来!
models.go
============================
package main
import (
"github.com/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.com/astaxie/beego/orm"
_ "github.com/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)
则执行结果不会提示。
ORM(ObjectRelationalMapping)框架采用元数据来描述对象一关系映射细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。
基本内容
ORM框架采用元数据来描述对象一关系映射细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。只要提供了持久化类与表的映射关系,ORM框架在运行时就能参照映射文件的信息,把对象持久化到数据库中。当前ORM框架主要有三种:Hibernate,iBATIS,EclipseLink。