Uso básico de gorm
×font> http://gorm.book.jasperxu.com/ ×font> Documentos oficiales
Instalar
go get -u github.com/jinzhu/gorm
Conectar mysql
-
gorm connection mysql depende del controlador mysql, debe instalar el controlador mysql antes de conectarse
github.com/go-sql-driver/mysql
-
Ejemplo de conexión individual
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) // 设置最大连接超时
}
- Para asegurar el progreso completo del proyecto, cuando el proyecto se inicializa, debemos asegurarnos de que la conexión de la base de datos sea normal. Cuando la conexión de la base de datos falla, puede utilizar
log.Fatal
el método para detener el proyecto.
Uso básico
"""
+-----------+--------------+------+-----+---------+-------+
| 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 | |
+-----------+--------------+------+-----+---------+-------+
"""
- Mesa de prueba
Operación simple
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")
}