orm

package
v1.4.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 2, 2022 License: Apache-2.0 Imports: 20 Imported by: 1

README

orm

对业内的常见Orm进行封装,进行方便使用,目前支持的有

  • gorm
  • xorm
单数据源
代码
import "github.com/isyscore/isc-gobase/extend/orm"

// gorm:获取默认配置库实例
orm.NewGormDb()

// gorm:获取默认配置库实例,自定义配置
orm.NewGormDbWitConfig(gormConfig *gorm.Config)

// xorm:获取默认配置库实例
orm.NewXormDb()

// xorm:获取默认配置库实例,自定义参数
NewXormDbWithParams(params map[string]string)
配置
base:
  datasource:
    # 是否启用,默认关闭
    enable: true
    username: user
    password: passwd
    host: 10.33.33.33
    port: 8080
    # 目前支持: mysql、postgresql、sqlite、sqlserver
    driver-name: mysql
    # 数据库名
    db-name: xx_db
    # sqlite的的数据库路径;只有sqlite需要配置这个
    sqlite-path: xxx.db
    # 示例:charset=utf8&parseTime=True&loc=Local 等url后面的配置,直接配置即可
    url-config:
      xxx: xxxxx
      yyy: yyyyy
    # 连接池配置
    connect-pool:
      # 最大空闲连接数
      max-idle-conns: 10
      # 最大连接数
      max-open-conns: 10
      # 连接可重用最大时间;带字符(s:秒,m:分钟,h:小时)
      max-life-time: 10s
      # 连接空闲的最大时间;带字符(s:秒,m:分钟,h:小时)
      max-idle-time: 10s
多数据源
代码
import "github.com/isyscore/isc-gobase/extend/orm"

// gorm:根据数据源配置名获取库实例
orm.NewGormDbWithName(datasourceName string)

// gorm:根据数据源配置名获取库实例,自定义配置
orm.NewGormDbWithNameAndConfig(gormConfig *gorm.Config)

// xorm:根据数据源配置名获取库实例
orm.NewXormDbWithName(datasourceName string)

// xorm:根据数据源配置名获取库实例,自定义参数
NewXormDbWithNameParams(datasourceName string, params map[string]string)
配置
base:
  datasource:
    # 是否启用,默认关闭
    enable: true
    # 数据源配置名1
    xxx-name1:
      username: xxx
      password: xxx
      host: xxx
      port: xxx
      # 目前支持: mysql、postgresql、sqlite、sqlserver
      driver-name: xxx
      # 数据库名
      db-name: xx_db
      # sqlite的的数据库路径
      sqlite-path: xxx.db
      # 示例:charset=utf8&parseTime=True&loc=Local 等url后面的配置,直接配置即可
      url-config:
        xxx: xxx
        yyy: yyy
      # 连接池配置
      connect-pool:
        # 最大空闲连接数
        max-idle-conns: 10
        # 最大连接数
        max-open-conns: 10
        # 连接可重用最大时间;带字符(s:秒,m:分钟,h:小时)
        max-life-time: 10s
        # 连接空闲的最大时间;带字符(s:秒,m:分钟,h:小时)
        max-idle-time: 10s
    # 数据源配置名2
    xxx-name2:
      username: xxx
      password: xxx
      host: xxx
      port: xxx
      # 目前支持: mysql、postgresql、sqlite、sqlserver
      driver-name: xxx
      # 数据库名
      db-name: xx_db
      # sqlite的的数据库路径
      sqlite-path: xxx.db
      # 示例:charset=utf8&parseTime=True&loc=Local 等url后面的配置,直接配置即可
      url-config:
        xxx: xxxxx
        yyy: yyyyy
      # 连接池配置
      connect-pool:
        # 最大空闲连接数
        max-idle-conns: 10
        # 最大连接数
        max-open-conns: 10
        # 连接可重用最大时间;带字符(s:秒,m:分钟,h:小时)
        max-life-time: 10s
        # 连接空闲的最大时间;带字符(s:秒,m:分钟,h:小时)
        max-idle-time: 10s
示例:gorm
func TestGorm1(t *testing.T) {
    db, _ := orm.NewGormDb()

    // 删除表
    db.Exec("drop table isc_demo.gobase_demo")

    //新增表
    db.Exec("CREATE TABLE gobase_demo(\n" +
        "  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',\n" +
        "  `name` char(20) NOT NULL COMMENT '名字',\n" +
        "  `age` INT NOT NULL COMMENT '年龄',\n" +
        "  `address` char(20) NOT NULL COMMENT '名字',\n" +
        "  \n" +
        "  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n" +
        "  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',\n" +
        "\n" +
        "  PRIMARY KEY (`id`)\n" +
    ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测试表'")

    // 新增
    db.Create(&GobaseDemo{Name: "zhou", Age: 18, Address: "杭州"})
    db.Create(&GobaseDemo{Name: "zhou", Age: 11, Address: "杭州2"})
    
    // 查询:一行
    var demo GobaseDemo
    db.First(&demo).Where("name=?", "zhou")
    
    fmt.Println(demo)
}
示例:xorm

单数据源

func TestXorm1(t *testing.T) {
    db, _ := orm.NewXormDb()
    
    // 删除表
    db.Exec("drop table isc_demo.gobase_demo")
    
    //新增表
    db.Exec("CREATE TABLE gobase_demo(\n" +
        "  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',\n" +
        "  `name` char(20) NOT NULL COMMENT '名字',\n" +
        "  `age` INT NOT NULL COMMENT '年龄',\n" +
        "  `address` char(20) NOT NULL COMMENT '名字',\n" +
        "  \n" +
        "  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n" +
        "  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',\n" +
        "\n" +
        "  PRIMARY KEY (`id`)\n" +
    ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测试表'")
    
    db.Table("gobase_demo").Insert(&GobaseDemo{Name: "zhou", Age: 18, Address: "杭州"})
    // 新增
    db.Table("gobase_demo").Insert(&GobaseDemo{Name: "zhou", Age: 18, Address: "杭州"})
    
    var demo GobaseDemo
    db.Table("gobase_demo").Where("name=?", "zhou").Get(&demo)
    
    fmt.Println(demo)
}
注意

请不要在业务中使用init方法获取db,因为这个时候config的配置还没有加载出来

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AddGormHook

func AddGormHook(hook GobaseGormHook)

func AddXormHook

func AddXormHook(hook GobaseXormHook)

func NewGormDb

func NewGormDb() (*gorm.DB, error)

func NewGormDbWitConfig

func NewGormDbWitConfig(gormConfig *gorm.Config) (*gorm.DB, error)

func NewGormDbWithName

func NewGormDbWithName(datasourceName string) (*gorm.DB, error)

func NewGormDbWithNameAndConfig

func NewGormDbWithNameAndConfig(datasourceName string, gormConfig *gorm.Config) (*gorm.DB, error)

func NewXormDb

func NewXormDb() (*xorm.Engine, error)

func NewXormDbMasterSlave

func NewXormDbMasterSlave(masterDatasourceName string, slaveDatasourceNames []string, policies ...xorm.GroupPolicy) (*xorm.EngineGroup, error)

func NewXormDbWithName

func NewXormDbWithName(datasourceName string) (*xorm.Engine, error)

func NewXormDbWithNameParams

func NewXormDbWithNameParams(datasourceName string, params map[string]string) (*xorm.Engine, error)

func NewXormDbWithParams

func NewXormDbWithParams(params map[string]string) (*xorm.Engine, error)

func WrapDriverName

func WrapDriverName(driverName string) string

Types

type DefaultXormHook

type DefaultXormHook struct {
	// contains filtered or unexported fields
}

func (*DefaultXormHook) AfterProcess

func (defaultHook *DefaultXormHook) AfterProcess(c *contexts.ContextHook) error

func (*DefaultXormHook) BeforeProcess

func (defaultHook *DefaultXormHook) BeforeProcess(c *contexts.ContextHook) (context.Context, error)

type GobaseGormHook

type GobaseGormHook interface {
	Before(ctx context.Context, driverName string, parameters map[string]any) (context.Context, error)
	After(ctx context.Context, driverName string, parameters map[string]any) (context.Context, error)
	Err(ctx context.Context, driverName string, err error, parameters map[string]any) error
}

type GobaseSqlHookProxy

type GobaseSqlHookProxy struct {
	DriverName string
}

func (*GobaseSqlHookProxy) After

func (proxy *GobaseSqlHookProxy) After(ctx context.Context, query string, args ...interface{}) (context.Context, error)

func (*GobaseSqlHookProxy) Before

func (proxy *GobaseSqlHookProxy) Before(ctx context.Context, query string, args ...interface{}) (context.Context, error)

func (*GobaseSqlHookProxy) OnError

func (proxy *GobaseSqlHookProxy) OnError(ctx context.Context, err error, query string, args ...interface{}) error

type GobaseXormHook

type GobaseXormHook interface {
	BeforeProcess(c *contexts.ContextHook, driverName string) (context.Context, error)
	AfterProcess(c *contexts.ContextHook, driverName string) error
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL