Beegoフレームワークorm操作exper操作

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__exactnameフィールドは以下に等しい) 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印刷する方法を開きますormsql

  • 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分割

おすすめ

転載: blog.csdn.net/kuangshp128/article/details/109383685
おすすめ