1.基本的な使用法
-
1.プロジェクトを初期化します
-
2.依存パッケージをインストールします
// orm框架 go get github.com/astaxie/beego/orm // 使用什么数据库 go get github.com/go-sql-driver/mysql
-
3.関数を
main.go
使用init
して接続しますimport ( ... _ "github.com/go-sql-driver/mysql" // 必须加上 ) func init() { orm.RegisterDriver("mysql", orm.DRMySQL) // default必须要有,表示连接的数据库别名,可能是多个 orm.RegisterDataBase("default", "mysql", "用户名:密码@tcp(localhost:3306)/数据库名?charset=utf8mb4&parseTime=True&loc=Local") }
-
4.
models
データモデルを保存するフォルダーを作成します(データベーステーブルとの1対1の対応)package models import "github.com/astaxie/beego/orm" type User struct { Id int Name string Age int Address string } //自定义表名,可以不写的会默认以下划线来分割驼峰命名的 func (self *User) TableName () string { return "user" } func init() { // 使用exper表达式必须要注入模型,因此我们强制自己不管什么都要在模型中使用init函数来注入模型 orm.RegisterModel(new(User)) }
exper
クエリを使用してハンドルを作成する2つまたは2つの方法
-
1.テーブル名を直接使用してハンドルを作成します
type UserExper1Controller struct { beego.Controller } func (ctx *UserExper1Controller) Get() { o := orm.NewOrm() // 使用表名的方式来创建一个exper查询句柄 qs :=o.QueryTable("user") // 查询后的数据需要放到user这个结构体中 user := models.User{ } // 使用expre表达式查询【name__exact】表示name完全匹配,One表示查询一条数据 qs.Filter("name__exact", "孙悟空").One(&user) fmt.Println(user) ctx.TplName="orm.html" }
-
2.データモデルの使用方法[データモデルの使用を推奨]
type UserExper1Controller struct { beego.Controller } func (ctx *UserExper1Controller) Get() { o := orm.NewOrm() // 使用数据模型 userModel := new(models.User) qs :=o.QueryTable(userModel) user := models.User{ } qs.Filter("name__exact", "孙悟空").One(&user) fmt.Println(user) ctx.TplName="orm.html" }
3つの一般的なexper
式操作記号
番号 | 名前 | 例えば | ネイティブSQLを比較する |
---|---|---|---|
1 | exact/iexact |
name__exact (name フィールドは以下に等しい) |
where name = "xx" |
2 | contains/icontains |
name__contains (含む) |
where name like "%xx%" |
3 | gt/gte |
age__gt (以上/以上) |
where age > 19 |
4 | lt/lte |
age__lt (以下/以下) |
where age < 19 |
5 | startswith/istartswith |
name__startswith (何から始めます) |
where name like "x%" |
6 | endswith/iendswith |
name__endswith (何で終わる) |
where name like "%x" |
7 | in |
age__in (どの範囲で) |
where age in (1,2,3) |
8 | isnull |
qs.Filter("gender__isnull",true).One(&user) |
第四に、対応する文をbeego
印刷する方法を開きますorm
sql
-
1.グローバルに開く
main.go
(推奨)func main() { orm.Debug = true beego.Run() }
-
2.対応するコントローラーの部分的な開発
func (ctx *UserExper1Controller) Get() { // 开始打印对应的sql orm.Debug = true ... ctx.TplName="orm.html" }
5、Filter
使用
-
1.目的のフィールドをクエリします
o := orm.NewOrm() // 使用数据模型 userModel := new(models.User) qs := o.QueryTable(userModel) user := models.User{ } // 需要查询出什么字段就在后面加 qs.Filter("name__exact", "孙悟空").One(&user, "Name","Age") fmt.Println(user) ctx.Data["json"] = user ctx.ServeJSON()
-
2.マルチコンディションクエリ
o := orm.NewOrm() userModel := new(models.User) qs := o.QueryTable(userModel) user := models.User{ } // 多条件的时候就多使用Filter qs.Filter("name__exact","孙悟空").Filter("age__gte", 2000).One(&user, "Name","Age") // 匹配的sql // select name, age from user where name = "孙悟空" and age >= 2000; ctx.Data["json"] = user ctx.ServeJSON()
-
3.
all
複数のクエリステートメントを使用するo := orm.NewOrm() userModel := new(models.User) qs := o.QueryTable(userModel) //返回多条语句要用切片 user := []models.User{ } //不加条件的查询 qs.All(&user, "Name", "Age", "Address") // select name, age, address from user; ctx.Data["json"] = user ctx.ServeJSON()
-
4.
Exclude
除外フィールドを使用して戻りますo := orm.NewOrm() userModel := new(models.User) qs := o.QueryTable(userModel) user := []models.User{ } qs.Exclude("name__exact", "孙悟空").All(&user) // select * from user where not name = "孙悟空"; ctx.Data["json"] = user ctx.ServeJSON()
-
5.ページングクエリステートメント
o := orm.NewOrm() userModel := new(models.User) qs := o.QueryTable(userModel) user := []models.User{ } //查询3条,从第一条开始查询 qs.Limit(3).Offset(1).All(&user) // select * from user limit 1,3; ctx.Data["json"] = user ctx.ServeJSON()
-
6.フィールドで並べ替え
o :=orm.NewOrm() userModel := new(models.User) qs := o.QueryTable(userModel) user := []models.User{ } // 默认是升序,如果要降序的话就直接OrderBy("-age") qs.OrderBy("age").All(&user) ctx.Data["json"] = user ctx.ServeJSON()
-
7.それが存在するかどうかを判断します
exist := qs.Filter("name__exact","猪八戒").Exist() // 返回true或者false fmt.Println(exist)
-
8.
Update
更新操作を使用しますo := orm.NewOrm() userModel := new(models.User) num, err := o.QueryTable(userModel).Filter("name__exact", "孙悟空").Update(orm.Params{ "Age": 2000, }) fmt.Println(num) // 受影响的行数 fmt.Println(err) // 错误 ctx.Data["json"] = map[string]string{ "code": "0", "message": "成功", } ctx.ServeJSON()
-
9、ステートメントを削除
o := orm.NewOrm() userModel := new(models.User) num, err := o.QueryTable(userModel).Filter("name__exact","孙悟空").Delete() fmt.Println(num) fmt.Println(err)
-
10.
PrepareInsert
複数のステートメントを同時に挿入します最後に閉じるように注意してください
o := orm.NewOrm() users := []models.User{ { Name: "孙悟空",Age: 1000,Address: "花果山"}, { Name: "猪八戒",Age: 800,Address: "高老庄"}, { Name: "沙增",Age: 500,Address: "流沙河"}, } inserter, _ := o.QueryTable(new(models.User)).PrepareInsert() // 循环切片的数据 for _, val := range users { id, err := inserter.Insert(&val) fmt.Println(id) fmt.Println(err) } //注意要记得关闭 inserter.Close() // 但是插入多条数据建议使用InsertMulti o := orm.NewOrm() users := []models.User{ { Name: "郭靖", Age: 30, Address: "襄阳"}, { Name: "黄蓉", Age: 23, Address: "襄阳"}, } num, err := o.InsertMulti(100, &users) fmt.Println(num, err)
-
11.
values
使用します(実際json
に目的のフィールドを返します)var maps []orm.Params o := orm.NewOrm() num, err := o.QueryTable(new(models.User)).Filter("age__gte", 100).Values(&maps, "Name", "Id", "Address", "Age") fmt.Println(num, err) ctx.Data["json"] = maps ctx.ServeJSON()
-
12.
ValuesList
デフォルトの戻り値は1000データですvar lists []orm.ParamsList o := orm.NewOrm() // 返回数组,里面嵌套根据字段嵌套 num, err := o.QueryTable(new(models.User)).ValuesList(&lists, "Name") fmt.Println(num, err) ctx.Data["json"] = lists ctx.ServeJSON() // 返回的数据结构 [ [ "唐三藏" ], [ "孙悟空" ] ]
-
13.
ValuesFlat
フラット化は配列を返しますvar lists orm.ParamsList o := orm.NewOrm() // 返回数组,里面嵌套根据字段嵌套 num, err := o.QueryTable(new(models.User)).ValuesFlat(&lists, "Name") fmt.Println(num, err) ctx.Data["json"] = lists ctx.ServeJSON() // 返回数据 [ "唐三藏", "孙悟空", ]
-
14.
Update
既存のフィールドに基づいて値を追加しますo := orm.NewOrm() num, err := o.QueryTable(new(models.User)).Filter("name__exact", "孙悟空").Update(orm.Params{ "Age": orm.ColValue(orm.ColAdd, 100), }) // 对应的原生sql // update user set age=age+100 where name = "孙悟空"; fmt.Println(num, err)
対応する他の方法は
-
ColAdd
追加 -
ColMinus
減らす -
ColMultiply
乗算 -
ColExcept
分割
-