Pertanyaan


Bahagian ini terutamanya memperkenalkan ciri baharu dalam rangka kerja YMP versi v2, yang membantu pembangun dalam menulis pernyataan SQL seperti kod Java Ia menggantikan mod penyambungan rentetan tradisional pada tahap tertentu dan digunakan bersama pemalar medan data entiti. Kelebihan ini adalah untuk mengurangkan kebarangkalian ralat semasa penyambungan rentetan Beberapa masalah tertentu boleh ditemui semasa penyusunan, kerana kod Java ialah pernyataan SQL!

Objek parameter asas
  • Medan: Objek pengumpulan nama medan, digunakan untuk membantu dalam penyambungan nama medan jadual data, awalan sokongan, alias, dsb. :

    // 创建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());

    Params: Objek koleksi parameter, terutamanya digunakan untuk menyimpan dan menggantikan pemegang tempat dalam pernyataan SQL;

    [u.id, username, pwd, age, u.sex s]
  • Halaman: objek parameter paging;
  • Kod contoh:

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

    Cond: Condition parameter object, digunakan untuk menjana syarat SQL dan menyimpan kod keadaan berikut:

    Syarat SQL: A (nama pengguna seperti? Dan umur & gt; =?) Atau (jantina =? Andu & lt;?)
  • [paramN, p1, 2, false, 0.1, param]

    laksanakan keputusan:

    // 查询每1页, 默认每页20条记录
    Page.create(1);
    // 查询第1页, 每页10条记录
    Page.create(1).pageSize(10);
    // 查询第1页, 每页10条记录, 不统计总记录数
    Page.create(1).pageSize(10).count(false);
    EE
  • Menyusun objek , digunakan untuk menjana penyataan Perintah Mengikut dalam keadaan SQL;

    Kod sampel:
    • 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());
    Hasil pelaksanaan:
    SQL: ( username LIKE ? AND age >= ? )  OR  ( sex = ? AND age < ? ) 
    参数: [%ymp%, 20, F, 18]

  • terpakai dalam objek SQL untuk Kumpulan, Byg digunakan Pernyataan;
  • Kod contoh:

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

    ORDER BY age, u.birthday DESC
  • Di mana: Kod pernyataan Where, digunakan untuk menjana pernyataan SQL
  • 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());

    Hasil pelaksanaan: (Untuk kemudahan membaca, format output SQL dipercantikkan di sini:P)
    SQL: GROUP BY u.sex, dept HAVING age < ?
    参数: [18]

    Sertai: objek pernyataan Sambungan, digunakan untuk menjana klausa Join pernyataan, menyokong sambungan kiri, kanan dan dalaman; Kod contoh:
  • 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());

    Hasil pelaksanaan:

    SQL: WHERE
             username LIKE ?
         AND age >= ?
         GROUP BY
             u.sex,
             dept
         ORDER BY
             username DESC,
             age,
             u.birthday DESC
    参数: [%ymp%, 20]

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

    Pilih: objek pernyataan pertanyaan

    Sisipkan: Sisipkan objek pernyataan
  • INNER JOIN user_ext ue ON ue.uid = u.id
  • Kemas kini: Kemas kini objek pernyataan
    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());
    Padam: Padamkan objek pernyataan
    SQL: SELECT  *  FROM user WHERE dept = ?  UNION SELECT  *  FROM user WHERE age < ?   
    参数: [IT, 18]

    juga digunakan untuk penyataan SQL: IS
    juga digunakan untuk penyataan IS
    enkapsulasi parameter antara muka
    Kod sampel:

    示例代码:
    
        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]

    BatchSQL: Batch SQL objek pernyataan
    digunakan terutamanya untuk pengkapsulan parameter sesi ISession bagi operasi kelompok;
    EntitySQL : Parameter Entiti objek enkapsulasi

    digunakan terutamanya untuk pengkapsulan parameter sesi ISession;

    Kod sampel:
    示例代码:
    
        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]
🎜