Beego学习(四)orm+mysql
文章目录安装ormgo get github.com/astaxie/beego/orm
·
安装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语句来的痛快。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献1条内容
所有评论(0)