gorm postgresql学习

时隔两个月,终于又开始写文章了,这两个月母亲去世,去世前我辞职回家照顾,到后面办丧事等等一直都没碰过代码。今天入职了新公司,继续代码之路吧。
首先是什么是gorm,gorm是golang里的一个用来操作数据库的包,帮你集成了很多的数据库操作方法,还有一些比如钩子,关联等方法。然后postgresql是一种对象关系数据库系统,简单来说就是mysql的升级版,性能更加强大,运行更加稳定,字段类型更加丰富,就是学起来有点头秃,我也才刚开始学所以知道的不多。那么就开始学习gorm吧。
一.安装环境和软件就先跳过了。直接开始连接数据库
这是gorm的文档地址,https://gorm.io/zh_CN/docs/index.html

import (
	"gorm.io/driver/postgres"
	"gorm.io/gorm"
)

func main(){
//使用open函数连接postgresql数据库,第一个参数填数据库类型,后面的参数分别是数据库地址,端口,数据库名称,密码,是否ssl模式连接,时区
	dsn := "host=127.0.0.1 port=5432 user=postgres dbname=postgres password=root sslmode=disable TimeZone=Asia/Shanghai"
	db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
	if err != nil {
		log.Println(err)
	}
}

这样就连接上一个数据库了,那么我们继续,首先要操作数据库肯定得有一张表,那么我们现在开始定义表的模型,在项目目录下新建一个models文件夹,然后新建一个users.go文件,然后在里面定义一个模型

package models

import (
	"time"
)

type Users struct {
	Id        int       `json:"id" gorm:"column:id;unique;primaryKey;autoIncrement"`
	Name      string    `json:"name" gorm:"column:name"`
	Age       int       `json:"age" gorm:"column:age"`
	CreatedAt time.Time `json:"created_at" gorm:"column:created_at"`
	UpdatedAt time.Time `json:"updated_at" gorm:"column:updated_at"`
}

//定义表名
func (Users) TableName() string {
	return "users"
}

这里我们来说一下字段标签,字段标签指的是定义的字段后面那些unique,primaryKey等等,这里我直接上文档的连接https://gorm.io/zh_CN/docs/models.html#embedded_struct
定义好模型之后我们当然就是开始插入记录了,gorm的新增记录用的是Create方法。

func main() {
	dsn := "host=127.0.0.1 port=5432 user=postgres dbname=postgres password=root sslmode=disable TimeZone=Asia/Shanghai"
	db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
	if err != nil {
		log.Println(err)
	}

	//将数据库里的表格和定义的模型结构体保持一致,如果数据库里没有表的话会自动创建表,如果是模型里有的字段,数据里没有也会自动新建,还有键、约束和索引,并且会更改现有列的类型(如果其大小、精度、是否为空可更改的话)
	db.AutoMigrate(&models.Users{})
	a := &models.Users{Name: "测试", Age: 18}
	result := db.Create(a)
	log.Println(a.Id)                // 返回插入数据的主键
	log.Println(result.Error)        // 返回 error
	log.Println(result.RowsAffected) // 返回插入记录的条数
	//批量插入
	b := []models.Users{{Name: "测试1", Age: 19}, {Name: "测试2", Age: 20}, {Name: "测试3", Age: 21}}
	result1 := db.Create(&b)
	log.Println(b[0].Id)              // 返回插入数据的主键
	log.Println(result1.Error)        // 返回 error
	log.Println(result1.RowsAffected) // 返回插入记录的条数
}

运行结果

2021/09/24 15:22:04 23
2021/09/24 15:22:04 <nil>
2021/09/24 15:22:04 1
2021/09/24 15:22:04 24
2021/09/24 15:22:04 <nil>
2021/09/24 15:22:04 3

数据库里的数据
在这里插入图片描述
二.查找记录
主要使用Find函数,其他还有First,Last,Take函数

	user := models.Users{}
	users := []models.Users{}
	// 查找第一条记录,主键升序
	db.First(&user)
	//查找最后一条记录
	db.Last(&user)
	result := db.First(&user)
	fmt.Println(result.RowsAffected) // 返回找到的记录数
	fmt.Println(result.Error)        // returns error or nil
	//如果主键是数字类型,可以直接用主键搜索
	db.First(&user, 10)
	// // SELECT * FROM users WHERE id = 10;
	db.First(&user, "10")
	// SELECT * FROM users WHERE id = 10;
	db.Find(&users, []int{1, 2, 3})
	// SELECT * FROM users WHERE id IN (1,2,3);

这些就是基本的查询,然后是加上where条件的查询

	//等于查询
	db.Where("name = ?", "测试666").First(&user)
	// 非等查询
	db.Where("name <> ?", "jinzhu").Find(&users)
	// IN查询
	db.Where("name IN ?", []string{"jinzhu", "jinzhu 2"}).Find(&users)
	// LIKE查询
	db.Where("name LIKE ?", "%jin%").Find(&users)
	// 多条件查询
	db.Where("name = ? AND age >= ?", "jinzhu", "22").Find(&users)
	// Time
	lastWeek := "2021-09-23 10:57:00"
	today := "2021-09-24 15:22:00"
	db.Where("updated_at > ?", lastWeek).Find(&users)
	// BETWEEN
	db.Where("created_at BETWEEN ? AND ?", lastWeek, today).Find(&users)

你可能感兴趣的:(golang,gorm,postgresql,数据库,golang)