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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: Golang 语言 Web 框架 beego v2 之写操作

01

介绍


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

Django ORM 和 SQLAlchemy。


已支持的数据库驱动有MySQL、PostgreSQL 和 Sqlite3。


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


本文全篇都是以 MySQL 为例。

02

安装


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


go get github.com/astaxie/beego/client/orm


03

注册


  • 注册驱动
orm.RegisterDriver("mysql", orm.DRMySQL)
  • 参数 1 是驱动名称,参数 2 是驱动类型,需要注意的是,不要忘记导入 MySQL 驱动。
import _ "github.com/go-sql-driver/mysql"
  • 注册数据库
orm.RegisterDataBase("default", "mysql", "root:root@/beego_web?charset=utf8&loc=Local")
  • beego ORM 必须注册一个别名为 default 的数据库,作为默认使用。参数 1 是数据库的别名,用来在 ORM 中切换数据库使用,参数 2 是驱动名称,参数 3 是对应的 dataSource。
    使用 go-sql-driver,驱动默认使用UTC 时间,如需使用本地时间,请设置 loc 的值为 Local。
  • 设置数据库最大空闲连接数
orm.SetMaxIdleConns("default", 10)
  • 根据数据库的别名,设置数据库的最大空闲连接数。
  • 设置数据库最大连接数
orm.SetMaxOpenConns("default", 10)
  • 根据数据库的别名,设置数据库的最大连接数。
  • 注册模型
orm.RegisterModel(new(User))
  • 注册模型,同时注册多个模型,使用英文逗号分隔。
  • 使用表前缀注册模型
orm.RegisterModelWithPrefix("beego_", new(User))
  • 使用表前缀注册模型,同时注册多个模型,使用英文逗号分隔。


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


04

自动建表


  • 默认表名默认的表名规则,是使用驼峰转蛇形,除了开头的大写字母外,遇到大写字母会增加下划线,并且原名已存在的下划线继续保留。
AuthUser -> auth_user
Auth_User -> auth__user
DB_AuthUser -> d_b__auth_user
  • 自定义表名
func (u *User) TableName() string {
  return "user"
}
  • 如果设置了表前缀,自定义表名会在开头拼接上前缀。
  • 自定义存储引擎
func (u *User) TableEngine() string {
  return "INNODB"
}
  • 默认使用 MySQL 数据库设置的存储引擎,如果您需要在程序中指定存储引擎,可以使用以上方式设置。
  • 设置参数
type User struct {
  Id      uint64    `form:"-" orm:"auto;pk;description(主键 ID)"`
  Name    string    `form:"name" orm:"unique;size(30)";description(用户名)`
  Age     uint8     `orm:"index;description(年龄)"`
  Created time.Time `orm:"auto_now_add;type(datetime)"`
  Updated time.Time `orm:"auto_now;type(datetime)"`
}
  • 在结构体中,可以使用 orm 标签设置数据库的属性,限于篇幅,具体使用方法请参考官方手册。
  • 自动建表
err := orm.RunSyncdb("default", false, true)
if err != nil {
  log.Fatalln(err.Error())
  return
}

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

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


05

新增


单条插入:

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。


批量插入:


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

修改



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

删除



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 的安装和使用方法。关于更多细节,请参阅官方手册。





相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
4月前
|
前端开发 JavaScript 开发者
JavaScript:无处不在的Web语言
JavaScript:无处不在的Web语言
|
3月前
|
开发框架 前端开发 Go
【GoGin】(0)基于Go的WEB开发框架,GO Gin是什么?怎么启动?本文给你答案
Gin:Go语言编写的Web框架,以更好的性能实现类似Martini框架的APInet/http、Beego:开源的高性能Go语言Web框架、Iris:最快的Go语言Web框架,完备的MVC支持。
423 1
|
3月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
259 1
|
7月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:路由、中间件、参数校验
Gin框架以其极简风格、强大路由管理、灵活中间件机制及参数绑定校验系统著称。本文详解其核心功能:1) 路由管理,支持分组与路径参数;2) 中间件机制,实现全局与局部控制;3) 参数绑定,涵盖多种来源;4) 结构体绑定与字段校验,确保数据合法性;5) 自定义校验器扩展功能;6) 统一错误处理提升用户体验。Gin以清晰模块化、流程可控及自动化校验等优势,成为开发者的优选工具。
|
7月前
|
开发框架 安全 前端开发
Go Web开发框架实践:模板渲染与静态资源服务
Gin 是一个功能强大的 Go Web 框架,不仅适用于构建 API 服务,还支持 HTML 模板渲染和静态资源托管。它可以帮助开发者快速搭建中小型网站,并提供灵活的模板语法、自定义函数、静态文件映射等功能,同时兼容 Go 的 html/template 引擎,具备高效且安全的页面渲染能力。
|
7月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:使用 Gin 快速构建 Web 服务
Gin 是一个高效、轻量级的 Go 语言 Web 框架,支持中间件机制,非常适合开发 RESTful API。本文从安装到进阶技巧全面解析 Gin 的使用:快速入门示例(Hello Gin)、定义 RESTful 用户服务(增删改查接口实现),以及推荐实践如参数校验、中间件和路由分组等。通过对比标准库 `net/http`,Gin 提供更简洁灵活的开发体验。此外,还推荐了 GORM、Viper、Zap 等配合使用的工具库,助力高效开发。
|
9月前
|
人工智能 自然语言处理 JavaScript
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
Magnitude是一个基于视觉AI代理的开源端到端测试框架,通过自然语言构建测试用例,结合推理代理和视觉代理实现智能化的Web应用测试,支持本地运行和CI/CD集成。
1225 15
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
640 67
|
11月前
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
422 20
|
11月前
|
监控 关系型数据库 MySQL
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
354 0

推荐镜像

更多