クエリ
このセクションでは、主に 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());
EEORDERBY: 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]