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]

    Pages : objet de paramètre de pagination ;
  • 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);
    EE

    ORDERBY : 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]
    GroupBy : Objet de regroupement, utilisé pour générer le Group By. dans l'instruction de condition SQL ;
    Exemple de code :

    OrderBy _orderBy = OrderBy.create().asc("age").desc("u", "birthday");
    //
    System.out.println(_orderBy.toSQL());
    Résultat de l'exécution :
  • 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]
  • Join : Objet d'instruction de connexion, utilisé pour générer le Join clause dans l'instruction SQL, prend en charge les connexions gauche, droite et interne ;
    Exemple de code :

    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());

    Résultats de l'exécution :
  • SQL: WHERE
             username LIKE ?
         AND age >= ?
         GROUP BY
             u.sex,
             dept
         ORDER BY
             username DESC,
             age,
             u.birthday DESC
    参数: [%ymp%, 20]
  • Union : objet d'instruction Union, utilisé pour fusionner plusieurs requêtes Select. résultats ;
    Exemple de code :

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

    Résultat de l'exécution :
  • INNER JOIN user_ext ue ON ue.uid = u.id
  • Sélection : objet d'instruction de requête

    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());

    Insérer : Insérer un objet de déclaration
  • 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);
 ;