美文网首页
gorm基本使用

gorm基本使用

作者: 今日开发技巧分享 | 来源:发表于2023-04-23 17:20 被阅读0次

前言

在开发过程中,程序员最牛杯的技能就是对数据库的CRUD操作,那在操作数据库的过程中,程序员需要知道哪些事情?

  • 数据库链接
  • sql语句
  • 新增(Create)、读取(Read)、更新(Update)、删除数据(Delete)
  • ORM(Object Relational Mapping),对象关系映射,指将数据库表的结构与对象数据结构进行自动映射

在Java web 中,有mybatiesmybaties plusspring boot jpahibernate等优秀ORM框架,在开发过程中简化我们的数据库操作代码,专注业务代码开发,提高开发效率。

在go项目开发中,有类似这样的ORM框架吗?gorm 就是go语言的一个ORM框架。

gorm 使用

本节将了解gorm的基本使用:

  • gorm 安装
  • gorm 数据库链接
  • gorm crud操作
  • gorm orm 基本映射

gorm 安装

# gorm 
go get -u gorm.io/gorm
# gorm  mysql数据库链接驱动
go get -u gorm.io/driver/mysql

创建数据库链接

  dns := "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local"
  db, err := gorm.Open(mysql.Open(dns), &gorm.Config{})
    if err != nil {
        logrus.Fatalln("初始化mysql数据库连接错误。%v", err)
    }

CRUD

mport (
    "errors"

    "gorm.io/gorm"
    "org.chatgin/internal/config"
)
// 结构体必须依赖 gorm.Model 
type UserBasic struct {
    gorm.Model
    Account  string //账号
    Username string // 用户明
    Passwrod string // 登录密码
    State    int16  // 用户状态, -1 - 异常;0 - 锁定;1 - 正常;
}

type UserRepository struct {
}

// 初始化表结构,如果存在则不创建
func InitTables() {
  // 如果表不存在则自动创建表
    config.MysqlDB.AutoMigrate(&repository.UserBasic{})

}

// 根据用户名获取用户信息
func (u *UserRepository) GetByUsername(account string) (user UserBasic, err error) {
    var userBasci UserBasic
    if err := config.MysqlDB.Where("account = ? ", account).First(userBasci).Error; err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
        return userBasci, err
    }
    return userBasci, nil

}


// 新增数据
func (u *UserRepository) Create(user UserBasic) error {
    if err := config.MysqlDB.Create(user).Error; err != nil {
        return err
    }
    return nil
}

// 修改用户数据
func (u *UserRepository) Updates(user UserBasic) error {
    config.MysqlDB.Model(&user).Updates(&user)
    return nil
}

// 删除数据
func (u *UserRepository) Delete(id uint) error {
    var user UserBasic
    config.MysqlDB.Delete(&user, id)
    return nil
}

注:上面代码中的config.MysqlDB是我自己定义的数据库链接对象,以后会持续分享

分析

gorm 如何实现orm的呢?我们来看看 gorm.Model的源码:

type Model struct {
    ID        uint `gorm:"primarykey"`
    CreatedAt time.Time
    UpdatedAt time.Time
    DeletedAt DeletedAt `gorm:"index"`
}

然后,我们看看它自动创建的表结构是怎样的:

mysql> desc user_basics;
+------------+---------------------+------+-----+---------+----------------+
| Field      | Type                | Null | Key | Default | Extra          |
+------------+---------------------+------+-----+---------+----------------+
| id         | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| created_at | datetime(3)         | YES  |     | NULL    |                |
| updated_at | datetime(3)         | YES  |     | NULL    |                |
| deleted_at | datetime(3)         | YES  | MUL | NULL    |                |
| account    | longtext            | YES  |     | NULL    |                |
| username   | longtext            | YES  |     | NULL    |                |
| passwrod   | longtext            | YES  |     | NULL    |                |
| state      | smallint(6)         | YES  |     | NULL    |                |
+------------+---------------------+------+-----+---------+----------------+

通过观察,表字段与go 的struts字段的对应关系是,表字段多单词通过_分割

  • gorm 默认根据数据库字段命名规则与struts 的命名规则,通过反射进行映射关系。比如:CreatedAt 这个字段生成的数据库字段是 created_at
  • gorm 也可以通过 gorm:"column:数据库字段"进行显示映射
  • ...

总结

gorm 还有很多特性,比如数据权限、事物、hook 等,大家可以自行查阅官方文档(推介):
https://gorm.io/docs/models.html

相关文章

  • Golang GORM使用

    Golang GORM使用 gorm gorm是go语言中实现数据库访问的ORM(对象关系映射)库。使用这个库,我...

  • go mod tidy

    go mod tidy用于加载依赖比如我在程序中使用 但是我只安装了gorm.io/gorm而没有安装gorm.i...

  • 【GORM】使用示例

    记录ORM的使用方式 GORM文档手册[https://gorm.io/zh_CN/docs/index.html]

  • 使用gorm

    为何使用orm 我一直以来都不太喜欢用orm,觉得不够灵活。但是当我需要批量保存数据的时候,体验了一下orm,它的...

  • Gorm笔记(一)-- Gorm使用

    gorm文档:http://gorm.book.jasperxu.com/ 在搭建GinWeb的时候需要初始化or...

  • gorm源码2 tag映射

    参考 理解reflect 通过reflect获取tag值 gorm外键使用 gorm指定外键和关联外键 目的 分析...

  • Go Web 编程--应用ORM

    这篇文章我们主要探究下面这些内容。 gorm的基本用法 如何管理ORM的使用 如何合理规划项目目录结构 安装gor...

  • Gorm scope实现分页

    Gorm是一个非常棒的ORM。今天,我将向您展示如何使用Gorm Scopes创建分页。 Scopes可以实现一些...

  • gorm批量插入数据

    最近用 gin+mysql编写web工程,其中使用了gorm库对数据库进行操作。由于gorm目前暂未提供 批量插入...

  • github上Go项目star排名21~30

    Gorm[https://github.com/go-gorm/gorm]:https://github.com/...

网友评论

      本文标题:gorm基本使用

      本文链接:https://www.haomeiwen.com/subject/deryjdtx.html