同时支持三个数据库需求
最后更新于:2022-04-02 02:47:30
[TOC]
## 注意
### 同时支持三个数据库需求
#### 在设置 strcut 时,把字段和表名字都设置为大写
```
type SYS_CONFIG struct {
CFG_ID string `xorm:"not null pk default '' VARCHAR(50) " `
CFG_NAME string `xorm:"default '' VARCHAR(100) "`
CFG_DATA string `xorm:"default '' VARCHAR(50) "`
CFG_TYPE string `xorm:"default '' VARCHAR(50) "`
CFG_STATUS int `xorm:"default 1 INT(2) "`
}
```
#### 设置名称映射
```
// 自定义初始化
type tableTolowerMap struct {}
func (t tableTolowerMap) Obj2Table(s string) string {
return strings.ToLower(s)
}
func (t tableTolowerMap) Table2Obj(s string) string {
return strings.ToLower(s)
}
Engine.SetTableMapper(tableTolowerMap{}})
Engine.SetColumnMapper(tableTolowerMap{})
```
## demo
```
//同一 三大数据库
package main
import (
"github.com/go-xorm/xorm"
"github.com/go-xorm/core"
_ "github.com/go-sql-driver/mysql"
_ "github.com/lunny/godbc"
_ "github.com/mattn/go-oci8"
"log"
"os"
)
type DbType struct {
DbName string
DbSource string
}
type SYS_CONFIG struct {
CFG_ID string `xorm:"not null pk default '' VARCHAR(50) " `
CFG_NAME string `xorm:"default '' VARCHAR(100) "`
CFG_DATA string `xorm:"default '' VARCHAR(50) "`
CFG_TYPE string `xorm:"default '' VARCHAR(50) "`
CFG_STATUS int `xorm:"default 1 INT(2) "`
}
var dbType = []DbType{
{DbName: "mysql", DbSource: "root:www.upsoft01.com@/antdbms?charset=utf8"},
{DbName: "odbc", DbSource: "driver={SQL Server};Server=192.168.186.138;Database=antdbms;uid=sa;pwd=123;"}, //mssql
{DbName: "oci8", DbSource: "root/123@192.168.0.120:1521/ORCL"},
}
//var index = 0 //mysql
//var index = 1 //mssql
var index = 2 //oci8
func main() {
log.Println("启动数据库数据库引擎 ",dbType[index].DbName)
Engine, err := xorm.NewEngine(dbType[index].DbName, dbType[index].DbSource)
assert(err,"连接引擎出错")
Engine.SetTableMapper(tableTolowerMap{}})
Engine.SetColumnMapper(tableTolowerMap{})
Engine.ShowSQL(true)
Engine.SetMaxIdleConns(5)
//通过结构体获取单挑条
config :=new(SYS_CONFIG)
_,err=Engine.Get(config)
assert(err," get is error ")
log.Println("通过结构体获取 : ",config,"\n\n")
//获取单条
config1 := make(map[string]string)
//_,err = Engine.Table("sys_config").Get(&config1)
assert(err,"通过数据错误报错 ")
log.Println("通过条件获取 :",config1,"\n\n")
//获取多条
config2 :=make([]map[string]string,0)
err=Engine.Table("sys_config").Find(&config2)
assert(err,"获取多条报错 ")
log.Println("获取多条",config2,"\n\n")
//非struct的单个字段的数组
cfgId :=make([]string,0)
err = Engine.Table("sys_config").Cols("CFG_ID").Find(&cfgId)
assert(err,"获取个别字段出错 ")
log.Println("获取个别字段 ",cfgId,"\n\n")
//非struct的多个字段的数组
cfgIdList :=make([][]string,0)
err = Engine.Table("sys_config").Cols("CFG_ID","CFG_TYPE").Find(&cfgIdList)
assert(err,"获取多个字段出错 ")
log.Println("获取多别字段 ",cfgIdList,"\n\n")
}
func assert(err error,msg string){
if err != nil {
log.Println(msg,err)
os.Exit(0)
}
}
```
';