美文网首页
flutter Moor数据库

flutter Moor数据库

作者: liboxiang | 来源:发表于2020-11-07 23:00 被阅读0次

    https://moor.simonbinder.eu/docs/getting-started/

    moor.png

    Expression<D>

    • moor中Table中的Column或者where中的条件设定都是Expression<D>Expression<D>能将自身对应的sql写到GenerationContextStringBuffer
    • 如此一来,每条数据库命令就可以通过GenerationContextStringBuffer得到
    • GenerationContext

    GenerationContext的创建和sql命令的拼接在以下方法中,以下方法一般在go()方法中调用

      GenerationContext constructQuery() {
        final ctx = GenerationContext.fromDb(database);
    
        // whether we need to insert a space before writing the next component
        var needsWhitespace = false;
    
        void writeWithSpace(Component /*?*/ component) {
          if (component == null) return;
    
          if (needsWhitespace) ctx.writeWhitespace();
          component.writeInto(ctx);
          needsWhitespace = true;
        }
    
        writeStartPart(ctx);
        needsWhitespace = true;
    
        writeWithSpace(whereExpr);
        writeWithSpace(_groupBy);
        writeWithSpace(orderByExpr);
        writeWithSpace(limitExpr);
    
        ctx.buffer.write(';');
    
        return ctx;
      }
    }
    

    join

    https://www.w3schools.com/sql/sql_join.asp
    如下所示,

    • leftOuterJoin则是所有MyDatabase().todos会被取出,MyDatabase().categories.id.equalsExp(MyDatabase().todos.category)的MyDatabase().categories会被取出
    • innerJoin则是MyDatabase().categories.id.equalsExp(MyDatabase().todos.category)的MyDatabase().categories和MyDatabase().todos才会被取出
    • crossJoin则是MyDatabase().categories和MyDatabase().todos都会被取出,且交叉匹配。也就是如果MyDatabase().categories有3条数据MyDatabase().todos有2条数据,则select得到2x3=6条数据
    MyDatabase()
                        .select(MyDatabase().todos)
                        .join(
                          [
                            leftOuterJoin(
                              MyDatabase().categories,
                              MyDatabase().categories.id.equalsExp(MyDatabase().todos.category),
                            ),
                             // crossJoin(
                            //   MyDatabase().categories,
                            // ),
                          ],
                        )
                        .get()
                        .then((value) {
                          print(value);
                          value.forEach((e){
                            print(e.readTable(MyDatabase().todos)?.toJson());
                            print(e.readTable(MyDatabase().categories)?.toJson());
                          });
                        });
    

    相关文章

      网友评论

          本文标题:flutter Moor数据库

          本文链接:https://www.haomeiwen.com/subject/ukrbnctx.html