GORM 配置_GORM V2 中文文档

记:gorm基本使用

前言

在开发过程中,程序员最牛杯的技能就是对数据库的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:@tcp.1:)/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() 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

原文链接:,转发请注明来源!