安装orm

go get github.com/astaxie/beego/orm

//添加引用
_ "github.com/go-sql-driver/mysql"

简单例子

连接数据库

import (
	"github.com/astaxie/beego/orm"
	_ "github.com/go-sql-driver/mysql"
)
func RegistMysql() {
	orm.RegisterDataBase("default", "mysql", "root:123@tcp(127.0.0.1:3306)/wdvideo?charset=utf8")
	//beego和数据库对应格式 
	//如UserInfo->user_info   User_Info->user__info  DB_UserInfo->d_b__user_info
 	orm.RegisterModel(new(UserInfo))
}

在/test/user 路由添加post方法,将用户信息添加到数据库

func (c *UserInfoController) Post() {
	user := new(models.UserInfo)
	if err := c.ParseForm(user); err != nil {
		c.Ctx.Output.SetStatus(405)
		c.Abort("参数错误")
	}
	o := orm.NewOrm()
	id, err := o.Insert(user)
	if err != nil {
		fmt.Println(err)
		c.Ctx.Output.SetStatus(500)
		c.Abort("服务器错误")
	}
	fmt.Println(user.UserName)
	c.Ctx.WriteString(fmt.Sprintf("用户注册成功,id:%d", id))
}

增删改查

“:queue” 是我们设置的url路径,根据路径实现增删改查

func (c *UserInfoController) Post() {
	// switch c.Ctx.Input.Param(":queue") {
	switch c.GetString(":queue") {
	case "insert":
		user := new(models.UserInfo)
		if err := c.ParseForm(user); err != nil {
			c.Ctx.Output.SetStatus(405)
			c.Abort("参数错误")
			return
		}
		o := orm.NewOrm()
		id, err := o.Insert(user)
		if err != nil {
			fmt.Println(err)
			c.Ctx.Output.SetStatus(500)
			c.Abort("服务器错误")
			return
		}
		c.Ctx.WriteString(fmt.Sprintf("用户注册成功,id:%d", id))
	case "update":
		user := new(models.UserInfo)
		if err := c.ParseForm(user); err != nil {
			c.Ctx.Output.SetStatus(405)
			c.Abort("参数错误")
			return
		}
		o := orm.NewOrm()
		_, err := o.Update(user, "UserName", "PassWord")
		if err != nil {
			fmt.Println(err)
			c.Ctx.Output.SetStatus(500)
			c.Abort("服务器错误")
			return
		}
		c.Ctx.WriteString(fmt.Sprintf("用户修改成功,id:%d--用户名:%s---密码:%s", user.Id, user.UserName, user.PassWord))
	case "delete":
		user := new(models.UserInfo)
		o := orm.NewOrm()
		if id, err := c.GetInt64("Id"); err == nil {
			user.Id = id
			if _, err := o.Delete(user, "Id"); err != nil {
				c.Ctx.Output.SetStatus(500)
				c.Abort("服务器错误")
				return
			}
			c.Ctx.WriteString(fmt.Sprintf("用户删除成功,id:%d", user.Id))
		} else {
			fmt.Println(err)
			c.Ctx.Output.SetStatus(403)
			c.Abort("参数id错误")
		}
	case "select":
		user := new(models.UserInfo)
		if id, err := c.GetInt("Id"); err != nil {
			fmt.Println(err)
			c.Ctx.Output.SetStatus(403)
			c.Abort("参数id错误")
			return
		} else {
			user.Id = int64(id)
		}
		o := orm.NewOrm()
		if err := o.Read(user, "ID"); err != nil {
			c.Ctx.Output.SetStatus(404)
			c.Abort("id 未找到")
			return
		}
		c.Ctx.WriteString(fmt.Sprintf("用户查找成功,id:%d--用户名:%s---密码:%s", user.Id, user.UserName, user.PassWord))
	default:
		c.Ctx.Output.SetStatus(404)
		c.Abort("url未找到")
	}
}

简单事务

主要用到这三个函数,很简单,不细说

o.Begin()
o.Commit()
o.Rollback()

QueryBuilder

QueryBuilder是一种预处理方式的sql查询,通过追加方式使用,有效防止笔误。
方法如下

func (c *UserInfoController) Get() {
	o := orm.NewOrm()
	qb, _ := orm.NewQueryBuilder("mysql")
	sqlquery := qb.Select("*").From("user_info").Where("id > ?").OrderBy("id").Desc().Limit(3)
	users := make([]models.UserInfo, 0)
	if _, err := o.Raw(sqlquery.String(), 3).QueryRows(&users); err != nil {
		fmt.Println(err)
	}
	c.Ctx.WriteString(fmt.Sprint("select result is : %v", users))
}

但,恕在下直言,还不如直接raw方法写sql语句来的痛快。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐