您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

Go 语言流行 ORM 框架

时间:2023-10-05 14:48:51  来源:  作者:程序员技术成长之路

 ORM,全称 Object-Relational MApping,即对象-关系映射,是一种程序设计技术,用于实现面向对象编程语言里对象的表现形式与关系数据库中数据的存储之间的转换。

在实际工作中,我们使用程序操作对象,然后通过对象与数据库之间的映射关系,可以使得我们不再操作 SQL,而是操作程序中的对象,将数据库中的数据映射为对象,这样可以大大提高开发效率,使开发者能够更专注于业务逻辑的实现。

具体来说,比如我们有一张 “用户” 表在 SQL 数据库中,我们可以定义一个 "User" 的对象在我们的代码中,然后我们可以通过操作这个 "User" 对象来实现对 "用户" 表的操作。比如我们创建一个 "User" 对象并保存,实际上是在 "用户" 表中插入一条数据,我们删除一个 "User" 对象,实际上是删除 "用户" 表中的某条数据。

ORM框架就是封装了这种映射关系,提供了对数据库增删查改等操作的接口,让开发者更方便地操作数据库。例如,JAVA的Hibernate,Python/ target=_blank class=infotextkey>Python的SQLAlchemy,Go语言的GORM。

 

一、GORM

Github:https://github.com/go-gorm

    GORM 是一个 Go 语言写的 ORM 库,通过使用它可以简洁地完成对数据库的操作。它支持关联(包括一对一,一对多和多对多)、钩子(在创建、更新、查询、删除之前或之后运行特定的代码)、预加载(即先加载相关的数据,再执行指定操作)、事务处理,以及自动迁移(只是自动创建表,修改字段,不会删除数据且不支持重命名)等功能。

首先,你需要安装 GORM。这可以通过运行以下命令完成:

  • go get -u github.com/jinzhu/gorm

然后,你可以开始使用 GORM,如下就是一个简单的使用例子:

很好,假设我们已经拥有一个名为 user 的表,我们可以这样操作:

首先,定义 User 结构体:

type User struct {  gorm.Model  Name         string `gorm:"type:varchar(255)"`  EmAIl        string `gorm:"type:varchar(100);"`  Role         string `gorm:"type:varchar(255)"`  MemberNumber string `gorm:"type:varchar(50)"`}
// TableName sets the insert table name for this struct typefunc (u *User) TableName() string {  return "users"}

在这个例子中,User 结构体就会映射到 "users" 表。你可以根据需要更改 TableName 函数返回的字符串,来改变 User 结构体对应的数据库表。

注意,如果不提供 TableName 方法,GORM 默认会将结构体名(首字母小写)加上一个 's'作为表名。比如 User 结构体默认对应的表名是 "users" 。

 

代码中连接数据库

  db, err := gorm.Open("MySQL", "root:root@/test?charset=utf8&parseTime=True&loc=Local")  if err != nil {    panic("failed to connect to database")  }  defer db.Close()

接下来,进行表的迁移:

  • db.AutoMigrate(&User{})

user := User{Name: "Test User", Email: "testuser@email.com", Role: "admin", MemberNumber: "123456"}db.Create(&user)



var user Userdb.First(&user, 1) // 找ID为1的用户db.First(&user, "name = ?", "Test User") // 找名字为Test User的用户

  • db.Model(&user).Update("Email", "newemail@email.com")

  • db.Delete(&user)

二、XORM

github:https://github.com/go-xorm/xorm

    XORM 是一个简单且强大的 Go 语言 ORM 库,支持 MySQL, PostgreSQL, SQLite3, SqlServer, Oracle 的数据库操作。包含了基本的数据操作(CRUD)、事务处理、缓存及会话等功能。

首先,你需要安装 XORM。这可以通过运行以下命令完成:

  • go get xorm.io/xorm

然后,你可以开始使用 XORM,下面是一个简单的使用例子:

package main
import (  "fmt"  _ "github.com/go-sql-driver/mysql"  "xorm.io/xorm")
type User struct {  Id int `xorm:"pk autoincr"`  Name string  Email string  Role string  MemberNumber string}
func main() {  engine, err := xorm.NewEngine("mysql", "root:root@/test?charset=utf8")  if err != nil {    fmt.Println("Database connection failed: ", err)    return  }
  // 同步结构体到数据库中  err = engine.Sync2(new(User))  if err != nil {    fmt.Println("Database sync failed: ", err)    return  }
  // 插入  u := User{Name: "Test", Email: "test@abc.com", Role: "admin", MemberNumber: "123456"}
  _, err = engine.Insert(&u)  if err != nil {    fmt.Println("Insert failed: ", err)    return  }
  // 查询  users := make([]User, 0)  err = engine.Find(&users)  if err != nil {    fmt.Println("Find failed: ", err)    return  }
  fmt.Println("Users: ", users)
  _, err = engine.ID(u.Id).Delete(&u)  if err != nil{    fmt.Println("Delete failed: ", err)    return  }
}

 



Tags:框架   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Web Components实践:如何搭建一个框架无关的AI组件库
一、让人又爱又恨的Web ComponentsWeb Components是一种用于构建可重用的Web元素的技术。它允许开发者创建自定义的HTML元素,这些元素可以在不同的Web应用程序中重复使用,并且...【详细内容】
2024-04-03  Search: 框架  点击:(8)  评论:(0)  加入收藏
Htmx,它到底是框架还是库?
在最近的前端开发技术的探讨中,htmx经常成为热议的话题。一些人批评它,认为尽管htmx批评现代前端框架过于复杂,但它自己却似乎也是一个复杂的框架。这种看法值得我们深入思考。...【详细内容】
2024-03-28  Search: 框架  点击:(16)  评论:(0)  加入收藏
五大跨平台桌面应用开发框架:Electron、Tauri、Flutter等
一、什么是跨平台桌面应用开发框架跨平台桌面应用开发框架是一种工具或框架,它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的桌面应用程序。传统上...【详细内容】
2024-02-26  Search: 框架  点击:(47)  评论:(0)  加入收藏
Spring Security权限控制框架使用指南
在常用的后台管理系统中,通常都会有访问权限控制的需求,用于限制不同人员对于接口的访问能力,如果用户不具备指定的权限,则不能访问某些接口。本文将用 waynboot-mall 项目举例...【详细内容】
2024-02-19  Search: 框架  点击:(39)  评论:(0)  加入收藏
Go Gin框架实现优雅地重启和停止
在Web应用程序中,有时候我们需要重启或停止服务器,无论是因为更新代码还是进行例行维护。在这种情景下,我们需要保证应用程序的可用性和数据的一致性。这就需要优雅地关闭和重...【详细内容】
2024-01-30  Search: 框架  点击:(67)  评论:(0)  加入收藏
链世界:一种简单而有效的人类行为Agent模型强化学习框架
强化学习是一种机器学习的方法,它通过让智能体(Agent)与环境交互,从而学习如何选择最优的行动来最大化累积的奖励。强化学习在许多领域都有广泛的应用,例如游戏、机器人、自动驾...【详细内容】
2024-01-30  Search: 框架  点击:(67)  评论:(0)  加入收藏
OpenHarmony - 基于ArkUI框架实现日历应用
前言对于刚刚接触OpenHarmony应用开发的开发者,最快的入门方式就是开发一个简单的应用,下面记录了一个日历应用的开发过程,通过日历应用的开发,来熟悉基本图形的绘制,ArkUI的组件...【详细内容】
2024-01-16  Search: 框架  点击:(54)  评论:(0)  加入收藏
阿里“AI替换万物”框架火爆社区,网友:偶像不需要真人了?
白交 发自 凹非寺量子位 | 公众号 QbitAIReplace Anything as you want。现在只需框住你需要保留的区域,AI就可以替换万物了!比如让霉霉穿上中国旗袍,结果发饰、服装、背景等各...【详细内容】
2024-01-15  Search: 框架  点击:(66)  评论:(0)  加入收藏
分布式事务框架选择与实践
分布式事务是处理跨多个服务的原子操作的关键概念,而选择适合应用场景的框架对于确保事务一致性至关重要。以下是几个常见的分布式事务框架,并讨论它们的使用和实践。1. XA协...【详细内容】
2024-01-05  Search: 框架  点击:(96)  评论:(0)  加入收藏
JavaScript前端框架2024年展望
Angular、Next.js、React和Solid的维护者和创作者们展望2024年,分享了他们计划中的改进。译自2024 Predictions by JavaScript Frontend Framework Maintainers,作者 Loraine...【详细内容】
2024-01-05  Search: 框架  点击:(89)  评论:(0)  加入收藏
▌简易百科推荐
Web Components实践:如何搭建一个框架无关的AI组件库
一、让人又爱又恨的Web ComponentsWeb Components是一种用于构建可重用的Web元素的技术。它允许开发者创建自定义的HTML元素,这些元素可以在不同的Web应用程序中重复使用,并且...【详细内容】
2024-04-03  京东云开发者    Tags:Web Components   点击:(8)  评论:(0)  加入收藏
Kubernetes 集群 CPU 使用率只有 13% :这下大家该知道如何省钱了
作者 | THE STACK译者 | 刘雅梦策划 | Tina根据 CAST AI 对 4000 个 Kubernetes 集群的分析,Kubernetes 集群通常只使用 13% 的 CPU 和平均 20% 的内存,这表明存在严重的过度...【详细内容】
2024-03-08  InfoQ    Tags:Kubernetes   点击:(12)  评论:(0)  加入收藏
Spring Security:保障应用安全的利器
SpringSecurity作为一个功能强大的安全框架,为Java应用程序提供了全面的安全保障,包括认证、授权、防护和集成等方面。本文将介绍SpringSecurity在这些方面的特性和优势,以及它...【详细内容】
2024-02-27  风舞凋零叶    Tags:Spring Security   点击:(52)  评论:(0)  加入收藏
五大跨平台桌面应用开发框架:Electron、Tauri、Flutter等
一、什么是跨平台桌面应用开发框架跨平台桌面应用开发框架是一种工具或框架,它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的桌面应用程序。传统上...【详细内容】
2024-02-26  贝格前端工场    Tags:框架   点击:(47)  评论:(0)  加入收藏
Spring Security权限控制框架使用指南
在常用的后台管理系统中,通常都会有访问权限控制的需求,用于限制不同人员对于接口的访问能力,如果用户不具备指定的权限,则不能访问某些接口。本文将用 waynboot-mall 项目举例...【详细内容】
2024-02-19  程序员wayn  微信公众号  Tags:Spring   点击:(39)  评论:(0)  加入收藏
开发者的Kubernetes懒人指南
你可以将本文作为开发者快速了解 Kubernetes 的指南。从基础知识到更高级的主题,如 Helm Chart,以及所有这些如何影响你作为开发者。译自Kubernetes for Lazy Developers。作...【详细内容】
2024-02-01  云云众生s  微信公众号  Tags:Kubernetes   点击:(50)  评论:(0)  加入收藏
链世界:一种简单而有效的人类行为Agent模型强化学习框架
强化学习是一种机器学习的方法,它通过让智能体(Agent)与环境交互,从而学习如何选择最优的行动来最大化累积的奖励。强化学习在许多领域都有广泛的应用,例如游戏、机器人、自动驾...【详细内容】
2024-01-30  大噬元兽  微信公众号  Tags:框架   点击:(67)  评论:(0)  加入收藏
Spring实现Kafka重试Topic,真的太香了
概述Kafka的强大功能之一是每个分区都有一个Consumer的偏移值。该偏移值是消费者将读取的下一条消息的值。可以自动或手动增加该值。如果我们由于错误而无法处理消息并想重...【详细内容】
2024-01-26  HELLO程序员  微信公众号  Tags:Spring   点击:(84)  评论:(0)  加入收藏
SpringBoot如何实现缓存预热?
缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。那么问题来了,在 Spring Boot 项目启动之后,在什么时候?在哪里可以将数据加载到缓存系...【详细内容】
2024-01-19   Java中文社群  微信公众号  Tags:SpringBoot   点击:(86)  评论:(0)  加入收藏
花 15 分钟把 Express.js 搞明白,全栈没有那么难
Express 是老牌的 Node.js 框架,以简单和轻量著称,几行代码就可以启动一个 HTTP 服务器。市面上主流的 Node.js 框架,如 Egg.js、Nest.js 等都与 Express 息息相关。Express 框...【详细内容】
2024-01-16  程序员成功  微信公众号  Tags:Express.js   点击:(86)  评论:(0)  加入收藏
站内最新
站内热门
站内头条