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&...¶mN=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