beego MySQL数据库连接池

转载请注明来源-作者@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 main

import (
    "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 models

import (
    "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 模块理解困惑

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值