Go 语言流行 ORM 框架

欢迎关注我的公众号:程序员技术成长之路

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

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

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

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

一、GORM

github:github.com/go-gorm

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

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

arduino 复制代码
go get -u github.com/jinzhu/gorm

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

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

首先,定义 User 结构体:

go 复制代码
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 type
func (u *User) TableName() string {
  return "users"
}

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

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

代码中连接数据库

go 复制代码
 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{})

sql 复制代码
user := User{Name: "Test User", Email: "[email protected]", Role: "admin", MemberNumber: "123456"}
db.Create(&user)

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

sql 复制代码
db.Model(&user).Update("Email", "[email protected]")

scss 复制代码
db.Delete(&user)

二、XORM

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

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

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

arduino 复制代码
go get xorm.io/xorm

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

go 复制代码
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: "[email protected]", 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
  }

}
相关推荐
Code哈哈笑2 小时前
【图书管理系统】用户注册系统实现详解
数据库·spring boot·后端·mybatis
用手手打人2 小时前
SpringBoot(一)--- Maven基础
spring boot·后端·maven
Code哈哈笑4 小时前
【基于Spring Boot 的图书购买系统】深度讲解 用户注册的前后端交互,Mapper操作MySQL数据库进行用户持久化
数据库·spring boot·后端·mysql·mybatis·交互
Javatutouhouduan4 小时前
线上问题排查:JVM OOM问题如何排查和解决
java·jvm·数据库·后端·程序员·架构师·oom
多多*4 小时前
Spring之Bean的初始化 Bean的生命周期 全站式解析
java·开发语言·前端·数据库·后端·spring·servlet
Villiam_AY5 小时前
Go 后端中双 token 的实现模板
开发语言·后端·golang
拾贰_C9 小时前
【SpringBoot】MyBatisPlus(MP | 分页查询操作
java·spring boot·后端·spring·maven·apache·intellij-idea
就叫飞六吧15 小时前
Spring Security 集成指南:避免 CORS 跨域问题
java·后端·spring
冼紫菜16 小时前
[特殊字符]CentOS 7.6 安装 JDK 11(适配国内服务器环境)
java·linux·服务器·后端·centos
秋野酱17 小时前
Spring Boot 项目的计算机专业论文参考文献
java·spring boot·后端