github.com/isyscore/isc-gobase@v1.5.3-0.20231218061332-cbc7451899e9/extend/orm/README.md (about)

     1  # orm
     2  对业内的常见Orm进行封装,进行方便使用,目前支持的有
     3  - gorm
     4  - xorm
     5    
     6  注意:<br/>
     7  xorm: 这个是xorm.io不是go-xorm,go-xorm暂时不支持
     8  
     9  ### 单数据源
    10  #### 代码
    11  ```go
    12  import "github.com/isyscore/isc-gobase/extend/orm"
    13  
    14  // gorm:获取默认配置库实例
    15  orm.NewGormDb()
    16  
    17  // gorm:获取默认配置库实例,自定义配置
    18  orm.NewGormDbWitConfig(gormConfig *gorm.Config)
    19  
    20  // xorm:获取默认配置库实例
    21  orm.NewXormDb()
    22  
    23  // xorm:获取默认配置库实例,自定义参数
    24  NewXormDbWithParams(params map[string]string)
    25  ```
    26  #### 配置
    27  ```yaml
    28  base:
    29    datasource:
    30      # 是否启用,默认关闭
    31      enable: true
    32      username: user
    33      password: passwd
    34      host: 10.33.33.33
    35      port: 8080
    36      # 目前支持: mysql、postgresql、sqlite、sqlserver
    37      driver-name: mysql
    38      # 数据库名
    39      db-name: xx_db
    40      # sqlite的的数据库路径;只有sqlite需要配置这个
    41      sqlite-path: xxx.db
    42      # 示例:charset=utf8&parseTime=True&loc=Local 等url后面的配置,直接配置即可
    43      url-config:
    44        xxx: xxxxx
    45        yyy: yyyyy
    46      # 连接池配置
    47      connect-pool:
    48        # 最大空闲连接数
    49        max-idle-conns: 10
    50        # 最大连接数
    51        max-open-conns: 10
    52        # 连接可重用最大时间;带字符(s:秒,m:分钟,h:小时)
    53        max-life-time: 10s
    54        # 连接空闲的最大时间;带字符(s:秒,m:分钟,h:小时)
    55        max-idle-time: 10s
    56  ```
    57  
    58  ### 多数据源
    59  #### 代码
    60  ```go
    61  import "github.com/isyscore/isc-gobase/extend/orm"
    62  
    63  // gorm:根据数据源配置名获取库实例
    64  orm.NewGormDbWithName(datasourceName string)
    65  
    66  // gorm:根据数据源配置名获取库实例,自定义配置
    67  orm.NewGormDbWithNameAndConfig(gormConfig *gorm.Config)
    68  
    69  // xorm:根据数据源配置名获取库实例
    70  orm.NewXormDbWithName(datasourceName string)
    71  
    72  // xorm:根据数据源配置名获取库实例,自定义参数
    73  orm.NewXormDbWithNameParams(datasourceName string, params map[string]string)
    74  
    75  // xorm:主从接口
    76  orm.NewXormDbMasterSlave(masterDatasourceName string, slaveDatasourceNames []string, policies ...xorm.GroupPolicy)
    77  ```
    78  #### 配置
    79  ```yml
    80  base:
    81    datasource:
    82      # 是否启用,默认关闭
    83      enable: true
    84      # 数据源配置名1
    85      xxx-name1:
    86        username: xxx
    87        password: xxx
    88        host: xxx
    89        port: xxx
    90        # 目前支持: mysql、postgresql、sqlite、sqlserver
    91        driver-name: xxx
    92        # 数据库名
    93        db-name: xx_db
    94        # sqlite的的数据库路径
    95        sqlite-path: xxx.db
    96        # 示例:charset=utf8&parseTime=True&loc=Local 等url后面的配置,直接配置即可
    97        url-config:
    98          xxx: xxx
    99          yyy: yyy
   100        # 连接池配置
   101        connect-pool:
   102          # 最大空闲连接数
   103          max-idle-conns: 10
   104          # 最大连接数
   105          max-open-conns: 10
   106          # 连接可重用最大时间;带字符(s:秒,m:分钟,h:小时)
   107          max-life-time: 10s
   108          # 连接空闲的最大时间;带字符(s:秒,m:分钟,h:小时)
   109          max-idle-time: 10s
   110      # 数据源配置名2
   111      xxx-name2:
   112        username: xxx
   113        password: xxx
   114        host: xxx
   115        port: xxx
   116        # 目前支持: mysql、postgresql、sqlite、sqlserver
   117        driver-name: xxx
   118        # 数据库名
   119        db-name: xx_db
   120        # sqlite的的数据库路径
   121        sqlite-path: xxx.db
   122        # 示例:charset=utf8&parseTime=True&loc=Local 等url后面的配置,直接配置即可
   123        url-config:
   124          xxx: xxxxx
   125          yyy: yyyyy
   126        # 连接池配置
   127        connect-pool:
   128          # 最大空闲连接数
   129          max-idle-conns: 10
   130          # 最大连接数
   131          max-open-conns: 10
   132          # 连接可重用最大时间;带字符(s:秒,m:分钟,h:小时)
   133          max-life-time: 10s
   134          # 连接空闲的最大时间;带字符(s:秒,m:分钟,h:小时)
   135          max-idle-time: 10s
   136  ```
   137  ### 示例:gorm
   138  ```go
   139  func TestGorm1(t *testing.T) {
   140      db, _ := orm.NewGormDb()
   141  
   142      // 删除表
   143      db.Exec("drop table isc_demo.gobase_demo")
   144  
   145      //新增表
   146      db.Exec("CREATE TABLE gobase_demo(\n" +
   147          "  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',\n" +
   148          "  `name` char(20) NOT NULL COMMENT '名字',\n" +
   149          "  `age` INT NOT NULL COMMENT '年龄',\n" +
   150          "  `address` char(20) NOT NULL COMMENT '名字',\n" +
   151          "  \n" +
   152          "  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n" +
   153          "  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',\n" +
   154          "\n" +
   155          "  PRIMARY KEY (`id`)\n" +
   156      ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测试表'")
   157  
   158      // 新增
   159      db.Create(&GobaseDemo{Name: "zhou", Age: 18, Address: "杭州"})
   160      db.Create(&GobaseDemo{Name: "zhou", Age: 11, Address: "杭州2"})
   161      
   162      // 查询:一行
   163      var demo GobaseDemo
   164      db.First(&demo).Where("name=?", "zhou")
   165      
   166      fmt.Println(demo)
   167  }
   168  ```
   169  
   170  ### 示例:xorm
   171  单数据源
   172  ```go
   173  func TestXorm1(t *testing.T) {
   174      db, _ := orm.NewXormDb()
   175      
   176      // 删除表
   177      db.Exec("drop table isc_demo.gobase_demo")
   178      
   179      //新增表
   180      db.Exec("CREATE TABLE gobase_demo(\n" +
   181          "  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',\n" +
   182          "  `name` char(20) NOT NULL COMMENT '名字',\n" +
   183          "  `age` INT NOT NULL COMMENT '年龄',\n" +
   184          "  `address` char(20) NOT NULL COMMENT '名字',\n" +
   185          "  \n" +
   186          "  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n" +
   187          "  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',\n" +
   188          "\n" +
   189          "  PRIMARY KEY (`id`)\n" +
   190      ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测试表'")
   191      
   192      db.Table("gobase_demo").Insert(&GobaseDemo{Name: "zhou", Age: 18, Address: "杭州"})
   193      // 新增
   194      db.Table("gobase_demo").Insert(&GobaseDemo{Name: "zhou", Age: 18, Address: "杭州"})
   195      
   196      var demo GobaseDemo
   197      db.Table("gobase_demo").Where("name=?", "zhou").Get(&demo)
   198      
   199      fmt.Println(demo)
   200  }
   201  ```
   202  
   203  ### 注意
   204  请不要在业务中使用init方法获取db,因为这个时候config的配置还没有加载出来
   205  
   206  ## 框架配置
   207  上面全都是数据库的配置,对于一些orm框架本身也会有一些配置,这里支持下(version >= 1.5.2)
   208  支持配置:
   209  - 打印sql
   210  ```yaml
   211  base:
   212    orm:
   213      show-sql: true
   214  ```
   215  #### 线上动态开启和关闭sql的话
   216  ```yaml
   217  curl -X PUT http://localhost:xxx/{api-prefix}/{api-module}/config/update -d '{"key":"baes.orm.show-sql", "value":"true"}'
   218  ```
   219  或者如下
   220  ```yaml
   221  curl -X PUT http://localhost:xxx/{api-prefix}/{api-module}/config/update -d '{"key":"baes.logger.group.orm.level", "value":"debug"}'
   222  ```
   223  这两个配置功能是等同的,一个是直接基于logger来修改,一个是基于orm的配置来修改
   224  
   225  
   226  
   227  ### 更多配置
   228  在一些场景下,也需要mysql本身提供一些配置,就是最近遇到gorm默认在mariadb下面是报失败,因此增加了这样的配置(version >= 1.5.2)
   229  ```yaml
   230  base:
   231    datasource:
   232      mysql:
   233        server-version: ""
   234        skip-initialize-with-version: false
   235        default-string-size: 0
   236        disable-with-returning: false
   237        disable-datetime-precision: false
   238        dont-support-rename-index: false
   239        dont-support-rename-column: false
   240        dont-support-for-share-clause: false
   241        dont-support-null-as-default-value: false
   242  ```
   243  以上这些配置其实对应的是如下的代码,示例
   244  ```go
   245  // 其中的`DisableWithReturning` 对应的就是上面的 base.datasource.mysql.disable-with-returning,其他更多的配置都在里面
   246  gorm.Open(mysql.New(mysql.Config{Conn: conn, DisableWithReturning: true}))
   247  ```