gorm的使用
什么是orm?
对象关系映射,把面向对象的概念与关系型数据库中表的概念对应起来。
拿Go语言为例,struct就相当于数据库中的表,struct中的字段就相当于表中的属性。
不需要再使用sql语句,而是通过面向对象的思想,与类或结构体关联起来。
下文来自gorm官方文档,根据个人理解进行改编,并使用了连接池。
安装
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
快速入门
package initalization
import (
"fmt"
"github.com/nj-jay/gorm/model"
"github.com/spf13/viper"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"os"
"strings"
)
func GormMysql() *gorm.DB {
viper.SetConfigName("config")
viper.SetConfigType("toml")
viper.AddConfigPath("./conf")
err := viper.ReadInConfig()
if err != nil {
fmt.Println("read error")
os.Exit(0)
}
username := viper.GetString("mysql.username")
password := viper.GetString("mysql.password")
ip := viper.GetString("mysql.ip")
port := viper.GetString("mysql.port")
database := viper.GetString("mysql.database")
path := strings.Join([]string{username, ":", password,
"@(", ip, ":", port, ")/", database, "?charset=utf8&parseTime=true&loc=Local"}, "")
if db, err := gorm.Open(mysql.Open(path), &gorm.Config{}); err != nil {
os.Exit(0)
return nil
} else {
sqlDB, _ := db.DB()
sqlDB.SetMaxIdleConns(10)
sqlDB.SetMaxOpenConns(100)
return db
}
}
func MysqlTables(db *gorm.DB) {
err := db.AutoMigrate(
&model.User{},
)
if err != nil {
fmt.Println("register table error")
}
}
package global
import "gorm.io/gorm"
var (
GMD_DB *gorm.DB
)
package model
type User struct {
ID uint
Name string
Age int
Birthday string
}
package service
import (
"fmt"
"github.com/nj-jay/gorm/global"
"github.com/nj-jay/gorm/model"
)
//添加
func Add() {
user := model.User{Name: "Jinzhu", Age: 18, Birthday: "2000.06.19"}
global.GMD_DB.Create(&user)
}
//删除
func Delete() {
global.GMD_DB.Delete(&model.User{}, 10)
}
//更新
func Upgrade() {
var user model.User
global.GMD_DB.Model(&model.User{}).Where("name=?", "nj-jay").Update("name", "hello")
global.GMD_DB.Where("id=?", 6).First(&user)
fmt.Println(user)
}
//查询
func Query() {
var user model.User
global.GMD_DB.First(&user)
fmt.Println("============first=============")
fmt.Println(user)
fmt.Println("=============all==============")
var users []model.User
global.GMD_DB.Find(&users)
fmt.Println(users)
fmt.Println("==========WHERE===========")
global.GMD_DB.Where("name=?", "nj-jay").Find(&users)
fmt.Println(users)
}