美文网首页
Beego 的namespace和连接mysql的方法

Beego 的namespace和连接mysql的方法

作者: 蒙浩 | 来源:发表于2020-06-18 08:21 被阅读0次

    beego作为现在最流行的golang版本的web开发框架,以其架构的方便易懂和功能的强大很快得到了大家的认可。本文主要就如何使用beego连接mysql和beego的namespace特性进行讲解:
    首先,beego最方便之处就是可以直接通过bee工具生成代码框架,这样极大的降低了beego的使用难度。
    下面以连接本地部署的mysql为例,只要运行如下命令,就可以生成一套beego的框架:

    bee api appname -conn="root:root@tcp(127.0.0.1:3306)/dbname"
    

    root:root是mysql的连接的用户名和密码,这个需要在mysql中配置好,并赋予远程连接能力。@tcp(127.0.0.1:3306)是指通过tcp方式连接mysql,mysql默认开启的是3306端口。dbname是你在mysql中创建的数据库名称。
    生成好之后默认会有如下文件结构:
    boyaweb/
    ├── conf
    │ └── app.conf //存放beego的配置文件
    ├── controllers //用来实现对应router消息接收后,处理GET,UPDATE,POST以及DELETE请求的
    ├── main.go //beego的main函数,自动生成
    ├── models //存放需要解析的模块,可以是数据库中的表结构
    ├── routers
    │ └── router.go //实现不同url的路由和跳转
    └── tests

    对于namespace的方式归类router可以方便对大量url进行归类处理,方便运维。如下
    router.go中,最后可供访问的便是 127.0.0.1:8080/v1/student/xxxx, xxxx为id的具体值,在NSRouter函数,可以看到最后需要controller参数,这个controller就是实现具体收到消息的处理:

    package routers
    
    import (
    
        "github.com/astaxie/beego"
        "boyaweb/controllers"
    )
    func init() {
        ns := beego.NewNamespace("/v1",
            beego.NSNamespace("/student",
                beego.NSRouter("/:id", &controllers.StudentController{})),
            )
        beego.AddNamespace(ns)
    }
    

    controller中实现了GET请求的处理,params := this.Ctx.Input.Params() 获取url中的参数,本例为:id;this.Ctx.WriteString(info) 将info写入响应消息:

    package controllers
    
    import (
        "boyaweb/models"
        "fmt"
        "github.com/astaxie/beego"
    )
    
    type StudentController struct {
        beego.Controller
    }
    
    func (this * StudentController)URLMapping(){
        this.Mapping("GET", this.Get)
    }
    
    func (this *StudentController) Get() {
        params := this.Ctx.Input.Params()
        for key, value := range params {
            info := fmt.Sprintf("%s: %s\n", key, value)
            this.Ctx.WriteString(info)
        }
        students := models.QuerUser()
        for _,s := range students{
            info := fmt.Sprintf("id: %d, name: %s, score: %d\n", s.Id_RENAME, s.Name, s.Score)
            this.Ctx.WriteString(info)
        }
        return
    }
    

    module.go 定义好数据库中的表结构,并将查询好的结构返回:

    package models
    
    import (
        "fmt"
        "github.com/astaxie/beego/orm"
    )
    
    type Student struct {cichu
        Id_RENAME int    `orm:"column(id);pk"` // 此处需要增加主键标志pk,否则会报错,参考https://blog.csdn.net/Charles_Thanks/article/details/80502829
    
        Name      string `orm:"column(name);size(255)"`
        Score     int    `orm:"column(score)"`
    }
    
    func init() {
        // 需要在init中注册定义的model
        orm.RegisterModel(new(Student))
        orm.Debug = true // 是否开启调试模式 调试模式下会打印出sql语句
    }
    
    func QuerUser() []Student {
        var userData []Student
        
        qb, _ := orm.NewQueryBuilder("mysql")
        // 构建查询对象
        qb.Select("*").From("student").
            OrderBy("score").Desc().
            Limit(3).Offset(0)
        // 导出 SQL 语句
        sql := qb.String()
        // 执行 SQL 语句
        o := orm.NewOrm()
        i,err := o.Raw(sql).QueryRows(&userData)
        fmt.Print(i,err)
        fmt.Println(userData)
        return userData
    }
    

    完成如上修改之后,便可以运行main.go了,效果如下:


    image.png

    相关文章

      网友评论

          本文标题:Beego 的namespace和连接mysql的方法

          本文链接:https://www.haomeiwen.com/subject/vlgsxktx.html