beego框架對(duì)數(shù)據(jù)庫(kù)的鏈接梆暮,如果你只是把數(shù)據(jù)庫(kù)連接寫到配置文件里,是不起任何人作用的绍昂,對(duì)于用習(xí)慣了laravel框架的我來說是非忱泊猓坑的一件事。
具體的鏈接只需要在入口文件添加
package main
import (
_ "achievement/routers"
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
)
func init() {
//設(shè)置日志文件
beego.SetLogger("file", `{"filename":"logs/beego.log"}`)
//設(shè)置數(shù)據(jù)庫(kù)的配制
orm.RegisterDataBase("default","mysql","root:123456@tcp(127.0.0.1:3306)/ssms?charset=utf8")
beego.BConfig.WebConfig.Session.SessionOn = true
}
func main() {
beego.Run();
}
構(gòu)造器
在beego文檔對(duì)構(gòu)造器的描述非常的少只有一個(gè)方法的描述窘游,所以很多東西我們不得不一邊看源碼唠椭,一邊嘗試這些方法的作用。
源碼中方法展示
type QueryBuilder interface {
Select(fields ...string) QueryBuilder
ForUpdate() QueryBuilder
From(tables ...string) QueryBuilder
InnerJoin(table string) QueryBuilder
LeftJoin(table string) QueryBuilder
RightJoin(table string) QueryBuilder
Where(cond string) QueryBuilder
And(cond string) QueryBuilder
Or(cond string) QueryBuilder
In(vals ...string) QueryBuilder
OrderBy(fields ...string) QueryBuilder
Asc() QueryBuilder
Desc() QueryBuilder
Limit(limit int) QueryBuilder
Offset(offset int) QueryBuilder
GroupBy(fields ...string) QueryBuilder
Having(cond string) QueryBuilder
Update(tables ...string) QueryBuilder
Set(kv ...string) QueryBuilder
Delete(tables ...string) QueryBuilder
InsertInto(table string, fields ...string) QueryBuilder
Values(vals ...string) QueryBuilder
Subquery(sub string, alias string) string
String() string
}
查詢語(yǔ)句
func (u *User)LoginJudge(account string,password string) []User {
var users []User
qb,_:=orm.NewQueryBuilder("mysql")
// 構(gòu)建查詢對(duì)象
qb.Select("user.account").
From("user").
Where("account = ?").
And("password = ?").And("type != 2")
//返回sql語(yǔ)句
sql := qb.String()
// 執(zhí)行 SQL 語(yǔ)句
o := orm.NewOrm()
o.Raw(sql,account,password).QueryRows(&users)
return users
}
beego的查詢語(yǔ)句可以根據(jù)條件拼接
//查詢學(xué)生的成績(jī)
func (this *Score)SelectAll(page,limit, class int,school string) []ScoreInformation {
var score []ScoreInformation
page = (page-1)*10
qb,_ := orm.NewQueryBuilder("mysql")
qb.Select("student.number","student.name","student.sex","clazz.clazz_name","grade.grade_name","escore.score","course.name as course_name","exam.exam_name","exam.time").
From("student,clazz,grade,escore,course,exam").
Where("student.clazzid = clazz.id").
And("student.gradeid = grade.id").
And("student.id = escore.studentid").
And("escore.courseid = course.id").
And("exam.id = escore.examid")
if class != -1 {
qb.And("clazz.id = "+strconv.Itoa(class))
}
if school != ""{
qb.And("student.number = "+school)
}
qb.Limit(limit).
Offset(page)
sql := qb.String()
fmt.Println(sql)
o := orm.NewOrm()
_,error:=o.Raw(sql).QueryRows(&score)
fmt.Println(error)
fmt.Println(score)
return score
}
插入語(yǔ)句
func (u *User)AddMenager(account,password,name string) error {
qb,_:=orm.NewQueryBuilder("mysql")
// 構(gòu)建查詢對(duì)象
qb.InsertInto("user","user.account","user.password","user.name","user.type").
Values("?","?","?","?")
//返回sql語(yǔ)句
sql := qb.String()
fmt.Println(sql)
// 執(zhí)行 SQL 語(yǔ)句
o := orm.NewOrm()
_,error := o.Raw(sql,account,password,name,3).Exec()
return error
}
刪除語(yǔ)句
func (u *User)DeleteMenagerConut(id int) error {
qb,_:=orm.NewQueryBuilder("mysql")
// 構(gòu)建查詢對(duì)象
qb.Delete("user").
From("user").
Where("id = ?")
//返回sql語(yǔ)句
sql := qb.String()
fmt.Println(sql)
// 執(zhí)行 SQL 語(yǔ)句
o := orm.NewOrm()
_,error := o.Raw(sql,id).Exec()
return error
}
在構(gòu)造其如果有那些方法不知道是什么意思可以將sql := qb.String()用fmt.Println()打印出來來查看具體的sql語(yǔ)句或許就會(huì)知道哪里有問題了
近期會(huì)將改版本改進(jìn)一下主要是對(duì)方法的封裝忍饰,以及對(duì)一些寫的不合理的地方的修改贪嫂,以及添加一些的新的功能,并且會(huì)將注釋加的詳細(xì)一點(diǎn)艾蓝,希望能給和我一樣的小白提供一些便利
完整版
訪問方式https://github.com/dajumao/achievement