Gorm操作数据库

方式1,直接在代码中写上数据库的基本信息

导包

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{})

得到表为
Gorm操作数据库_第1张图片

插入数据

	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)

方式2 将数据库的信息放在配置文件中,从配置文件中读取

导包

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{})
}

你可能感兴趣的:(数据库,mysql,java)