Beego MVC写法 简单的CURD

VIEW

go 统一使用了 {{ 和 }} 作为左右标签,没有其他的标签符号。

{{"string"}} // 一般 string
{{`raw string`}} // 原始 string
{{'c'}} // byte
{{print nil}} // nil 也被支持

函数

if ....else....end 流程判断

range 循环数据

控制器中

func (c *MainController) Get() {
	c.Data["Website"] = "beego.me"
	c.Data["Email"] = "astaxie@gmail.com"
	c.Data["IsEmail"] = 1
	pages:=[]struct{
		Num int
	}{{10},{20},{30}}
	c.Data["pages"] =pages
	c.TplName = "index.tpl"
}

模板中, 这里使用了Website 以及pages , 正常在模板中使用Website写法是{{ .Website }}, 但是在循环中需要加上$符号

{{range $index,$value := .pages}}
       {{$index}} - {{$value}} of {{$.Website}}
{{end}}

eq/ne/lt/le/gt/ge 等于/不等于/小于/小于等于/大于/大于等于

template  引入模板 , 相当于tp中的{include file = " "} , 如果引用模板中存在当前页传入变量时, 需要加上 .  , 如下段代码

{{template "footer.tpl" .}}

设置自定义静态目录

在main.go中的main方法 , 写入

beego.SetStaticPath("/download","download")

更多详情请参考 beego模板语法 go语言模版语法_蚂蚁爱吃糖-CSDN博客

ORM操作数据库

配置

首先安装 , 运行命令  go get github.com/astaxie/beego/orm

1. 在conf / app.conf 中写入数据库连接配置

appname = demo
httpport = 8080
runmode = dev

[dev]
defaultdb=root:root@(127.0.0.1:3306)/fyouku?
charset=utf8

[prod]
defaultdb=root:root@(127.0.0.1:3306)/fyouku?
charset=utf8

2. 在main.go 中导入orm  mysql驱动 , 并设置默认数据库,数据库别名必须是default ,否则编译会报错

package main

import (
	_ "demo/routers"
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/orm"
	_"github.com/go-sql-driver/mysql"
)

func main() {
	defaultdb := beego.AppConfig.String("defaultdb") # 获取配置信息
	orm.RegisterDriver("mysql",orm.DRMySQL)          # 设置数据库类型为mysql
	orm.RegisterDataBase("default" ,"mysql" ,defaultdb) # 设置默认数据库, 别名为default
	beego.Run()
}

如果bee run 出现missing go.sum entry for module providing package github.com/go-sql-driver/mysql (imported by demo); to add:

需要执行go mod tidy

CURD

获取参数 , 如TP: input() , beego用下面的方法获取参数

title = this.GetString("title","")  // get

name = this.Input().Get("name")     // get

select 查询单条

 models

package models

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

type User struct { // 定义struct结构体 , 相当于php的class , 和数据库结构一致
	Id int
	Name string
	AddTime int64
	Status int
	Mobile string
	Avatar string
}

func init()  {
	orm.RegisterModel(new(User))
}


// 获取用户信息 参数id :int类型 , 返回值 User对象和error
func UserInfo(id int) (User,error)  {
	var(
		err error // 定义一个错误
	)
	o := orm.NewOrm() // 实例化orm
	User := User{Id :id} // 查询数据库 ,
	err = o.Read(&User)  // 读取异常
	return User,err    // 返回数据
}

 controller

package controllers

import (
	"github.com/astaxie/beego"
	"demo/models" // 引入models
)


type DemoController struct {
	beego.Controller
}

// 通過id获取用户名
// @router /user/username [get]
func (this *DemoController) GetUsername()  {
	var(
		id 		int
		err 	error
		title 	string
		user 	models.User
	)
	// 接收浏览器参数
	id ,err = this.GetInt("id")

	// 使用模型
	user, err = models.UserInfo(id)

	if err == nil {
		//title = "恭喜添加成功"
		title = user.Name  // 接收User结构体中的Name值
	} else{
		title = "服务器走丢了"
	}

	this.Ctx.WriteString(title)
}

select查询列表 

controller

package controllers

import (
	"github.com/astaxie/beego"
	"demo/models" // 引入models
	"strconv"
)


type DemoController struct {
	beego.Controller
}


// 获取用户列表
// @router /user/list [get]
func (this *DemoController) List()  {
	var (
		err error
		title string
		users []models.User  // 切片类型 , 相当于php的数组
	)

	users,err = models.List()

	if err == nil {
		title = "查询id大于10并且id倒序成功"
		// 循环展示切片(数组)
		for _ , v := range users{
			title += v.Name +","
		}
	}else{
		title = "查询失败"
	}
	this.Ctx.WriteString(title)
}

models

package models

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

type User struct { // 定义struct结构体 , 相当于php的class
	Id      int
	Name    string
	AddTime int64
	Status  int
	Mobile  string
	Avatar  string
}

func init() {
	orm.RegisterModel(new(User))
}


// 获取用户列表
func List() ([]User , error) {
	var (
		err error
		users []User
	)

	// 查询出 Db::name("user")->field("id , name")->where("id",">",10)->order("id desc")->select();
	o := orm.NewOrm()
	qs := o.QueryTable("user") //声明调用哪张表
	qs = qs.Filter("id__gt",10) // 输出id大于10的用户 ,注意  双下划线
	qs = qs.Limit(2)
	qs = qs.OrderBy("-id") // 这里是排序 , - 代表是倒序
	qs.All(&users,"Id","Name") // all执行查询 , 后面的是查询的字段,相当于tp中的field

	return users, err
}

insert

controller

package controllers

import (
	"github.com/astaxie/beego"
	"demo/models" // 引入models
	"strconv"
)


type DemoController struct {
	beego.Controller
}


// 实现用户注册 ( 插入数据库 )
// @router /user/save [get]
func (this *DemoController) Save()  {
	var (
		name	string
		mobile	string
		avatar	string
		uid		int64
		err		error
		title   string
	)

	// 接收参数
	name = this.GetString("name")
	mobile = this.GetString("mobile")
	avatar = this.GetString("avatar")

	// 操作orm
	uid , err = models.Save(name,mobile,avatar)	
	if err == nil {
		ids := strconv.FormatInt(uid,10)
		title = "恭喜添加成功"+ids
	}else{
		title = "添加失败"
	}
	this.Ctx.WriteString(title)
}

models

package models

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

type User struct { // 定义struct结构体 , 相当于php的class
	Id      int
	Name    string
	AddTime int64
	Status  int
	Mobile  string
	Avatar  string
}

func init() {
	orm.RegisterModel(new(User))
}


// 插入数据
func Save(name string, mobile string, avatar string) (int64 ,error) {
	var (
		err  error
		user User
		id   int64
	)
	o := orm.NewOrm()
	// 数据赋值
	user.Name = name
	user.Mobile = mobile
	user.Avatar = avatar
	user.Status = 0

	id, err = o.Insert(&user) // 插入数据, 传入指针变量

	return id,err
}

update

controller

package controllers

import (
	"github.com/astaxie/beego"
	"demo/models" // 引入models
	"strconv"
)


type DemoController struct {
	beego.Controller
}


// 更新用户名
// @router /user/update [get]
func (this *DemoController) Update()  {
	var (
		id int
		name  string
		err error
		title string
	)

	id ,err = this.GetInt("id")
	name = this.GetString("name")

	err = models.Update(id , name)
	if err == nil {
		title = "恭喜更新成功"
	}else{
		title = "更新失败"
	}
	this.Ctx.WriteString(title)

}

models

package models

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

type User struct { // 定义struct结构体 , 相当于php的class
	Id      int
	Name    string
	AddTime int64
	Status  int
	Mobile  string
	Avatar  string
}

func init() {
	orm.RegisterModel(new(User))
}



// 更新数据
func Update(id int , name string) (error)  {
	var(
		user User
		err error
	)

	// 操作数据库
	o := orm.NewOrm()
	// 读取数据 , 没有就返回
	user = User{Id: id}
	if o.Read(&user) == nil {
		// 更新数据
		user.Name = name
		_ , err = o.Update(&user)
	}
	return err
}

delete

controller

package controllers

import (
	"github.com/astaxie/beego"
	"demo/models" // 引入models
	"strconv"
)


type DemoController struct {
	beego.Controller
}



// 删除数据
// @router /user/del [get]
func (this *DemoController) Del()  {
	var (
		id int
		err error
		title string
	)

	id ,err = this.GetInt("id")

	err = models.Del(id)
	if err == nil {
		title = "恭喜删除成功"
	}else{
		title = "删除失败"
	}
	this.Ctx.WriteString(title)
}

models

package models

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

type User struct { // 定义struct结构体 , 相当于php的class
	Id      int
	Name    string
	AddTime int64
	Status  int
	Mobile  string
	Avatar  string
}

func init() {
	orm.RegisterModel(new(User))
}

 
// 删除数据
func Del(id int) error  {
	var (
		user User
		err error
	)

	o := orm.NewOrm()
	user = User{Id: id}

	// 删除
	_,err = o.Delete(&user)

	return err
}

执行原生SQL

controller

package controllers

import (
	"demo/models" // 引入models
	"github.com/astaxie/beego"
	"strconv"
)


type DemoController struct {
	beego.Controller
}


// 执行原生sql获取用户信息
// @router /sql/user/userinfo [get]
func (this *DemoController) SqlUserInfo()  {
	var(
		id int
		err error
		title string
		user models.User
	)

	id, _ = this.GetInt("id")

	user,err = models.SqlUserInfo(id)

	if err == nil {
		//title = "恭喜添加成功"
		title = "用户名:"+user.Name+",  手机号:"+user.Mobile  // 接收User结构体中的Name值
	} else{
		title = "服务器走丢了!"
	}

	this.Ctx.WriteString(title)

}

models

package models

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

type User struct { // 定义struct结构体 , 相当于php的class
	Id      int
	Name    string
	AddTime int64
	Status  int
	Mobile  string
	Avatar  string
}

func init() {
	orm.RegisterModel(new(User))
}



// 原生查询用户信息
func SqlUserInfo(id int) (User ,error)  {
	var (
		user User
		err error
	)
	o := orm.NewOrm()
// 执行查询单条用QueryRow , 多条用QueryRows
// 执行insert  update delete 使用exec提交
	err = o.Raw("select `name`,`mobile` from user where id=? limit 1",id).QueryRow(&user)

	return user ,err
}

Model

首先创建在model文件夹下

package models

import (
	"github.com/astaxie/beego/orm"  // 引用orm
)

type User struct {   // 声明USER 结构体 ,里面的值对应数据库结构
	Id int
	Name string
	AddTime int64
	Status int
	Mobile string
	Avatar string
}

func init()  {
	orm.RegisterModel(new(User))   // 初始化方法注册User 模型
}

 Demo全代码

controller

package controllers

import (
	"demo/models" // 引入models
	"github.com/astaxie/beego"
	"strconv"
)


type DemoController struct {
	beego.Controller
}

// 通過id获取用户名
// @router /user/username [get]
func (this *DemoController) GetUsername()  {
	var(
		id 		int
		err 	error
		title 	string
		user 	models.User
	)
	// 接收浏览器参数
	id ,err = this.GetInt("id")

	// 使用模型
	user, err = models.UserInfo(id)

	if err == nil {
		//title = "恭喜添加成功"
		title = user.Name  // 接收User结构体中的Name值
	} else{
		title = "服务器走丢了"
	}

	this.Ctx.WriteString(title)
}


// 实现用户注册 ( 插入数据库 )
// @router /user/save [get]
func (this *DemoController) Save()  {
	var (
		name	string
		mobile	string
		avatar	string
		uid		int64
		err		error
		title   string
	)

	// 接收参数
	name = this.GetString("name")
	mobile = this.GetString("mobile")
	avatar = this.GetString("avatar")

	// 操作orm
	uid , err = models.Save(name,mobile,avatar)
	if err == nil {
		ids := strconv.FormatInt(uid,10)
		title = "恭喜添加成功"+ids
	}else{
		title = "添加失败"
	}
	this.Ctx.WriteString(title)
}

// 更新用户名
// @router /user/update [get]
func (this *DemoController) Update()  {
	var (
		id int
		name  string
		err error
		title string
	)

	id ,err = this.GetInt("id")
	name = this.GetString("name")

	err = models.Update(id , name)
	if err == nil {
		title = "恭喜更新成功"
	}else{
		title = "更新失败"
	}
	this.Ctx.WriteString(title)

}

// 删除数据
// @router /user/del [get]
func (this *DemoController) Del()  {
	var (
		id int
		err error
		title string
	)

	id ,err = this.GetInt("id")

	err = models.Del(id)
	if err == nil {
		title = "恭喜删除成功"
	}else{
		title = "删除失败"
	}
	this.Ctx.WriteString(title)
}


// 获取用户列表
// @router /user/list [get]
func (this *DemoController) List()  {
	var (
		err error
		title string
		users []models.User  // 切片类型 , 相当于php的数组
	)

	users,err = models.List()

	if err == nil {
		title = "查询id大于10并且id倒序成功"
		// 循环展示切片(数组)
		for _ , v := range users{
			title += v.Name +","
		}
	}else{
		title = "查询失败"
	}
	this.Ctx.WriteString(title)
}

// 执行原生sql获取用户信息
// @router /sql/user/userinfo [get]
func (this *DemoController) SqlUserInfo()  {
	var(
		id int
		err error
		title string
		user models.User
	)

	id, _ = this.GetInt("id")

	user,err = models.SqlUserInfo(id)

	if err == nil {
		//title = "恭喜添加成功"
		title = "用户名:"+user.Name+",  手机号:"+user.Mobile  // 接收User结构体中的Name值
	} else{
		title = "服务器走丢了!"
	}

	this.Ctx.WriteString(title)

}

// 原生sql插入数据
// @router /sql/user/save [get]
func (this *DemoController) SqlSave()  {
	var(
		err error
		title string
		name string
		mobile string
		avatar string
	)

	name = this.GetString("name")
	mobile = this.GetString("mobile")
	avatar = this.GetString("avatar")

	err = models.SqlSave(name , mobile,avatar)

	if err == nil {
		title = "恭喜添加成功"
	}else{
		title = "添加失败"
	}
	this.Ctx.WriteString(title)
}


// 原生sql更新数据
// @router /sql/user/update [get]
func (this *DemoController) SqlUpdate()  {
	var (
		id int
		title string
		name string
		mobile string
		err error
	)

	id,err = this.GetInt("id")
	name = this.GetString("name")
	mobile = this.GetString("mobile")

	err = models.SqlUpdate(id, name,mobile)

	if err == nil {
		title = "恭喜更新成功"
	}else{
		title = "更新失败"
	}

	this.Ctx.WriteString(title)

}

// 原生sql删除数据
// @router /sql/user/del [get]
func (this *DemoController) SqlDel() {
	var (
		id int
		err error
		title string
	)

	id,_ = this.GetInt("id")

	err = models.SqlDel(id)
	if err == nil {
		title = "恭喜删除成功"
	}else{
		title = "删除失败"
	}

	this.Ctx.WriteString(title)
}

// 原生获取用户列表
// @router /sql/user/list [get]
func (this *DemoController) SqlList()  {
	var (
		title string
		err error
		users []models.User
	)

	_ , users, err = models.SqlList()

	if err == nil {
		for _,v := range users{
			title += "用户名"+v.Name+"\n"
		}

	}else{
		title = "服务器走丢了"
	}
	this.Ctx.WriteString(title)
}

model

package models

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

type User struct { // 定义struct结构体 , 相当于php的class
	Id      int
	Name    string
	AddTime int64
	Status  int
	Mobile  string
	Avatar  string
}

func init() {
	orm.RegisterModel(new(User))
}

// 获取用户信息 参数id :int类型 , 返回值 User对象和error
func UserInfo(id int) (User, error) {
	var (
		err error // 定义一个错误
	)
	o := orm.NewOrm()    // 实例化orm
	User := User{Id: id} // 查询数据库 ,
	err = o.Read(&User)  // 读取异常
	return User, err     // 返回数据
}

// 插入数据
func Save(name string, mobile string, avatar string) (int64 ,error) {
	var (
		err  error
		user User
		id   int64
	)
	o := orm.NewOrm()
	// 数据赋值
	user.Name = name
	user.Mobile = mobile
	user.Avatar = avatar
	user.Status = 0

	id, err = o.Insert(&user) // 插入数据, 传入指针变量

	return id,err
}

// 更新数据
func Update(id int , name string) (error)  {
	var(
		user User
		err error
	)

	// 操作数据库
	o := orm.NewOrm()
	// 读取数据 , 没有就返回
	user = User{Id: id}
	if o.Read(&user) == nil {
		// 更新数据
		user.Name = name
		_ , err = o.Update(&user)
	}
	return err
}

// 删除数据
func Del(id int) error  {
	var (
		user User
		err error
	)

	o := orm.NewOrm()
	user = User{Id: id}

	// 删除
	_,err = o.Delete(&user)

	return err
}


// 获取用户列表
func List() ([]User , error) {
	var (
		err error
		users []User
	)

	// 查询出 Db::name("user")->field("id , name")->where("id",">",10)->order("id desc")->select();
	o := orm.NewOrm()
	qs := o.QueryTable("user") //声明调用哪张表
	qs = qs.Filter("id__gt",10) // 输出id大于10的用户 ,注意  双下划线
	qs = qs.Limit(2)
	qs = qs.OrderBy("-id") // 这里是排序 , - 代表是倒序
	qs.All(&users,"Id","Name") // all执行查询 , 后面的是查询的字段,相当于tp中的field

	return users, err
}


// 原生查询用户信息
func SqlUserInfo(id int) (User ,error)  {
	var (
		user User
		err error
	)
	o := orm.NewOrm()
	// 执行查询单条用QueryRow , 多条用QueryRows
	err = o.Raw("select `name`,`mobile` from user where id=? limit 1",id).QueryRow(&user)

	return user ,err
}

// 原生插入
func SqlSave(name string,mobile string , avatar string) error {
	var(
		err error
	)
	o := orm.NewOrm()
	// 执行insert  update delete 使用exec提交
	_,err = o.Raw("insert into user (`name`,`mobile`,`avatar`,`status`) values (?,?,?,?)",name,mobile,avatar,0).Exec()

	return err
}

// 原生更新
func SqlUpdate(id int,name string,mobile string) error {
	var(
		err  error
	)
	o:=orm.NewOrm()
	_,err = o.Raw("update user set `name`=?,`mobile`=? where id=?", name,mobile,id).Exec()
	return err
}

// 原生删除
func SqlDel(id int) error {
	var (
		err error
	)
	o := orm.NewOrm()
	_,err= o.Raw("delete from user where `id`=?",id).Exec()
	return err
}

// 原生查询列表
func SqlList() (int64,[]User,error) {
	var (
		users []User
	)
	o:=orm.NewOrm()
	num ,err := o.Raw("select id,name from user where id>? order by id desc limit 2",10).QueryRows(&users)

	return num , users ,err
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以帮你解答这个问题。首先,你需要在Spring MVC的配置文件中配置一个控制器。控制器的作用是接收用户请求,处理用户的输入,并返回相应的结果。 下面是一个简单的四则运算控制器的实现: ```java @Controller public class CalculatorController { @Autowired private CalculatorService calculatorService; @RequestMapping(value = "/calculate", method = RequestMethod.POST) @ResponseBody public String calculate(@RequestParam("firstNumber") int firstNumber, @RequestParam("secondNumber") int secondNumber, @RequestParam("operator") String operator) { int result = calculatorService.calculate(firstNumber, secondNumber, operator); return "The result is: " + result; } } ``` 这个控制器接收三个参数:两个数字和一个算术运算符。然后它将这些参数传递给一个CalculatorService对象,并调用它的calculate方法。 下面是CalculatorService的实现: ```java @Service public class CalculatorServiceImpl implements CalculatorService { @Override public int calculate(int firstNumber, int secondNumber, String operator) { switch(operator) { case "+": return firstNumber + secondNumber; case "-": return firstNumber - secondNumber; case "*": return firstNumber * secondNumber; case "/": return firstNumber / secondNumber; } throw new IllegalArgumentException("Invalid operator: " + operator); } } ``` CalculatorService的calculate方法根据不同的算术运算符,执行相应的操作。 最后,你需要配置一个Spring MVC的视图解析器,在用户提交请求后,将结果显示在网页上。可以使用JSP或Thymeleaf等模板引擎来实现。 这就是一个简单的Spring MVC实现的四则运算器。希望对你有帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苗先生的PHP记录

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值