您的位置 首页 golang

golang数据库操作之gorm

gorm快速上手 Quick start

数据库连接

1.Sqlite数据库

package mainimport (    "github.com/jinzhu/gorm"    _ "github.com/jinzhu/gorm/dialects/sqlite")func main() {    //打开数据库连接    var db, _ = gorm.Open("sqlite3", "demo.db")    //关闭数据库连接    defer db.Close()}

2.MySQL数据库

数据库连接字符串格式即DSN (Data Source Name)格式为:

[username[:password]@][protocol[(address)]]/dbname[?param1=value1&...&paramN=valueN]

详情请参考https://github.com/go-sql-driver/mysql#dsn-data-source-name

package mainimport (    "github.com/jinzhu/gorm"    _ "github.com/jinzhu/gorm/dialects/mysql")func main() {    //打开数据库连接    db, _ := gorm.Open("mysql", "demo:123456@(localhost)/demo?charset=utf8&parseTime=True&loc=Local")    //关闭数据库连接    defer db.Close()}

操作示例

1.CURD基础操作

package mainimport (    "fmt"    "github.com/jinzhu/gorm"    _ "github.com/jinzhu/gorm/dialects/sqlite")type User struct {    gorm.Model    Name string    Age  int}func main() {    //打开数据库连接    var db, _ = gorm.Open("sqlite3", "demo.db")    //关闭数据库连接    defer db.Close()    //添加数据库表名前缀    gorm.DefaultTableNameHandler = func(db *gorm.DB, defaultTableName string) string {        return "demo_" + defaultTableName    }    //创建表    db.AutoMigrate(&User{})    user := User{        Name: "demo",        Age:  20,    }    //插入数据    db.Create(&user)    //查询数据    db.First(&user, "name = ?", "demo")    println(fmt.Sprintf("%v", user))    //更新数据    user.Age = 21    db.Save(&user)    //查询数据    db.First(&user, "name = ?", "demo")    println(fmt.Sprintf("%v", user))    //删除数据,软删除(存在deleted_at字段自动软删除,给deleted_at字段赋值就标记为删除)    db.Delete(&user)    //物理删除    db.Unscoped().Delete(&user)    var count = 0    //查询总数    db.Model(&User{}).Count(&count)    println("user count: ", count)    println("OK")}

2.表关联

假设场景
有个学生Student,该Student有多本书Book

package mainimport (    "github.com/jinzhu/gorm"    _ "github.com/jinzhu/gorm/dialects/mysql")type Book struct {    gorm.Model    StudentId int //关联Student表    Name      string    ISBN      string    Price     float32}type Student struct {    gorm.Model    Name  string    Age   int    Books []Book}func main() {    //打开数据库连接    db, _ := gorm.Open("mysql", "demo:123456@(localhost)/demo?charset=utf8&parseTime=True&loc=Local")    //关闭数据库连接    defer db.Close()    //创建表    db.AutoMigrate(&Student{}, &Book{})    book1 := Book{        Name:  "Go语言实战",        ISBN:  "9787115445353",        Price: 59.00,    }    book2 := Book{        Name:  "Go程序设计语言",        ISBN:  "9787111558422",        Price: 79.00,    }    student := Student{        Name:  "demo",        Age:   25,        Books: []Book{book1, book2},    }    //插入数据,将写入一条student记录和两条与之关联的book记录    db.Create(&student)    //查询student关联的所有book信息    var books []Book    db.Model(&student).Related(&books)    for _, book := range books {        println(book.Name)    }    println("OK")}

连接池配置

只有在面向连接的数据库才能设置连接池,比如MySQL或PostgreSQL
而基于文件的数据库,如Sqlite是不能设置连接池的

db.DB()返回*sql.DB通用接口,通过该接口可以配置底层数据库连接参数

// SetMaxIdleCons 设置连接池中的最大闲置连接数。db.DB().SetMaxIdleConns(10)// SetMaxOpenCons 设置数据库的最大连接数量。db.DB().SetMaxOpenConns(100)

文章来源:智云一二三科技

文章标题:golang数据库操作之gorm

文章地址:https://www.zhihuclub.com/902.shtml

关于作者: 智云科技

热门文章

网站地图