Gorm查询操作

package main

import (
	"fmt"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
)

// 定义模型     模型主要起的是承载--映射的作用
type User struct {
	gorm.Model
	Name string
	Age  int
}

/*
new用于任何类型的内存分配,返回指向该类型的零值对象的指针。
make用于引用类型(切片、映射和通道)的初始化,返回一个非零值的已初始化对象。
*/
func main() {
	//连接数据库
	db, err := gorm.Open("mysql", "root:20030303@(localhost:3306)/db1?charset=utf8mb4&parseTime=true&loc=Local")
	if err != nil {
		panic(err)
	}

	defer db.Close()
	//模型与数据库中的表对应起来
	db.AutoMigrate(&User{}) //自动转移

	//创建
	//us := User{Name: "moxu", Age: 20}
	//db.Create(&us)

	//查询
	//var ans User     //声明模型结构体类型
	ans := new(User) //new make 区别   make是给固定的几个,比如map,chan,slice
	db.First(ans)
	fmt.Printf("%#v\n\n", ans)

	//ans2 = make([]User, 0, 10)

	var ans2 []User
	db.First(&ans2)
	fmt.Printf("%#v\n\n", ans2)

	db.Where([]int64{1}, ans) //查询主键为1   gorm 的查询类似于sql  可以进行约束查询  也可以结构体查询 map查询
	fmt.Printf("%#v\n\n", ans)

	//查询 内联条件--方便
	db.Find(ans, "name=?", "moxu")
	fmt.Printf("%#v\n", ans)

	db.FirstOrInit(ans, User{Name: "小王子", Age: 100}) //找不到就初始化这个变量
	fmt.Printf("%#v\n", ans)

	db.Attrs(User{Age: 92929}).FirstOrInit(ans, User{Name: "的骄傲多久啊我"}) //执行查询之前,将Age字段设置为92929,并在数据库中查找姓名为"的骄傲多
	// 久啊我"的用户记录。如果找到了匹配的记录,将会将查询结果赋值给ans;如果没有找到匹配的记录,则会创建一个新的User实例,并将其赋值给ans
	fmt.Printf("%#v\n", ans)

	/*
		Attrs 如果记录未找到,将使用参数初始化struct
		Assign 不管记录是否找到,都将参数赋值给struct
	*/

	/*
		FirstAndCreate会在数据库中创建并保存新的记录,而FirstAndInit只会创建一个新的实例但不保存到数据库。
		FirstAndCreate返回的是查询结果或新创建的记录,而FirstAndInit返回的是查询结果或新创建的实例。
		FirstAndCreate会对数据库进行写操作,可能会引起数据变动,而FirstAndInit只会对内存中的实例进行操作,不会对数据库进行写操作。
	*/

	/*
		select  指定想从数据库查询的字段 默认全部字段
	*/
}

我只想说 比sql繁琐 但是通用性强 换别的数据库的时候只需要进行数据库的连接的修改

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值