Firmeve
1.0.0
1.0.0
  • Firmeve
  • [核心组件]
    • 应用
    • 容器
    • 配置
    • 提供者
    • 事件
    • 日志
    • 命令
  • [基础组件]
    • Http服务
    • 数据验证
    • 数据库
    • 缓存
    • JWT
    • Redis
    • 辅助函数
    • 队列
    • 计划任务
Powered by GitBook
On this page
  • 默认连接
  • 关闭连接
  • 注册Database模块
  • 基础示例
  • 数据表迁移

Was this helpful?

  1. [基础组件]

数据库

## 简介
`Database`模块是基于`gorm`的统一扩展和封装

## 基础示例

### 新建连接
​```go
config := Firmeve.Get(`config`).(*config.Config).Item(`database`)
DB := New(config)
​

默认连接

​go // 新的连接 DB.Connection(driver string) // 默认连接 DB.ConnectionDefault() ​

关闭连接

​go DB.Close(driver) DB.CloseDefault() ​

## 简介

`Firmeve Database` 模块是基于`gorm`的统一扩展和封装。



## 基础配置

```yaml
database:
    # 默认连接
  default: mysql
  # 数据库连接
  connections:
    mysql:
      addr: "root:root@(127.0.0.1)/default?charset=utf8mb4&parseTime=True&loc=Local"
    # 连接池设置  
    pool: 
      max_idle: 100
      max_connection: 50
      max_lifetime: 60
  # 数据库迁移配置
  migration:
    path: "../../../testdata/migrations"

其它如pgsql,sqlite,请参考gorm

注册Database模块

func main() {
    firmeve.RunDefault(firmeve.WithProviders(
        []contract.Provider{
            new(database.Provider),
        },
    ), firmeve.WithCommands(
        []contract.Command{
            new(database.MigrateCommand),
        },
    ))
}

基础示例

// 获取当前默认连接
var conn1 = p.Resolve(`db.connection`).(*gorm.DB)

// 获取指定连接
var conn2 = p.Resolve(`db`).(*database.DB).Connection("sqlite").(*gorm.DB)

//关闭连接
conn.close()
conn2.close()

数据表迁移

如上示例所示,执行migration命令需要提前挂载到root根命令下,firmeve migration主要是基于golang-migrate/migrate库开发的命令扩展。

默认只支持mysql数据库自动迁移,如果需要支持pgsql或其它数据库请自动引入相关数据库

import (
  _ "github.com/golang-migrate/migrate/database/postgres"
  _ "github.com/golang-migrate/migrate/database/sqlite3"
)

主要命令如下:

## 查看所有命令
go run main.go -c .config.yaml migrate --help

# 创建迁移
migrate create NAME

# 执行迁移步骤
migrate step N 

# 回滚步骤
migrate rollback N    

# 运行所有迁移
migrate up     

# 撤销所有迁移
migrate down      

# 强制忽略失败的迁移
migrate force V

# 当前迁移版本
migrate version
Previous数据验证Next缓存

Last updated 4 years ago

Was this helpful?

更多示例请参考:

database/command