连接mysql、增删改查示例
package main
import (
"fmt"
"github.com/jinzhu/gorm"
_"github.com/jinzhu/gorm/dialects/mysql" // 这里没有直接使用,匿名导入
)
type User struct {
//gorm.Model
UserId int64 `gorm:"primary_key"`
UserName string
}
func main() {
db, err := gorm.Open("mysql","root:123456@(127.0.0.1)/czx_dev?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil {
panic(err)
}
defer db.Close()
fmt.Println("连接成功")
db.AutoMigrate(&User{})
/* // 添加数据
user001 := &User{UserName: "stefan"}
user002 :=&User{
UserName: "jerry",
}
user003 :=&User{
UserName: "Tom",
}
user004 :=&User{
UserName: "xaioming",
}
db.Create(&user001)
db.Create(&user002)
db.Create(&user003)
db.Create(&user004)*/
// 查询数据
var userinfo User
db.Find(&userinfo)
fmt.Printf("信息:%#v\n",userinfo)
// 条件查询
var uu User
db.Find(&uu,"user_name=?","Tom")
fmt.Printf("%#v\n",uu)
// 更新数据
db.Model(&userinfo).Update("user_name","new_name")
// 删除数据
db.Delete(&uu)
}
默认表明 和字段的操作
package main
import (
"database/sql"
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql" // 这里没有直接使用,匿名导入
"time"
)
// https://www.liwenzhou.com/posts/Go/gorm/ 李文周博客文档
type User struct {
//gorm.Model
UserId int64 `gorm:"primary_key"`
UserName string
}
type Good struct {
// // 将 `ID`, `CreatedAt`, `UpdatedAt`, `DeletedAt`字段注入到`Good`模型中
gorm.Model //
GoodName string
}
type ModelTest struct {
gorm.Model
Name string
Age sql.NullInt64
Birthday *time.Time
Email string `gorm:"type:varchar(100);unique_index"`
Role string `gorm:"size:255"`
MemberNumber *string `gorm:"unique;not null"`
Num int `gorm:"AUTO_INCREMENT"`
Adress string `gorm:"index:addr"`
IgnoreMe int `gorm:"-"`
}
// 表名默认是结构体名称的复数 `ModelTest`,`Users`
type TableTest struct {
gorm.Model
Name string
}
func (t TableTest)TableName() string {
return "mytables"
}
// 使用结构体的Tat 指定列名
type Animal struct {
AnimalId int64 `gorm:"column:bease_id"`
Name string `gorm:"column:a_name"`
Age int64 `gorm:"column:a_age"`
Birthday time.Time `gorm:"column:day_of_birthday"`
CreatedAt time.Time `gorm:"column:column:day_of_create"`
}
type Test002 struct {
Aame string
Age int64
}
// GORM 支持更改默认表名名称规则
func main() {
db, err := gorm.Open("mysql", "root:123456@(127.0.0.1)/czx_dev?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil {
panic(err)
}
defer db.Close()
fmt.Println("连接成功")
db.SingularTable(true) // 这个开关 和 默认表明是不冲突的,不管以怎么样的规则创建新的表
// 如果没有打开,false 的话, 创建的表明永远是自己规则表名的复数 形式。
// gorm 支持自己修改默认表名的规则。
// db.SingularTable(true) 就是 prefix_ + 结构体名称
// db.SingularTable(fause) 就是 prefix_ + 结构体名称复数 形式
gorm.DefaultTableNameHandler = func(db *gorm.DB, defaultTableName string) string {
return "prefix_" + defaultTableName
}
db.AutoMigrate(&User{},ModelTest{},&TableTest{},&Animal{},&Test002{})
/*
使用 Test002 接头体创建 名为 `test003` 的 表
测试怎么没反应呢?
也可以通过Table()指定表名: 好像没反应
*/
db.Table("test003").Create(&Test002{}) // 这个创建数据表好像没有创建,我觉得这个应该是往某张表添加数据的操作 添加具体的数据的。不是创建表的。
db.Create("test002").Create(&Test002{"stefan",11})
db.Table("animal").Create(&Animal{111,"dog",25,time.Now(),time.Now()})
// 添加数据
user001 := &User{UserName: "stefan"}
user002 :=&User{
UserName: "jerry",
}
user003 :=&User{
UserName: "Tom",
}
user004 :=&User{
UserName: "xaioming",
}
db.Create(&user001)
db.Create(&user002)
db.Create(&user003)
db.Create(&user004)
// 查询数据
var userinfo User
db.Find(&userinfo)
fmt.Printf("信息:%#v\n", userinfo)
// 条件查询
var uu User
db.Find(&uu, "user_name=?", "Tom")
fmt.Printf("%#v\n", uu)
// 更新数据
db.Model(&userinfo).Update("user_name", "new_name")
// 删除数据
db.Delete(&uu)
var infos []Test002
db.Table("test002").Find(&infos)
fmt.Printf("res: %#v\n",infos,"-------------\n",len(infos))
}