用户结构体,和订单是一对多的关系

type User struct {
	Id int //beego中默认Id为主键,且自增长
	Name string //姓名
	Age int //年龄
	Nickname string  //昵称
	Userorders []*Userorder `orm:"reverse(many)"`
}

订单结构体,和用户是多对多一的关系

type Userorder struct {
	Id int
	Orderdata string
	User *User `orm:"rel(fk)"`
	Products []*Product `orm:"rel(m2m)"`//ManyToMany
}

创建orm对象,插入用户:

func (this *InsertUserController) Get() {
	this.TplName = "insertuser.html"
}
func (this *InsertUserController) Post() {
	name := this.GetString("name")
	age, err := this.GetInt("age")
	if err != nil {
		this.Ctx.WriteString("插入失败!")
	}
	nickname := this.GetString("nickname")
	user := models.User{Name:name, Age:age, Nickname:nickname}
	orm := orm.NewOrm()
	//INSERT INTO USER (NAME, age, nickname)  VALUE('Alice', 24, 'bb')
	n, err := orm.Insert(&user)
	if err == nil && n > 0 {
		this.Ctx.WriteString("插入成功!")
	}else {
		this.Ctx.WriteString("插入失败!")
	}
}

insertuser.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>插入用户</title>
</head>
<body>
    <form action="/insertuser" method="post">
        <table>
            <thead>插入用户</thead>
            <tbody>
                <tr>
                    <td>姓名:</td>
                    <td>
                        <input id="name" name="name" type="text">
                    </td>
                </tr>
                <tr>
                    <td>年龄:</td>
                    <td>
                        <input id="age" name="age" type="text">
                    </td>
                </tr>
                <tr>
                    <td>昵称:</td>
                    <td>
                        <input id="nickname" name="nickname" type="text">
                    </td>
                </tr>
                <tr>
                    <td>
                        <input type="submit" value="插入"/>
                    </td>
                    <td>
                        <input type="reset" value="重置"/>
                    </td>
                </tr>
            </tbody>
        </table>
    </form>
</body>
</html>

删除用户

func (this *DeleteUserController) Get1() {
	//通过id删除
	//http://localhost:8080/deleteuser?id=2
	//获取id
	id, err := this.GetInt("id")
	if err != nil {
		this.Ctx.WriteString("删除失败!")
		return
	}
	//创建user对象
	user := models.User{Id:id}
	orm := orm.NewOrm()
	//delete函数默认根据id进行删除,也可以根据指定的字段进行删除
	//DELETE FROM USER WHERE id = 2;
	n, err := orm.Delete(&user)
	if n > 0 && err == nil {
		this.Ctx.WriteString("删除成功!")
		return
	}else {
		this.Ctx.WriteString("删除失败!")
	}
}

func (this *DeleteUserController) Get() {

	//通过姓名删除
	//http://localhost:8080/deleteuser?name=admin
	name := this.GetString("name")
	user := models.User{Name:name}

	//创建orm对象
	orm := orm.NewOrm()
	//delete函数默认根据id进行删除,也可以根据指定的字段进行删除
	//DELETE FROM USER WHERE NAME='Alice';
	n, err := orm.Delete(&user, "name")
	if n > 0 && err == nil {
		this.Ctx.WriteString("删除成功!")
		return
	}else {
		this.Ctx.WriteString("删除失败!")
	}
}

查询用户

func (this *QueryUserController) Get1() {
	//获取id查询用户
	//http://localhost:8080/queryuser?id=2
	id, err := this.GetInt("id")
	if err != nil {
		this.Ctx.WriteString("查询出错!")
		return
	}
	user := models.User{Id:id}

	//创建orm
	orm := orm.NewOrm()
	//默认根据id查询
	//SELECT * FROM USER WHERE id = 4;
	err = orm.Read(&user)
	if err != nil {
		this.Ctx.WriteString("查询出错!")
		return
	}else {
		this.Ctx.WriteString("id = " + strconv.Itoa(user.Id) + "\nname = " +
			user.Name + "\nage = " + strconv.Itoa(user.Age) + "\nnickname = " + user.Nickname)
	}
}


func (this *QueryUserController) Get() {
	//http://localhost:8080/queryuser?name=admin
	//获取用户输入的姓名
	name := this.GetString("name")
	//构造user
	user := models.User{Name:name}
	//创建orm
	orm := orm.NewOrm()
	//根据name查询用户,Read函数如果不指定参数
	//SELECT * FROM USER WHERE NAME = '吴俏祥';
	err := orm.Read(&user, "name")
	if err != nil {
		this.Ctx.WriteString("查询出错!")
		return
	}else {
		this.Ctx.WriteString("id = " + strconv.Itoa(user.Id) + "\nname = " +
			user.Name + "\nage = " + strconv.Itoa(user.Age) + "\nnickname = " + user.Nickname)
	}
}

更新用户

//http://localhost:8080/updateuser?id=1&name=tom&nickname=234&age=23
func (this *UpdateUserController) Get1() {
	id, err := this.GetInt("id")//获取id
	if err != nil {
		this.Ctx.WriteString("更新失败!")
		return
	}
	name := this.GetString("name")//获取姓名
	nickname := this.GetString("nickname")//获取昵称
	age, err := this.GetInt("age")
	if err != nil {
		this.Ctx.WriteString("更新失败!")
		return
	}
	user := models.User{Id:id, Name:name, Nickname:nickname, Age:age}
	//UPDATE USER SET NAME = '杜紫维' WHERE id = 1;
	//user := models.User{Id:id, Name:name, Nickname:nickname}
	orm := orm.NewOrm()
	//update函数根据对象的id进行更新,必须指定id
	n, err := orm.Update(&user)
	if n > 0 && err == nil {
		this.Ctx.WriteString("更新成功!")
	}else {
		this.Ctx.WriteString("更新失败!")
	}
}



//http://localhost:8080/updateuser?id=1&name=tom&nickname=234&age=23
func (this *UpdateUserController) Get() {
	id, err := this.GetInt("id")//获取id
	if err != nil {
		this.Ctx.WriteString("更新失败!")
		return
	}
	name := this.GetString("name")//获取姓名
	nickname := this.GetString("nickname")//获取昵称
	age, err := this.GetInt("age")
	if err != nil {
		this.Ctx.WriteString("更新失败!")
		return
	}
	user := models.User{Id:id, Name:name, Nickname:nickname, Age:age}
	//UPDATE USER SET NAME = '杜紫维' WHERE id = 1;
	//user := models.User{Id:id, Name:name, Nickname:nickname}
	orm := orm.NewOrm()
	//update函数根据指定字段进行更新,且必须指定id
	n, err := orm.Update(&user, "name")
	if n > 0 && err == nil {
		this.Ctx.WriteString("更新成功!")
	}else {
		this.Ctx.WriteString("更新失败!")
	}
}

插入订单

func (this *InserOrderController) Get(){
	//创建orm
	orm := orm.NewOrm()
	//创建订单
	order := models.Userorder{}
	//对订单初始化
	order.Orderdata = "this is order123"
	order.User = &models.User{Id:6}
	//如果不指定Id,可以插入成功,但是外键user_id为0
	//order.User = &models.User{Name:"吴俏祥"}
	//插入订单
	n, err := orm.Insert(&order)
	//判断是否插入成功
	if n > 0 && err != nil {
		this.Ctx.WriteString("插入失败!")
		return
	}
	this.Ctx.WriteString("插入成功!")
}

查询订单

func (this *QueryOrderController) Get(){
	orm := orm.NewOrm()
	//可以传递表名(大小写无关)和对象名
	qs := orm.QueryTable("Userorder")
	var orders []*models.Userorder
	//SELECT * FROM userorder WHERE user_id = 1;
	order_num, err := qs.Filter("user__id", 1).All(&orders)//user__id=user.id
	if err != nil {
		this.Ctx.WriteString("query order fail!")
		return
	}
	fmt.Println("order_num = ", order_num)
	for _, order := range orders {
		fmt.Println("order = ", order)
	}
	this.Ctx.WriteString("查询成功!")
}