zoukankan      html  css  js  c++  java
  • 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")
    }
    
    
    
    
  • 相关阅读:
    短视频直播源码开发,防抖和节流的区别和实用场景
    游戏陪玩平台源码开发,语音通话中的噪音消除处理
    语音聊天室源码开发,如何实现回音消除功能?
    【代码解析】双向链表实现贪吃蛇游戏!简单易学,开发自己第一个游戏!
    程序员偷偷去面试,上班时却没发现身上还有其他公司的访客贴!
    编程语言年度观赏大戏,来看看内部撕X,你站谁?
    数组倒序排列,数组倒置,C语言数组倒序算法详解!
    编程领域这些禁术相当精彩,掌握其一,方可修炼编程大法!
    无处不在的网络编程,到底是如何工作的?今天我们一探究竟!
    【编程黑科技】gethostbyname()函数:通过域名获取IP地址!
  • 原文地址:https://www.cnblogs.com/ivy-blogs/p/12737088.html
Copyright © 2011-2022 走看看