资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

go语言中orm的修改,go的orm框架

Golang 项目中 ORM 选择,gorm xorm 对比

之前用 beego 中自带的 orm,感觉有一些不是很满足需求的地方,而且想要尝试一些新的 orm,写一篇记录一下。

成都创新互联自2013年创立以来,是专业互联网技术服务公司,拥有项目成都网站设计、成都做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元郸城做网站,已为上家服务,为郸城各地企业和个人服务,联系电话:028-86922220

在 xorm 和 gorm 之间对比了一下:

p.s. 需要说明的是,对比非常初级,而且项目处于很早期,也抱着尝试一下不行再改的心理,并没有想要得到一个孰优孰劣的结论。

想来想去,对于一个成熟的项目可能 gorm 更适合,但是 xorm 好像近期在频繁 commit,有一种想要追赶的意思。

那我先试试 xorm ,不知道为什么选的这个,可能是想试试看新款吧。(大雾

2017/07/04

可怕,xorm 不支持外键关系。一对一啥的。

GoWeb框架beego关于orm使用问题

话说,框架不是给一个人用的,是给一个团队用的。让大家都保持同一种代码结构。

以上只是说各大php框架。golang这种追求性能的语言是否需要一个框架仍然是个未知数。我所见过的大部分go类库的实现还是挺简单的。golang本身语法支持也比较简单。

如何使用go语言的beego框架的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)

则执行结果不会提示。

beego.orm怎么设置数据库名称

目前beego的ORM支持三种数据库:

1.Sqlite

2.PostgreSql

3.MySql

如果要使用其中的数据库必须要把对应的drive(go语言对于的数据库引擎)加入到import中:

import (

_ "github.com/go-sql-driver/mysql"

_ "github.com/lib/pq"

_ "github.com/mattn/go-sqlite3"

Beego脱坑(十三)ORM基本增删改查

title: Beego脱坑(十三)ORM基本增删改查

tags: go,beego,orm

author : Clown95

本章我们将来了解如何使用ORM进行最基础的增删改查。为了减少篇幅,我们重新创建 Student 表,如果你不清楚怎么创建表可以查看文章

Beego脱坑(十二)ORM介绍并创建第一个表 。

Student具体结构如下:

我们先创建表单页面 ormdemo.html ,效果如下:

首先我们实现插入数据:

注册路由:

接下来我们插入几组数据

使用图形工具查询,可以看到全部成功插入

接下来我们实现通过StuId 来查询数据

注册路由:

我们查询学号为1 的数据,成功得到内容

接下来我们实现数据的更新,数据更新跟插入大同小异,唯一的区别就是:插入调用的是 Insert ,而更新数据使用的是 Update 。

注册路由:

我们在之前插入数据的时候,插入了两个名字为小白的数据, 现在我们需要把 StuId=1 的数据改成:

修改完毕后,我们查看表检测是否成功:

最后我们将实现数据删除:

注册路由:

我们来删除 StuId=3 的数据, 通过图形管理界面可以看到,成功删除。

尝试用golang 1.18泛型实现orm

这几天golang社区对泛型的讨论非常多的,一片热火朝天的景象。对我们广大gopher来说总归是好事。

泛型很有可能会颠覆我们之前的很多设计,带着这种疑问和冲动,我准备尝试用golang泛型实现几个orm的常见功能。

本文并没完全实现通用的orm,只是探讨其实现的一种方式提供各位读者做借鉴。

虽然golang有了泛型,但是目前在标准库sql底层还没有改造,目前还有很多地方需要用到reflect。

调用方式

这个部分跟传统的orm使用上没有太大区别,没办法不使用反射的情况下,泛型的方式可能变得有点繁琐。

调用方式

和创建table类似,写入数据好像比没有之前的orm有优势。

读取数据是非常高频的操作,所以我们稍作封装。

调用方式

稍微比原先的orm方式有了多一点想象空间,比如 在[T any]做更明确的约束,比如要求实现Filter定制方法。

鉴于本人能力还认证有限,目前还没有发现泛型对orm剧烈的改进和突破的可能。未来如果go对底层sql做出改动,或者实现诸如Rust那种Enum方式,可能会带来更多的惊喜。


网页标题:go语言中orm的修改,go的orm框架
链接分享:http://cdkjz.cn/article/hcooec.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220