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




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM