Requête
Cette section présente principalement les nouvelles fonctionnalités de la version v2 du framework YMP, qui aide les développeurs à écrire des instructions SQL comme le code Java. Elle remplace dans une certaine mesure le mode d'épissage de chaînes traditionnel et est utilisée avec les constantes de champ des données. L'avantage de ceci est de réduire les risques d'erreurs lors de l'épissage des chaînes. Certains problèmes spécifiques peuvent être découverts lors de la compilation, car le code Java est une instruction SQL !
Objet de paramètre de base
Champs : objet de collection de noms de champs, utilisé pour aider à épisser les noms de champs de la table de données, prendre en charge les préfixes, les alias, etc. :
// 创建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 : objet de collection de paramètres, principalement utilisé pour stocker et remplacer l'espace réservé ? dans les instructions SQL ;
[u.id, username, pwd, age, u.sex s]
- Exemple de code :
// 创建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 : objet de paramètre de condition, utilisé pour générer des conditions SQL et stocker les paramètres de condition ; Conditions SQL : A (nom d'utilisateur comme ? Et âge & gt; =?) OU (sexe =? Andu & lt;?)[paramN, p1, 2, false, 0.1, param]
- résultat de l'exécution :
// 查询每1页, 默认每页20条记录 Page.create(1); // 查询第1页, 每页10条记录 Page.create(1).pageSize(10); // 查询第1页, 每页10条记录, 不统计总记录数 Page.create(1).pageSize(10).count(false);
EEORDERBY : Objet de tri, utilisé pour générer l'instruction Order By dans la condition SQL ; - Exemple de code :
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());
Résultat de l'exécution :
SQL: ( username LIKE ? AND age >= ? ) OR ( sex = ? AND age < ? ) 参数: [%ymp%, 20, F, 18]
Exemple de code :GroupBy : Objet de regroupement, utilisé pour générer le Group By. dans l'instruction de condition SQL ;Résultat de l'exécution :OrderBy _orderBy = OrderBy.create().asc("age").desc("u", "birthday"); // System.out.println(_orderBy.toSQL());
ORDER BY age, u.birthday DESC
Où : objet d'instruction Where, utilisé pour générer la clause Where dans l'instruction SQL ; code :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());
Résultats de l'exécution : (Pour faciliter la lecture, le format de sortie de SQL est embelli ici :P)
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());
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
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());
SQL: SELECT * FROM user WHERE dept = ? UNION SELECT * FROM user WHERE age < ? 参数: [IT, 18]
Mise à jour : mettre à jour l'objet d'instruction
示例代码: 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]
Delete : supprimer l'objet d'instruction
示例代码: 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]
SQL : l'instruction SQL personnalisée
est également utilisée pour la session ISession encapsulation des paramètres d'interface ;
Exemple de code :
示例代码: 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]
BatchSQL : l'objet d'instruction SQL par lots
est principalement utilisé pour l'encapsulation des paramètres de session ISession des opérations par lots
Exemple de code :
示例代码: Delete _delete = Delete.create(User.class) .where(Where.create( Cond.create().eq(User.FIELDS.ID).param("123456"))); // System.out.println("SQL: " + _delete.toString()); System.out.println("参数: " + _delete.getParams().params()); 执行结果: SQL: DELETE FROM user WHERE id = ? 参数: [123456]
; EntitySQL : paramètre d'entité l'objet d'encapsulation
est principalement utilisé pour l'encapsulation des paramètres des sessions ISession
Exemple de code :
// 自定义SQL语句 SQL _sql = SQL.create("select * from user where age > ? and username like ?").param(18).param("%ymp%"); // 执行 session.find(_sql, IResultSetHandler.ARRAY); // 或封装语句对象 SQL.create(_select); SQL.create(_insert); SQL.create(_update); SQL.create(_delete);