GORM的简单使用

Posted ivy-blogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 
", 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")
}



以上是关于GORM的简单使用的主要内容,如果未能解决你的问题,请参考以下文章

GORM的简单使用

将groovy gorm代码放入配置文件错误?

Go实战Gin + Gorm 基于RESTful API 的简单备忘录 | 含接口文档

Gorm 高级查询

golang gorm 操作mysql

如何使用 Gin 和 Gorm 搭建一个简单的 API 服务