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 ```