5 Stimmen

Mybatis Bestellung nach vielen Feldern mit dynamischem SQL

Gibt es eine sauberere Möglichkeit, das Folgende zu tun:

select * from t_user 

    order by

                c_name 

                c_last_name 

                c_email 

                c_password 

                i_age

            asc 

            desc 

limit #{limit} offset #{offset};

Wie Sie ableiten können, sieht QueryData so aus:

public class FiltroBusquedaVO {

private Integer offset;
private Integer limit;
private String fieldName;
private String ascDesc; ... }

Es wäre schön, wenn ich einen Spaltennamen anhand eines Feldnamens erhalten könnte. Ich meine, die Ergebniskarten haben diese Informationen. Aber anscheinend kann ich sie nicht aus dem XML bekommen.

Mein Beispiel hat nur 5 Felder, aber was ist mit 20 Feldern? Gibt es einen anderen Weg, dies weniger umständlich zu machen?

1voto

K. Siva Prasad Reddy Punkte 10706

Siehe meine Antwort zu einem ähnlichen Problem.

Mybatis Eigenschaft zur Spalte zuordnen

Aber damit kennt Ihr Java-Code nur die Spaltennamen.

1voto

So habe ich es gemacht:

List getProjectsLocks(@Param("projectId") Integer projectId, @Param("userId") Integer userId, @Param("limit") Integer limit,
            @Param("offset") Integer offset, @Param("sortAsc") List sortAsc, @Param("sortDesc") List sortDesc);

        SELECT pl.id,
               pl.project_id,
               pl.notes,
               pl.created_by_id,
               pl.created_at,
               u.id AS user_id,
               u.email AS user_email,
               u.first_name AS user_first_name,
               u.last_name AS user_last_name
        FROM projects_locks pl
        LEFT JOIN users u ON u.id = pl.created_by_id
        WHERE 1=1
         AND pl.project_id = #{projectId}
         AND pl.created_by_id = #{userId}

                ORDER BY 

                        $ {element}

                , 

                        $ {element}

            ORDER BY pl.id;

        LIMIT #{limit}
        OFFSET #{offset}

Wo die 2 Listen Strings wie "pl.project_id", "pl.id" enthalten werden.

Der kritische Teil hier ist das Dollarzeichen "$" vor dem {element}. Wenn Sie das Standardzeichen # verwenden, funktioniert es nicht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X