クエリ


このセクションでは、主に YMP フレームワークの v2 バージョンの新機能を紹介します。これは、開発者が Java コードを書くのと同じように SQL ステートメントを書くのを支援します。これは、従来の文字列スプライシング モードをある程度置き換えるものであり、フィールド定数と一緒に使用されます。これの利点は、Java コードは SQL ステートメントであるため、文字列の結合中にエラーが発生する可能性が減少することです。

基本パラメータオブジェクト
  • フィールド: データテーブルのフィールド名の結合、接頭辞、別名などのサポートに使用されるフィールド名コレクションオブジェクト

    サンプルコード:

    // 创建Fields对象
    Fields _fields = Fields.create("username", "pwd", "age");
    // 带前缀和别名
    _fields.add("u", "sex", "s");
    // 带前缀
    _fields = Fields.create().add("u", "id").add(_fields);
    // 标记集合中的字段为排除的
    _fields.excluded(true);
    // 判断是否存在排除标记
    _fields.isExcluded();
    // 输出
    System.out.println(_fields.fields());

    実行結果。 :

    [u.id, username, pwd, age, u.sex s]
  • Params: 主に SQL ステートメント内の ? プレースホルダーを格納および置換するために使用されるパラメーター コレクション オブジェクト

    サンプル コード:

    // 创建Params对象,任何类型参数
    Params _params = Params.create("p1", 2, false, 0.1).add("param");
    // 
    _params = Params.create().add("paramN").add(_params);
    // 输出
    System.out.println(_params.params());

    実行結果:

    りー
  • Pages: ページング パラメータ オブジェクト;

    サンプル コード:

    [paramN, p1, 2, false, 0.1, param]
  • Cond: SQL 条件を生成し、条件パラメータを保存するために使用される

    サンプル コード:

    以下を生成します。 SQL 条件: A (ユーザー名は好きですか? And 年齢 & gt; =?) または (性別 =? Andu & lt;?)

    // 查询每1页, 默认每页20条记录
    Page.create(1);
    // 查询第1页, 每页10条记录
    Page.create(1).pageSize(10);
    // 查询第1页, 每页10条记录, 不统计总记录数
    Page.create(1).pageSize(10).count(false);
    実行結果:

    Cond _cond = Cond.create()
        .bracketBegin().like("username").param("%ymp%").and().gtEq("age").param(20).bracketEnd()
        .or()
        .bracketBegin().eq("sex").param("F").and().lt("age").param(18).bracketEnd();
    
    System.out.println("SQL: " + _cond.toString());
    System.out.println("参数: " + _cond.params().params());
    EE

    ORDERBY: SQL 条件で Order By ステートメントを生成するために使用されるソート オブジェクト。ステートメント;
  • サンプルコード:

    SQL: ( username LIKE ? AND age >= ? )  OR  ( sex = ? AND age < ? ) 
    参数: [%ymp%, 20, F, 18]

    実行結果:

    OrderBy _orderBy = OrderBy.create().asc("age").desc("u", "birthday");
    //
    System.out.println(_orderBy.toSQL());

    Where: SQL ステートメントの Where 句を生成するために使用される
  • サンプルコード:

    ORDER BY age, u.birthday DESC

    実行結果: (読みやすいように、SQLの出力形式はここで美化されています:P)

    GroupBy _groupBy = GroupBy.create(Fields.create().add("u", "sex").add("dept"))
        .having(Cond.create().lt("age").param(18));
    
    System.out.println("SQL: " + _groupBy.toString());
    System.out.println("参数: " + _groupBy.having().params().params());

    Join: SQLでJoin句を生成するために使用される接続文オブジェクトステートメント、左、右、および内部接続をサポートします。
  • サンプルコード:

    SQL: GROUP BY u.sex, dept HAVING age < ?
    参数: [18]

    実行結果:

    Cond _cond = Cond.create()
            .like("username").param("%ymp%")
            .and().gtEq("age").param(20);
    
    OrderBy _orderBy = OrderBy.create().asc("age").desc("u", "birthday");
    
    GroupBy _groupBy = GroupBy.create(Fields.create().add("u", "sex").add("dept"));
    
    Where _where = Where.create(_cond).groupBy(_groupBy).orderDesc("username");
    
    _where.orderBy().orderBy(_orderBy);
    //
    System.out.println("SQL: " + _where.toString());
    System.out.println("参数: " + _where.getParams().params());

    Union: 複数の Select クエリ結果をマージするために使用されます。サンプルコード:
  • SQL: WHERE
             username LIKE ?
         AND age >= ?
         GROUP BY
             u.sex,
             dept
         ORDER BY
             username DESC,
             age,
             u.birthday DESC
    参数: [%ymp%, 20]

    実行結果:

    Join _join = Join.inner("user_ext").alias("ue")
        .on(Cond.create().opt("ue", "uid", Cond.OPT.EQ, "u", "id"));
    
    System.out.println(_join);

    Select: クエリ文オブジェクト
  • INNER JOIN user_ext ue ON ue.uid = u.id

    Inser t: ステートメントオブジェクトを挿入
    Select _select = Select.create("user").where(Where.create(Cond.create().eq("dept").param("IT")))
            .union(Union.create(
                    Select.create("user").where(Where.create(Cond.create().lt("age").param(18)))));
    //
    System.out.println("SQL: " + _select.toString());
    System.out.println("参数: " + _select.getParams().params());

    Update: ステートメント オブジェクトの更新
    SQL: SELECT  *  FROM user WHERE dept = ?  UNION SELECT  *  FROM user WHERE age < ?   
    参数: [IT, 18]
    Delete: ステートメント オブジェクトの削除
    示例代码:
    
        Cond _cond = Cond.create()
                .like("u", "username").param("%ymp%")
                .and().gtEq("u", "age").param(20);
        //
        GroupBy _groupBy = GroupBy.create(Fields.create().add("u", "sex").add("u", "dept"));
        //
        Where _where = Where.create(_cond).groupBy(_groupBy).orderDesc("u", "username");
        //
        Join _join = Join.inner("user_ext").alias("ue")
                .on(Cond.create().opt("ue", "uid", Cond.OPT.EQ, "u", "id"));
        //
        Select _select = Select.create(User.class, "u")
                .field("u", "username").field("ue", "money")
                .where(_where)
                .join(_join)
                .distinct();
        //
        System.out.println("SQL: " + _select.toString());
        System.out.println("参数: " + _select.getParams().params());
    
    执行结果:(为方便阅读,此处美化了SQL的输出格式:P)
    
        SQL: SELECT DISTINCT
                    u.username,
                    ue.money
                FROM
                    USER u
                INNER JOIN user_ext ue ON ue.uid = u.id
                WHERE
                    u.username LIKE ?
                AND u.age >= ?
                GROUP BY
                    u.sex,
                    u.dept
                ORDER BY
                    u.username DESC 
        参数: [%ymp%, 20]
    SQL: カスタム SQL ステートメント

    は、ISession セッション インターフェイス パラメーターのカプセル化にも使用されます

    サンプル コード:

    示例代码:
    
        Insert _insert = Insert.create(User.class)
                .field(User.FIELDS.ID).param("123456")
                .field(User.FIELDS.AGE).param(18)
                .field(User.FIELDS.USER_NAME).param("suninformation");
        //
        System.out.println("SQL: " + _insert.toString());
        System.out.println("参数: " + _insert.params().params());
    
    执行结果:
    
        SQL: INSERT INTO user (id, age, username) VALUES (?, ?, ?)
        参数: [123456, 18, suninformation]
    BatchSQL: バッチ SQL ステートメント オブジェクト

    は、主にバッチ操作の ISession セッション パラメーターのカプセル化に使用されます。

    EntitySQL : エンティティパラメータカプセル化オブジェクト

    は主に ISession セッションのパラメータのカプセル化に使用されます
    サンプルコード:
    示例代码:
    
        Update _update = Update.create(User.class)
                .field(User.FIELDS.PWD).param("xxxx")
                .field(User.FIELDS.AGE).param(20)
                .where(Where.create(
                        Cond.create().eq(User.FIELDS.ID).param("123456")));
        //
        System.out.println("SQL: " + _update.toString());
        System.out.println("参数: " + _update.getParams().params());
    
    执行结果:
    
        SQL: UPDATE user SET pwd = ?, age = ? WHERE id = ? 
        参数: [xxxx, 20, 123456]