beedb mysql_go编程之beego\orm使用

前面有提到go的mysql操作,但使用其进行数据库的操作封装,显然在实际的开发迭代中有几大问题存在,首先,sql操作及语句啰嗦而且复杂,其次工作效率也不是很高;如果使用此方法进行数据库开发,势必照成过多的代码冗余,且使用过程中容易产生各种问题。所以,今天我们一起来看看怎么使用beego下orm框架来辅佐我们进行mysql数据库操作。

orm即对象关系映射,通过类或者结构体与数据库表进行一一对应,今天我们通过简单的数据库操作代码来对照说明,且在代码中有对应操作的解释:

import (

"fmt"

_ "github.com/Go-SQL-Driver/MySQL"

"github.com/astaxie/beego/orm" //对应的beego/orm库 可以通过 go get来获取到本地GOPATH路径下

"time"

)

//与数据库学生表映射的结构体

type studentinfo struct {

Id int `pk:"auto"`

Stuname string `orm:"size(20)"`

Stuidentify string `orm:"size(30)"`

Stubirth time.Time

Stuclass string `orm:"size(30)"`

Stumajor string `orm:"size(30)"`

}

//数据库连对象需要的信息

var (

dbuser string = "root"

dbpwd string = "691214"

dbname string = "gosql"

)

//初始化orm

func init() {

conn := dbuser + ":" + dbpwd + "@/" + dbname + "?charset=utf8"//组合成连接串

orm.RegisterModel(new(studentinfo))//注册表studentinfo 如果没有会自动创建

orm.RegisterDriver("mysql", orm.DR_MySQL) //注册mysql驱动

orm.RegisterDataBase("default", "mysql", conn) //设置conn中的数据库为默认使用数据库

orm.RunSyncdb("default", false, false)//后一个使用true会带上很多打印信息,数据库操作和建表操作的;第二个为true代表强制创建表

}

func main() {

orm.Debug = true //true 打印数据库操作日志信息

dbObj := orm.NewOrm() //实例化数据库操作对象

//插入数据sql := fmt.Sprintf("insert into studentinfo(Id,Stuname, Stuidentify, Stubirth, Stuclass, Stumajor)"+

" values(1, 'rjx','xxx319928xxx','%s','信管1班','信息管理与信息系统')", "1992-01-01 11:11:11")

fmt.Println(sql)

_, err := dbObj.Raw(sql).Exec()

if err != nil {

fmt.Println("插入数据至:t_studentInfo出错")

}

sql = fmt.Sprintf("insert into studentinfo(Id, Stuname, Stuidentify, Stubirth, Stuclass, Stumajor)"+

" values(2, 'qcy','xxx319918xxx','%s','XXX','YYYYYY')", "1992-01-01 11:11:11")

_, err = dbObj.Raw(sql).Exec()

if err != nil {

fmt.Println("插入数据至:t_studentInfo出错")

}

//更新数据

sql = "update studentinfo set Stuname='qcym' where Id= 2"

_, err = dbObj.Raw(sql).Exec()

if err != nil {

fmt.Println("更新t_studentInfo表出错")

}

//通过事务方式来进行数据插入

err = dbObj.Begin()

sql = fmt.Sprintf("insert into studentinfo(Id, Stuname, Stuidentify, Stubirth, Stuclass, Stumajor)"+

" values(3, 'loe','xxx319918xxx','%s','zzzz','TTTT')", "1992-01-01 11:11:11")

_, err = dbObj.Raw(sql).Exec()

if err != nil {

dbObj.Rollback()

fmt.Println("插入t_studentInfo表出错,事务回滚")

} else {

dbObj.Commit()

fmt.Println("插入t_studenInfo表成功,事务提交")

}

//查询数据库

students := make([]studentinfo, 20)

//var students []studentinfo

sql = "select Id,Stuname,Stuidentify,Stubirth,Stuclass,Stumajor from studentinfo"

fmt.Println(sql)

num, er := dbObj.Raw(sql).QueryRows(&students)

if er != nil {

fmt.Println("查询学生信息出错")

} else {

fmt.Printf("从t_studenInfo表中共查询到记录:%d条\n", num)

for index, _ := range students {

fmt.Printf("第%d个学生个人信息:", index+1)

fmt.Printf("姓名:%s,身份证号:%s,出生日期:%s,班级:%s,专业:%s", students[index].Stuname, students[index].Stuidentify, students[index].Stubirth, students[index].Stuclass, students[index].Stumajor)

}

}

//

}

以上orm操作基本完成了对数据库的增删改插操作,但共同特点相信都知道,就是都是使用sql语句来完成的,接下来我们完全使用结构体来成对应的功能。这样操作起来会显得更加方便,相当于在三成框架中已经帮我完全搭建好了dao,数据库的操作层,咱只需要在此上再做简单的封装就行。

下面是使用结构体来完成同上的功能:

func main() {

orm.Debug = true

dbObj := orm.NewOrm()

var stuPtr *studentinfo = new(studentinfo)

stuPtr.Stuname = "xiaom"

stuPtr.Stubirth = time.Now()

stuPtr.Stuclass = "一年级1班"

stuPtr.Stuidentify = "1234"

stuPtr.Stumajor = "计算机"

tm := time.Now()

var studentus = []studentinfo{

{Stuname: "xd", Stuidentify: "1235", Stubirth: tm, Stuclass: "一年级2班", Stumajor: "数据库"},

{Stuname: "xx", Stuidentify: "1236", Stubirth: tm, Stuclass: "一年级3班", Stumajor: "网络"},

{Stuname: "xn", Stuidentify: "1237", Stubirth: tm, Stuclass: "一年级4班", Stumajor: "C语言"},

{Stuname: "xb", Stuidentify: "1238", Stubirth: tm, Stuclass: "一年级5班", Stumajor: "JAVA"},

{Stuname: "xq", Stuidentify: "1239", Stubirth: tm, Stuclass: "一年级6班", Stumajor: "C++"},

}

var err error

_, err = dbObj.Insert(stuPtr)//单条记录插入

if err != nil {

fmt.Printf("插入学生:%s信息出错。\n", stuPtr.Stuname)

} else {

fmt.Printf("插入学生:%s信息成功。\n", stuPtr.Stuname)

}

var num int64

num, err = dbObj.InsertMulti(5, studentus)//多条记录插入

if err != nil {

fmt.Printf("插入%d个学生信息错误,%d个学会信息成功。\n", 5-num, num)

} else {

fmt.Printf("成功插入%d学生信息。\n", num)

}

studentR := new(studentinfo)//记录读取,需要指定主键

studentR.Id = 6

err = dbObj.Read(studentR)

if err != nil {

fmt.Printf("读取ID:%d的学生信息失败", studentR.Id)

} else {

fmt.Printf("ID:%d的学生个人信息为:\n",studentR.Id)

fmt.Println(studentR)

}

studentU := new(studentinfo)

studentU.Id = 5

studentU.Stumajor = "管理科学与工程"

_, err = dbObj.Update(studentU, "Stumajor")//记录更新

if err != nil {

fmt.Printf("更新ID:%d的学生信息失败。", studentU.Id)

} else {

fmt.Printf("更新ID:%d的学生信息成功。", studentU.Id)

}

///删除 dbObj.Delete(studentU)//

}         以上为beego下操作mysql数据库的基本用法,希望对大家有所帮助,能达到同样目地的还有beedb,有时间可以参考下。

有疑问加站长微信联系(非本文作者)

5c5fbae790ec0313d6ee17e8b3dd9ba1.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值