beego MySQL数据库连接池

来源:互联网 发布:淘宝代销下单怎么处理 编辑:程序博客网 时间:2024/05/22 00:41

转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/55252990,建议读者阅读原文,确保获得完整的信息

1.背景

beego的orm模块自带连接池功能,可以通过设置MaxIdleConns、MaxOpenConns来配置连接池属性

orm.SetMaxIdleConns("default",1000)orm.SetMaxOpenConns("default",2000)

SetMaxOpenConns用于设置最大打开的连接数,默认值为0表示不限制。
SetMaxIdleConns用于设置闲置的连接数。

设置最大的连接数,可以避免并发太高导致连接mysql出现too many connections的错误。设置闲置的连接数则当开启的一个连接使用完成后可以放在池里等候下一次使用。

2.实例

main函数实现用户信息插入、查询、删除、更新,初始化数据库对象,在main函数中仅创建了一个orm.Ormer对象,而不是在具体方法中创建该对象。

package mainimport (    "fmt"    "github.com/astaxie/beego/orm"    _ "github.com/go-sql-driver/mysql"    "helloapi/models")func init() {    orm.RegisterDriver("mysql", orm.DRMySQL)    orm.RegisterDataBase("default", "mysql", "manager:123456@tcp(122.66.111.123:3306)/test?charset=utf8")    orm.SetMaxIdleConns("default",1000)    orm.SetMaxOpenConns("default",2000)}func main() {    o := orm.NewOrm()    user := models.User{                User_name:"loongshawn",                Age:29,                Email:"loongshawn@jjj.com",                Staff_id:"123456",                Position:"研发工程师",                Extension_number:"",                Telephone_number:"15642314234",                Office_location:"商会产业园",                }    // insert    o.Begin()    id, err := models.UserAdd(o,user)    fmt.Printf("ID: %d, ERR: %v\n", id, err)    if err != nil {        o.Rollback()        fmt.Println("插入user表出错,事务回滚")    } else {        o.Commit()        fmt.Println("插入user表成功,事务提交")    }    // search    u := [] interface{}{user.User_name,user.Age}    var sql = "select * from user where user_name = ? and age = ? and enabled = 1"    users,err := models.UserQuery(o,sql,u)    fmt.Println(users)    // delete    o.Begin()    num, err := models.UserCut(o,user)    fmt.Printf("NUM: %d, ERR: %v\n", num, err)    if err != nil {        o.Rollback()        fmt.Println("插入user表出错,事务回滚")    } else {        o.Commit()        fmt.Println("插入user表成功,事务提交")    }    // update    user.Id = 2    num1, err := models.UserUpdate(o,user)    fmt.Printf("NUM: %d, ERR: %v\n", num1, err)}

用户model, user.go定义user结构体及插入、查询、删除、更新的方法。

package modelsimport (    "github.com/astaxie/beego/orm"    "fmt")type User struct {    Id               int    User_name        string    Age              int    Email        string    Staff_id     string    Position         string    Extension_number string    Telephone_number string    Office_location  string}func init() {    // 需要在init中注册定义的model    orm.RegisterModel(new(User))}func UserAdd(o orm.Ormer,user User) (int64, error){    // insert    return o.Insert(&user)}func UserQuery(o orm.Ormer,sql string,paras [] interface{}) ([] User,error){    // query    var users [] User    num,err := o.Raw(sql,paras).QueryRows(&users)    fmt.Printf("NUM: %d, ERR: %v\n", num, err)    return users,err}func UserCut(o orm.Ormer,user User) (int64, error){    // delete    return o.Delete(&user,"user_name")}func UserUpdate(o orm.Ormer,user User) (int64, error){    // update    return o.Update(&user,"user_name")}

数据库操作效果

这里写图片描述

当然,还有其它的go持久层框架,因此需要大家使用过程中来比较那个框架合适。

参考资料:
[1]、Beego orm 模块理解困惑

0 0