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);
EEMenyusun 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());
SQL: ( username LIKE ? AND age >= ? ) OR ( sex = ? AND age < ? ) 参数: [%ymp%, 20, F, 18]
Kod contoh:
OrderBy _orderBy = OrderBy.create().asc("age").desc("u", "birthday"); // System.out.println(_orderBy.toSQL());
ORDER BY age, u.birthday DESC
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());
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());
Hasil pelaksanaan:
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);
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]
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]
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]