1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- package model
- import (
- "fmt"
- "os"
- "gorm.io/driver/mysql"
- "gorm.io/gorm"
- "gorm.io/gorm/schema"
- )
- var DB *gorm.DB
- func Construct(isMigrate bool) {
- dbPrefix := os.Getenv("DB_PREFIX")
- var err error
- DB, err = gorm.Open(mysql.Open(fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
- os.Getenv("DB_USERNAME"),
- os.Getenv("DB_PASSWORD"),
- os.Getenv("DB_HOST"),
- os.Getenv("DB_PORT"),
- os.Getenv("DB_DATABASE"))),
- &gorm.Config{
- NamingStrategy: schema.NamingStrategy{
- SingularTable: true,
- TablePrefix: dbPrefix,
- },
- DisableForeignKeyConstraintWhenMigrating: true,
- SkipDefaultTransaction: true,
- QueryFields: true,
- })
- if err != nil {
- panic(err)
- }
- // debug模式输出所有sql语句
- // if os.Getenv("APP_DEBUG") == "true" {
- DB = DB.Debug()
- // }
- sqlDB, err := DB.DB()
- if err != nil {
- panic(err)
- }
- sqlDB.SetMaxIdleConns(10)
- sqlDB.SetMaxOpenConns(100)
- // 开始迁移
- if isMigrate {
- Migrate()
- }
- }
- func Migrate() {
- // 用户信息
- DB.Set("gorm:table_options", "ENGINE=InnoDB default charset = utf8mb4").AutoMigrate(&User{})
- // 用户角色关系
- DB.Set("gorm:table_options", "ENGINE=InnoDB default charset = utf8mb4").AutoMigrate(&UserRole{})
- // 角色
- DB.Set("gorm:table_options", "ENGINE=InnoDB default charset = utf8mb4").AutoMigrate(&Role{})
- }
- // 分页查询的Scope
- func Paginate(page int, pageSize int) func(db *gorm.DB) *gorm.DB {
- return func(db *gorm.DB) *gorm.DB {
- if page == 0 {
- page = 1
- }
- switch {
- case pageSize > 100:
- pageSize = 100
- case pageSize <= 0:
- pageSize = 10
- }
- offset := (page - 1) * pageSize
- return db.Offset(offset).Limit(pageSize)
- }
- }
- // 分页查询的Scope
- func Limit(limit int) func(db *gorm.DB) *gorm.DB {
- return func(db *gorm.DB) *gorm.DB {
- switch {
- case limit > 100:
- limit = 100
- case limit <= 0:
- limit = 10
- }
- return db.Limit(limit)
- }
- }
|