beego使用MySQL

前言:在操作过程中,遇到的错误,如果有如下错误提示的
1、needs a primary key field, default is to use 'id' if not set。这个提示说:需要一个主键字段,如果没有设置,默认使用'id'。
解决方法:在模型的主键字段后面加上:`orm:"column(user_id);pk"` 即可。user_id(换成你自己表的主键名称)

第一步:执行如下命令

go get -u github.com/astaxie/beego/orm

第二步:执行如下命令

go get -u github.com/go-sql-driver/mysql

第三步:连接MySQL之前的准备

beego必须注册一个别名为default的数据库,作为默认使用。
orm.RegisterDataBase("default", "mysql", "test:123456@/test?charset=utf8",30,30)

第一个参数是数据库的别名,用来切换数据库使用。
第二个是driverName,在RegisterDriver时注册的
第三是数据库连接字符串:test:123456@/test?charset=utf8相对于用户名:密码@数据库地址+名称?字符集
第四个参数相当于:
orm.SetMaxIdleConns(“default”, 30)
设置数据库的最大空闲连接。
第五个参数相当于:
orm.SetMaxOpenConns(“default”, 30)
设置数据库的最大数据库连接。
第四个参数和第五个参数也可以不传值,会使用数据库默认值

 新建一个数据表,数据表如下:

新建一个模型文件,我的模型文件是 person.go,文件内容如下:

package models

import (
	"fmt"

	"github.com/astaxie/beego/orm"
)

type Person struct {
	UserId   int `orm:"column(user_id);pk"`
	Username string
	Sex      int
	Email    string
}

func init() {
	// 需要在init中注册定义的model
	orm.RegisterModel(new(Person))
}

func QueryUser(person *Person) []Person {
	// 构造查询
	var personData []Person
	// 获取 QueryBuilder 对象. 需要指定数据库驱动参数。
	// 第二个返回值是错误对象,在这里略过
	qb, _ := orm.NewQueryBuilder("mysql")
	// 构建查询对象
	qb.Select("*").
		From("person").
		Where("user_id > ?").
		Limit(10).Offset(0)
	// 导出 SQL 语句
	sql := qb.String()
	// 执行 SQL 语句
	o := orm.NewOrm()
	o.Raw(sql, 0).QueryRows(&personData)

	// o := orm.NewOrm()
	// o.QueryTable("sysUser").Filter("phone", user.Phone).All(&userData)
	fmt.Println(personData)
	return personData
}

 第四步:新建一个控制器,控制器内容如下:

package controllers

import (
	"encoding/json"
	"fmt"

	"beegoApi/models"

	"github.com/astaxie/beego"
)

// 定义一个结构体
type IndexController struct {
	beego.Controller
}

// 定义一个函数
func (c *IndexController) Index() {
	var ob models.Person
	json.Unmarshal(c.Ctx.Input.RequestBody, &ob)
	flag := models.QueryUser(&ob) // 调用models中的QueryUser方法
	fmt.Print(flag)
	c.Data["json"] = flag
	c.ServeJSON()
}

第五步:访问路由,看一下是否成功:

routers.go文件内容如下:
 

// @APIVersion 1.0.0
package routers

import (
	"beegoApi/controllers"

	"github.com/astaxie/beego"
)

func init() {
	ns := beego.NewNamespace("/v1",
		beego.NSRouter("/index", &controllers.IndexController{}, "*:Index"),
		/*beego.NSNamespace("/object",
			beego.NSInclude(
				&controllers.ObjectController{},
			),
		),
		beego.NSNamespace("/user",
			beego.NSInclude(
				&controllers.UserController{},
			),
		),
		beego.NSNamespace("/index",
			beego.NSInclude(
				&controllers.IndexController{},
			),
		),*/
	)
	beego.AddNamespace(ns)
}

 


版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wplblog/article/details/113349162