GORMの簡単な使用

gormの基本的な使い方

×× http: //gorm.book.jasperxu.com/××公式ドキュメント

インストールする

go get -u github.com/jinzhu/gorm

MySQLを接続する

  • gorm接続mysqlはmysqlドライバーに依存しているため、接続する前にmysqlドライバーをインストールする必要がありますgithub.com/go-sql-driver/mysql

  • 個別接続例

package database

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

var Db *gorm.DB

var Error error

func init() {
	Db, Error = gorm.Open("mysql", "admin:qwe123@/bilibili")
	if Error != nil {
		log.Fatal("database connect failed \n", Error.Error())
	}
	Db.LogMode(true)  // 打印sql语句
	Db.DB().SetMaxIdleConns(50)  // 设置连接池
	Db.DB().SetMaxOpenConns(50) // 设置最大连接数
	Db.DB().SetConnMaxLifetime(time.Hour)  // 设置最大连接超时
}

  • プロジェクトを完全に進行させるには、プロジェクトを初期化するときに、データベース接続が正常であることを確認する必要があります。データベース接続が失敗した場合はlog.Fatal、メソッドを使用してプロジェクトを停止できます

基本的な使い方

"""
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| mid       | int(11)      | NO   | PRI | NULL    |       |
| following | int(11)      | NO   |     | NULL    |       |
| follower  | int(11)      | NO   |     | NULL    |       |
| name      | varchar(255) | YES  |     | NULL    |       |
| face      | varchar(200) | YES  |     | NULL    |       |
| leavel    | smallint(6)  | YES  |     | NULL    |       |
| sex       | varchar(255) | YES  |     | NULL    |       |
| sign      | varchar(255) | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+
"""
  • テストテーブル

簡単操作


package main

import (
	"fmt"
	"fresh.com/database"
)

type User struct {
	Mid       int
	Following int
	Follower  int
	UserName  string `gorm:"Column:name"`
}

func (u User) TableName() string {
	return "user_info"
}

/*
1. 映射表的结构体的名将会被转换为表名,规则为:
	(1): 单数变复数,如:User -> users, 有些会变成es结尾,按照英文的语法. 你可以通过Db.SingularTable(true)来禁用这一规则
	(2): 大写变下划线, 如:UserDetails -> user_details
	(3): 为结构体制定表名, 给该结构体设置一个成员方法`TableName`, 返回值为string即可
	(4): 可以在查询的时候制定表名,如下所示"Table". 其余的时候该结构体的实例结构即可
	(5): 制定列名,在结构体里面制定tag"gorm:Column:<你的表的列名>"即可
*/
func main() {
	// 单条查询
	user := &User{}
	database.Db.Table("user_info").First(&user) // SELECT * FROM `user_info`   LIMIT 1
	fmt.Println(user.Mid)

	// 多条查询
	user_list := []User{}
	database.Db.Table("user_info").Limit(10).Find(&user_list) // SELECT * FROM `user_info`   LIMIT 10
	fmt.Println(user_list)

	// where 条件查询
	database.Db.Table("user_info").Where("mid=?", 102).Find(&user) // SELECT * FROM `user_info`  WHERE (mid=102)
	fmt.Println(user)

	// 执行原始的sql查询
	raws, err := database.Db.Raw("SELECT COUNT(*) FROM user_info").Rows()
	if err != nil {
		fmt.Println(err)
	}
	for raws.Next() {
		var mid int
		raws.Scan(&mid)
		fmt.Println(mid)
	}

	// 插入
	insert_user := User{
		Mid:       199624,
		Follower:  25,
		Following: 1234,
	}

	re := database.Db.Create(&insert_user).RowsAffected
	fmt.Println(re) // 如果插入成功,单挑插入返回1,失败则返回0

	// 更新
	database.Db.Table("user_info").Where("mid=?", 199624).Update("name", "ivy")
	database.Db.Model(&user).Where("mid=?", 199624).Update("name", "BOB")
}



おすすめ

転載: www.cnblogs.com/ivy-blogs/p/12737088.html