title: Beego脱坑(十三)ORM基本增删改查
tags: go,beego,orm
author : Clown95
本章我们将来了解如何使用ORM进行最基础的增删改查。为了减少篇幅,我们重新创建Student
表,如果你不清楚怎么创建表可以查看文章
Beego脱坑(十二)ORM介绍并创建第一个表 。
Student具体结构如下:
type Student struct {
StuId int `orm:"pk;auto"` //设置主键自增长 字段名为 id
Name string `orm:"size(15)"` //设置长度为15 字段名为 name
Age string
Hobby string `orm:"size(20)"` //设置长度为18 字段名为 idcard
}
func init() {
orm.RegisterDataBase("default", "mysql", "root:yangjie@tcp(127.0.0.1:3306)/db_user?charset=utf8")
orm.RegisterModel(new(Student))
orm.RunSyncdb("default", true, true)
}
设置模板页面
我们先创建表单页面ormdemo.html
,效果如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ORM演示</title>
</head>
<body>
<script type="text/javascript">
function test(){
var radios = document.getElementsByName("radioname");
var value = 0;
for(var i=0;i<radios.length;i++){
if(radios[i].checked == true){
value = radios[i].value;
}
}
document.form1.action =value
}
</script>
<label><input name="radioname" type="radio" value="/insert" checked="" />插入 </label>
<label><input name="radioname" type="radio" value="/query" />查询 </label>
<label><input name="radioname" type="radio" value="/alter" />修改 </label>
<label><input name="radioname" type="radio" value="/delete" />删除</label>
<form action="#" method="post" name ="form1" >
<table>
<tbody>
<tr>
<td>学号 </td>
<td>
<input type="text" name ="StuId" value="">(不填写,仅作查询、修改、删除使用)
</td>
</tr>
<tr>
<td>姓名</td>
<td>
<input type="text" name ="Name" value="{{.Name}}">
</td>
</tr>
<tr>
<td>年龄</td>
<td>
<input type="text" name ="Age" value="{{.Age}}">
</td>
</tr>
<tr>
<td>爱好</td>
<td>
<input type="text" name ="Hobby" value="{{.Hobby}}">
</td>
</tr>
<tr>
<td>
<button onclick="test()">确认</button>
</td>
</tr>
</tbody>
</table>
</form>
{{.Tip}} <!--操作提示-->
</body>
</html>
插入数据
首先我们实现插入数据:
//插入数据
func (this *ORMdemoController) Insert() {
this.TplName = "ormdemo.html"
var stu Student
//解析数据到结构体
if error := this.ParseForm(&stu); error != nil {
this.Data["Tip"] = "数据解析错误"
} else {
orm := orm.NewOrm() //创建新orm对象
n, err := orm.Insert(&stu) //调用Insert插入数据
if err == nil && n > 0 {
//this.Ctx.WriteString("插入成功")
this.Data["Tip"] = "插入成功"
} else {
this.Data["Tip"] = "插入失败"
}
}
}
注册路由:
beego.Router("/ormdemo",&controllers.ORMdemoController{})
beego.Router("/insert",&controllers.ORMdemoController{},"*:Insert")
接下来我们插入几组数据
StuId | Name | Age | Hobby |
---|---|---|---|
1 | 小白 | 5 | 打滚 |
2 | 小白 | 1 | 打滚 |
3 | 美芽 | 30 | 购物 |
4 | 野原 | 32 | 喝酒 |
使用图形工具查询,可以看到全部成功插入
查询数据
接下来我们实现通过StuId 来查询数据
//查询数据
func (this *ORMdemoController) Query() {
this.TplName = "ormdemo.html"
stuid, _ := this.GetInt("StuId")
stu := Student{StuId: stuid}
orm := orm.NewOrm()
err := orm.Read(&stu) //读取数据
if err == nil {
this.Data["Name"] = stu.Name
this.Data["Age"] = stu.Age
this.Data["Hobby"] = stu.Hobby
} else {
this.Data["Tip"] = "查询失败"
}
}
注册路由:
beego.Router("/query",&controllers.ORMdemoController{},"*:Query")
我们查询学号为1 的数据,成功得到内容
修改数据
接下来我们实现数据的更新,数据更新跟插入大同小异,唯一的区别就是:插入调用的是Insert
,而更新数据使用的是Update
。
//修改数据
func (this *ORMdemoController) Alter() {
this.TplName = "ormdemo.html"
var stu Student
if error := this.ParseForm(&stu); error != nil {
this.Data["Tip"] = "数据解析错误"
} else {
orm := orm.NewOrm()
n, err := orm.Update(&stu)
if err == nil && n > 0 {
this.Data["Tip"] = "修改成功"
} else {
this.Data["Tip"] = "修改失败"
}
}
}
注册路由:
beego.Router("/alter",&controllers.ORMdemoController{},"*:Alter")
我们在之前插入数据的时候,插入了两个名字为小白的数据, 现在我们需要把 StuId=1
的数据改成:
StuId | Name | Age | Hobby |
---|---|---|---|
1 | 小新 | 5 | 露屁屁 |
修改完毕后,我们查看表检测是否成功:
删除数据
最后我们将实现数据删除:
func (this *ORMdemoController) Delete() {
this.TplName = "ormdemo.html"
stuid, _ := this.GetInt("StuId")
stu := Student{StuId: stuid}
orm := orm.NewOrm()
n, err := orm.Delete(&stu)
if n > 0 && err == nil {
this.Data["Tip"] = "删除成功"
} else {
this.Data["Tip"] = "删除失败"
}
}
注册路由:
beego.Router("/delete",&controllers.ORMdemoController{},"*:Delete")
我们来删除 StuId=3
的数据, 通过图形管理界面可以看到,成功删除。