golang中gorm包的操作

1.简单的连接和CURD

package main

import (
	"github.com/jinzhu/gorm"
	_ "github.com/go-sql-driver/mysql"
	"time"
)

type User struct {
	User_id   int `gorm:"primary_key"` //指定主键并自增
	Name      string
	Pwd       string
	CreatedAt time.Time
	UpdatedAt time.Time
}

func main() {
	//创建连接
	db, err := gorm.Open("mysql", "root:root@tcp(127.0.0.1:3306)/gorm?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		panic("连接数据库失败")
	}
	defer db.Close()
	// 自动迁移模式
	//db.AutoMigrate(&User{})
	user := User{}

	//添加
	db.Create(&User{Name: "qwwqw", Pwd: "qwqwqwqwqw"})

	//查询
	db.First(&user, 1).Scan(&user)

	//修改
	user.Name = "jinzhu 2"
	db.Save(&user)

	//删除
	db.Where("user_id = ?",2).Delete(User{})

}

2.深入查询操作

package main

import (
	"github.com/jinzhu/gorm"
	_ "github.com/go-sql-driver/mysql"
	"time"
	"fmt"
)

type User struct {
	User_id   int `gorm:"primary_key"` //指定主键并自增
	Name      string
	Pwd       string
	CreatedAt time.Time
	UpdatedAt time.Time
	Car       []Car `gorm:"ForeignKey:User_id;AssociationForeignKey:User_id"` //(一对多)指定外键和关联外键
}

type Car struct {
	Car_id     int32 `gorm:"primary_key"`
	User_id    int
	Car_name   string
	Car_gongli string
}

func main() {
	//创建连接
	db, err := gorm.Open("mysql", "root:root@tcp(127.0.0.1:3306)/gorm?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		panic("连接数据库失败")
	}
	defer db.Close()
	// 自动迁移模式
	db.AutoMigrate(&User{}, &Car{})

	/**
	 * 查询单条数据
	 * &是为了获取结构体的内存地址,这样指针传递速度较快
	 */
	user := User{}
	db.First(&user, 10)
	SELECT * FROM users WHERE user_id = 10 LIMIT 1;

	db.Where("user_id = ?", 9).First(&user)
	SELECT * FROM users WHERE user_id = 9 LIMIT 1;;
	fmt.Println(&user)

	/**
	 * 查询多条数据
	 *
	 */
	users := []User{}
	db.Find(&users)
	SELECT * FROM users

	db.Where("user_id = ? and name = ?", 10, "jinzhu").Find(&users)
	 SELECT * FROM users WHERE name = "jinzhu" AND user_id = 20;

	db.Where("created_at > ?", "2018-09-22 08:50:09").Or("updated_at < ?", "2018-09-22 08:50:09").Order("created_at asc").Find(&users)
	 SELECT * FROM users WHERE created_at = '2018-09-22 08:50:09' OR updated_at < '2018-09-22 08:50:09';
	fmt.Println(users)

	/**
	 * 关联查询
	 * 一对多 多对一 多对多
	 */
	db.Where("user_id = ?", 10).Preload("Car").Find(&user)

	db.Where("user_id = ?", 10).Preload("Car","car_name like ?","%田%").Find(&user)

	fmt.Println(&user)

}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值