Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Golang 语言 Web 框架 beego v2 之写操作

Golang 语言 Web 框架 beego v2 之写操作

作者头像
frank.
发布于 2020-12-08 06:52:16
发布于 2020-12-08 06:52:16
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

01

介绍

beego ORM 是一个强大的 Go 语言 ORM 框架。她的灵感主要来自

Django ORM 和 SQLAlchemy。

已支持的数据库驱动有MySQLPostgreSQL 和 Sqlite3。

beego v2.x 和 beego v1.x 在 ORM 上的区别是,beego v2.x 的 ORM 对象被设计为无状态的,它是线程安全的,建议大家在使用时,一个数据库只对应一个 ORM 对象。

本文全篇都是以 MySQL 为例。

02

安装

如果您使用的是 beego 框架,beego ORM 已默认安装,如果您没有使用 beego 框架,可使用 go get 安装 beego ORM:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
go get github.com/astaxie/beego/client/orm

03

注册

注册驱动

参数 1 是驱动名称,参数 2 是驱动类型,需要注意的是,不要忘记导入 MySQL 驱动。

注册数据库

beego ORM 必须注册一个别名为 default 的数据库,作为默认使用。参数 1 是数据库的别名,用来在 ORM 中切换数据库使用,参数 2 是驱动名称,参数 3 是对应的 dataSource。

设置数据库最大空闲连接数

根据数据库的别名,设置数据库的最大空闲连接数。

设置数据库最大连接数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
orm.SetMaxOpenConns("default", 10)

注册模型

注册模型,同时注册多个模型,使用英文逗号分隔。

使用表前缀注册模型

使用表前缀注册模型,同时注册多个模型,使用英文逗号分隔。

注册模型和使用表前缀注册模型,不可同时使用,重复注册模型,会导致成程序 panic。

04

自动建表

默认表名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
AuthUser -> auth_user
Auth_User -> auth__user
DB_AuthUser -> d_b__auth_user

自定义表名

如果设置了表前缀,自定义表名会在开头拼接上前缀。

自定义存储引擎

默认使用 MySQL 数据库设置的存储引擎,如果您需要在程序中指定存储引擎,可以使用以上方式设置。

设置参数

在结构体中,可以使用 orm 标签设置数据库的属性,限于篇幅,具体使用方法请参考官方手册。

自动建表

参数 1 是数据库别名,参数 2 是布尔类型的 force,参数 3 是布尔类型的 verbose。force 为 true 代表 drop table 后再建表;verbose 为 true 代表打印建表的执行过程。

自动建表功能在 force 为 false 时,会自动创建新增的字段和索引。删除或修改操作,需要用户自行手动处理。

05

新增

单条插入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func (u *UserController) Create() {
  o := orm.NewOrm() // 创建一个 Ormer
  name := u.GetString("name", "unknow")
  age, _ := u.GetUint8("age", 0)
  user := &models.User{
    Name: name,
    Age: age,
  }
  id, err := o.Insert(user)
  if err != nil {
    log.Fatalln(err.Error())
    return
  }
  fmt.Println("id:", id)
}

Insert 方法插入单条数据,接收参数必须是指针类型,返回值有两个,分别是自增id 和 err。

批量插入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func (u *UserController) Create() {
  o := orm.NewOrm() // 创建一个 Ormer
  users := []models.User{}
  _ = json.Unmarshal(u.Ctx.Input.RequestBody, &users)
  rows, err := o.InsertMulti(2, users)
  if err != nil {
    log.Fatalln(err)
    return
  }
  fmt.Println("rows:", rows)
}

InsertMulti 方法批量插入数据,参数 1 是批量插入的数量,参数 2 是 slice,参数 1 的值为 1 时,将会按照顺序插入 slice 中的数据。返回值有两个,分别是插入行数和 err。

06

修改

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func (u *UserController) Update() {
  web.BConfig.WebConfig.AutoRender = false
  o := orm.NewOrm()
  user := models.User{}
  _ = json.Unmarshal(u.Ctx.Input.RequestBody, &user)
  rows, err := o.Update(&user, "Name")
  if err != nil {
    log.Println(err.Error())
    return
  }
  fmt.Println("rows:", rows)
}

Update 方法更新数据,参数 1 是更新对象,参数 2 是更新的字段,多个字段用英文逗号分隔,默认更新多有字段。返回值有两个,分别是更新行数和err。

07

删除

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func (u *UserController) Delete() {
  web.BConfig.WebConfig.AutoRender = false
  o := orm.NewOrm()
  id, _ := u.GetUint64("id", 0)
  user := models.User{
    Id: id,
  }
  rows, err := o.Delete(&user)
  if err != nil {
    log.Println(err.Error())
    return
  }
  fmt.Println("rows:", rows)
}

Delete 方法删除数据,参数是删除对象,返回值有两个,分别是更新行数和 err。

08

总结

本文开篇介绍了 beego ORM 的设计思路和已支持的数据库驱动,并且介绍了 v2 和 v1 的区别,然后详细介绍了 beego ORM 的安装和使用方法。关于更多细节,请参阅官方手册。

参考资料:

https://beego.me/docs

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Go语言开发栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Golang 语言 Web 框架 beego v2 之读操作
beego v2.x 和 beego v1.x 在 ORM 上的区别是,beego v2.x 的 ORM 对象被设计为无状态的,它是线程安全的,建议大家在使用时,一个数据库只对应一个 ORM 对象。
frank.
2020/12/08
1.1K0
golang学习之beego增删改查代码实现
记录下使用beego的增删改查实现,数据库使用mysql,完整代码如下: package main import ( _ "crud_beego/routers" //自动注册路由
用户1141560
2017/12/26
1.1K0
Beego Models 之 一ORM 使用方法
beego ORM 是一个强大的 Go 语言 ORM 框架。她的灵感主要来自 Django ORM 和 SQLAlchemy。
若与
2018/08/03
4.3K0
Beego Models 之 一ORM 使用方法
golang办公流程引擎初体验js-ojus/flow——系列三
1.管理员定义好流程类型doctype,这个下面再分流程类型workflow1,workflow2,workflow下再具体分为节点node1,node2,
hotqin888
2019/02/25
1.9K0
golang办公流程引擎初体验js-ojus/flow——系列三
Beego Models之二对象的 CRUD 操作高级查询
对 object 操作的四个方法 Read / Insert / Update / Delete
若与
2018/08/03
4.6K0
Beego Models之二对象的 CRUD 操作高级查询
beego 前后端分离登录验证
main.go beego前后端分离静态页面承载有点费劲,不过也好只是比gin多几句代码而已
landv
2019/07/01
2.3K1
Golang 语言 Web 框架 beego v2 之控制器方法和输入输出数据
创建 beego 的控制器,首先要匿名组合 beego.Controller,beego.Controller实现了接口 beego.ControllerInterface,beego.ControllerInterface 定义了许多函数,这样我们创建的控制器就有了所有 beego.Controller 的方法,我们可以重写这些方法实现自己的业务逻辑。
frank.
2020/12/08
1.1K0
Golang 语言 Web 框架 beego v2 之模板
beego 的模板处理引擎采用的是 Go 内置的 html/template 包进行处理,而且 beego 的模板处理逻辑是采用了缓存编译方式,也就是所有的模板会在 beego 应用启动的时候全部编译然后缓存在 map 里面。
frank.
2020/12/08
2K0
beego中orm关联查询使用解析
这两天在学习beego框架,之前学习的时候遗漏了很多东西,比如orm、缓存、应用监控、模板处理等,这里将通过实例记录下如何使用beego自带的orm进行关联查询操作。 首先说明下,beego的orm有
用户1141560
2017/12/26
2.6K0
beego中orm关联查询使用解析
Beego学习——orm实现简单的crud
package main import ( "fmt" "github.com/astaxie/beego/logs" "github.com/astaxie/beego/orm" _ "github.com/go-sql-driver/mysql" ) // Model Struct type User0 struct { Id int // beego 默认设置id为主键,自动递增 Name string `orm:"size(100)"` } func init() {
传说之下的花儿
2023/04/16
2430
从零开始创建一个基于Go语言的web service
20个小时的时间能干什么?也许浑浑噩噩就过去了,也许能看一些书、做一些工作、读几篇博客、再写个一两篇博客,等等。而黑客马拉松(HackAthon),其实是一种自我挑战--看看自己在有限的短时间内究竟能做出些什么。比如:让一个毫无某种语言经验的人用该种语言去实现4个如下的Restful API(假设此种语言为Go)。 * 语言 Go * 框架 随意 * 后端数据库 Redis或者SQLite,只需要一种即可 ## API 列表 * POST /location * GET /location * GET
李海彬
2018/03/20
2.1K0
Beego学习——Jwt实现用户登录注册
启动: bee run -gendoc=true -downdoc=true 文章内容中有的注释是个人的理解,可能不严谨 使用 mysql 的话记得导入包: _ "github.com/go-sql-driver/mysql" 1. models包 1.1 jwt.go // JWT : header payload signature // json web token: 标头 有效负载 签名 const ( SecretKEY string = "JWT-Se
传说之下的花儿
2023/04/16
8050
Go实战-基于Go协程和channel的使用
Go实战-基于Go协程和channel的使用 鉴于项目代码的保密性,本文只拿出登录和用户信息的接口来做展示,作为学习的参考我觉得足够了,其他的接口也是依葫芦画瓢的方式在重复着这些代码的操作。 php代码的low逼性,我就不贴出来,登录的功能大家可以想象的到,无非就是校验登录信息,登录错误次数统计等。而用户信息就比较复杂,是几个表的结合体,这个接口就有的操作空间,可以看到数据库以及go的一些基本用法等。下面根据代码来进行具体的说明。
用户6680840
2022/06/08
6940
Go实战项目-Beego的orm的基本使用
beego的使用三部曲: 1、在controllers里面创建控制器 2、在module里面创建数据模型 3、在router设置路由控制 对于beego的orm使用有很多种方式,我们主要采用过滤器的方式来实现。因为前面说过,严禁使用原生的sql语句。
用户6680840
2022/06/08
1.3K0
Beego学习——实现用户登录登出
controller包   user.go import ( "demo03.cn/models" "encoding/json" "fmt" "github.com/astaxie/beego" "github.com/astaxie/beego/orm" ) type UserController struct { beego.Controller } func (c *UserController) Reg() { resp :=make(map[string]interfac
传说之下的花儿
2023/04/16
7490
在Ubuntu上快速搭建基于Beego的RESTful API
最近在研究Go,打算基于Go做点Web API,于是经过初步调研,打算用Beego这个框架,然后再结合其中提供的ORM以及Swagger的集成,可以快速搭建一个RESTful API的网站
深蓝studyzy
2022/06/16
5620
在Ubuntu上快速搭建基于Beego的RESTful API
golang orm
package main import ( "fmt" "github.com/astaxie/beego/orm" _"github.com/go-sql-driver/mysql" ) type User struct{ Id int Name string `orm:"size(100)"` Fuck string Admin int } func init() { // set default database orm.R
landv
2019/05/31
6021
golang: beego 框架ORM 之CRUD操作
本地启动一个docker化安装的mysql 环境 套接字127.0.0.1:3306 账户 root/123456
IT工作者
2022/07/25
3630
golang : MVC之models
MVC是系统开发常用的框架,Models 模型层用来处理数据 ,本篇使用beego框架,演示 models层的用法
IT工作者
2022/07/25
5910
提升beego插入sqlite的效率
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/details/57180890
hotqin888
2018/09/11
1.2K0
提升beego插入sqlite的效率
推荐阅读
相关推荐
Golang 语言 Web 框架 beego v2 之读操作
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验