• 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")
    }
    
    
    
    
  • 相关阅读:
    spring和mybatis整合报错:org.springframework.beans.MethodInvocationException: Property 'dataSource' threw exception; nested exception is java.lang.NoClassDefFoundError
    SpringMVC静态资源拦截的问题
    初识SpringMVC
    Linux打tar包排除目录中的某个目录
    Angular的forEach无法通return跳出循环问题
    shell脚本编写保存
    Chrome浏览器偶尔提示错误net::ERR_EMPTY_RESPONSE的解决方法
    SVN右键菜单不显示
    JavaScript创建对象常用的两种方法
    JavaScript调试之alert和console.log()的区别
  • 原文地址:https://www.cnblogs.com/ivy-blogs/p/12737088.html
Copyright © 2020-2023  润新知