go语言gorm使用

  • 持久层框架gorm——数据库配置
var jsonData map[string]interface{}//全局变量:存放配置文件的map对象
func initJSON() {
	bytes, err := ioutil.ReadFile("./configuration.json")//读取全局配置文件
	if err != nil {
		fmt.Println("ReadFile: ", err.Error())
	}
	configStr := string(bytes[:])
	reg       := regexp.MustCompile(`/\*.*\*/`)

	configStr  = reg.ReplaceAllString(configStr, "")
	bytes      = []byte(configStr)

	if err := json.Unmarshal(bytes, &jsonData); err != nil {//将读取到的字节解析成map对象
		fmt.Println("invalid config: ", err.Error())
	}
	fmt.Println("Success to ",jsonData["database"])
}
type dBConfig struct {
	Dialect       string
	Database      string
	User          string
	Password      string
	Charset       string
	Host          string
	Port          int
	SQLLog        bool
	URL           string
	MaxIdleConns  int
	MaxOpenConns  int
}
// 1.DBConfig 数据库相关配置
var DBConfig dBConfig
func initDB() {
	utils.SetStructByJSON(&DBConfig, jsonData["database"].(map[string]interface{}))//将database json对象赋值给dbconfig结构体
	portStr := fmt.Sprintf("%d", DBConfig.Port)
	url := "{user}:{password}@tcp({host}:{port})/{database}?charset={charset}&parseTime=True&loc=Local"//定义一个url
	url  = strings.Replace(url, "{database}", DBConfig.Database, -1)//n<0替换所有匹配的,将dbconfig中的对象替换带该url中
	url  = strings.Replace(url, "{user}",     DBConfig.User,     -1)
	url  = strings.Replace(url, "{password}", DBConfig.Password, -1)
	url  = strings.Replace(url, "{host}",     DBConfig.Host,     -1)
	url  = strings.Replace(url, "{port}",     portStr,           -1)
	url  = strings.Replace(url, "{charset}",  DBConfig.Charset,  -1)
	fmt.Println(url)
	DBConfig.URL = url//再将url返回进该配置文件
}
func init() {//在此处进行初始化
	initJSON()
	initDB()
}
  • 入口main函数中——建立连接
func init()  {
	db, err := gorm.Open(config.DBConfig.Dialect, config.DBConfig.URL)
	if err!=nil{
		fmt.Println(err.Error())
		os.Exit(-1)
	}
	if config.DBConfig.SQLLog  {
		db.LogMode(true)
	}
	db.DB().SetMaxIdleConns(config.DBConfig.MaxIdleConns)
	db.DB().SetMaxOpenConns(config.DBConfig.MaxOpenConns)
	model.DB=db
}

3 . 简单查询

func main() {
	var cart model.Cart
	model.DB.Where("id=?", 7).First(&cart)
	fmt.Println("openid=",cart.OpenId)
}

可以在具体的controller层或者service层进行查询操作

也可以将dao层操作封装到具体方法内

func  Get(id uint)  Cart{//public方法大写
	var cart Cart
	DB.Where("id=?", id).First(&cart)
	return  cart
}

然后在main中调用

func main() {
	//var cart =&model.Cart{ID:7}  //可以封装成查询cond对象
	//model.DB.Where(cart).First(cart)
	get := model.Get(7)
	fmt.Println("openid=",cart.OpenId)
}

但是这样有个问题,由于go中没有对象调方法的概念,这里不存在Dao对象,无法显性的表示是哪个Dao执行Get方法,而是直接通过包名(model)+公开方法(Get),所有貌似封装也没什么意义

你可能感兴趣的:(Go)