import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
"fmt"
)
type User struct {
gorm.Model
Name string `gorm:"default:'dazai'"` //设置name默认值,如果创建对象时没有传name,那么就会给赋默认值
Age int64
}
//连接数据库:用户名:密码@协议(IP:port)/数据库名?
db, err := gorm.Open("mysql", "用户名:密码@(127.0.0.1:3306)/ttms?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil {
panic(err)
}
defer db.Close()
//创建表,自动迁移,(把结构体和数据表进行对应)
db.AutoMigrate(&User{})
u := User{Name:"asd", Age:18}
db.Create(&u)
u1 := User{Age:20} //创建的时候没有写name,那么就会赋上默认值
db.Create(&u1)
var user User
//查询第一条记录
db.First(&user)
fmt.Printf("user:%#v\n", user)
//查询全部记录
var users []User
db.Find(&users)
fmt.Printf("users:%#v\n", users)
但是返回的是整个结构体,只不过其他值都是零值
//查询指定字段
db.Select("name").Where("Age = ?", 18).Find(&users)
fmt.Println(users)
更新某个特定的字段
var user User
db.First(&user)
//将查询出来的第一条记录的name改成小王子,update只能更新一个字段
db.Model(&user).Update("name", "小王子")
将拿到的第一行记录的name和age都做修改
var user User
db.First(&user)
m1 := map[string]interface{} {
"name" : "qwe",
"age" : 28,
}
db.Model(&user).Updates(m1)
带有条件的更新
var user User
m1 := map[string]interface{} {
"name" : "zxcvzbv",
"age" : 28,
}
//将age=20的记录修改为name="zxcvzbv",age=28
db.Model(&user).Where("age = ?", 20).Updates(m1)
删除掉name=“123”的记录,但是是软删除,还是会有记录,只是最后可以被覆盖掉
var user User
db.Debug().Where("name = ?", "123").Delete(&user)
import (
"IMProject/dao"
"IMProject/utils"
"fmt"
"github.com/spf13/viper"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
mysql:
dns: 账号:密码@(127.0.0.1:3306)/ginchat?charset=utf8mb4&parseTime=True&loc=Local
func InitConfig() {
//Viper主要是用于处理各种格式的配置文件,简化程序配置的读取问题。
viper.SetConfigName("app") //配置文件的名字
viper.AddConfigPath("config") //配置文件的路径
err := viper.ReadInConfig() //查找并读取配置文件
if err != nil {
fmt.Println(err)
}
fmt.Println("config app inited")
}
type UserBasic struct {
gorm.Model
Name string
Password string
Phone string `vaild:"matches(^1[3-9]{1}\\d{9}$)"`
Email string `valid:"email"`
Identity string
ClientIP string
ClientPort string
Salt string
LoginTime time.Time
HeartbeatTime time.Time
LoginOutTime time.Time
IsLoginOut bool
DeviceInfo string //设备信息
}
func main() {
utils.InitConfig()
db, err :=gorm.Open(mysql.Open(viper.GetString("mysql.dns")),&gorm.Config{})
if err != nil {
panic(err)
}
//自动迁移
db.AutoMigrate(&dao.UserBasic{})
}