Κοινή χρήση τεχνολογίας

Πώς να εφαρμόσετε το Mybatis αριστερά join

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Όταν χρησιμοποιούμε το MyBatis Plus για λειτουργίες βάσης δεδομένων, μερικές φορές χρειάζεται να λαμβάνουμε δεδομένα από πολλούς πίνακες. Αυτό το άρθρο θα εισαγάγει τον τρόπο εφαρμογής του αριστερού ερωτήματος σύνδεσης στο MyBatis Plus. Θα πάρουμε ως παράδειγμα δύο πίνακες, ο ένας είναι ο πίνακας επικεφαλής τμήματος (system_dept_leader), και το άλλο είναι ο πίνακας χρηστών (system_user), και δείχνει πώς να αποκτήσετε τις λεπτομερείς πληροφορίες του επικεφαλής του τμήματος μέσω μιας αριστερής σύνδεσης, συμπεριλαμβανομένου του ψευδώνυμου και του αριθμού εργασίας του χρήστη.

Δομή πίνακα δεδομένων

Ας υποθέσουμε ότι έχουμε τους ακόλουθους δύο πίνακες δεδομένων:

πίνακας ηγεσίας τμήματος (system_dept_leader)

Ονομα πεδίουτύποςπεριγράφω
ταυτότηταΜακρύςπρωτεύων κλειδί
dept_idΜακρύςΤαυτότητα Τμήματος
ταυτότητα χρήστηΜακρύςταυτότητα χρήστη
είναι_πρωτεύονΑκέραιος αριθμόςΕίναι σημαντικό

 

πίνακας χρηστών (system_user)

Ονομα πεδίουτύποςπεριγράφω
ταυτότηταΜακρύςπρωτεύων κλειδί
παρατσούκλιΣειράΠαρατσούκλι
worker_codeΣειράΑΡΙΘΜΟΣ δουλειας

Βήματα υλοποίησης

Θα εφαρμόσουμε το αριστερό ερώτημα σύνδεσης μέσω των παρακάτω βημάτων:

  1. Ορισμός κλάσης αποτελεσμάτων ερωτήματος
  2. Γράφοντας έναν πάροχο SQL
  3. Καθορίστε τη μέθοδο ερωτήματος στη διεπαφή Mapper

1. Ορίστε την κλάση αποτελεσμάτων ερωτήματος

Αρχικά, πρέπει να ορίσουμε μια κλάση αποτελεσμάτων ερωτήματος για την αποθήκευση των αποτελεσμάτων ερωτημάτων.Εδώ ορίζουμε αDeptLeaderDORespVO Κλάση, που κληρονομήθηκε από την βασική κλάσηDeptLeaderDOBaseVOκαι περιέχει τα πεδία του ψευδώνυμου και του αριθμού εργασίας του χρήστη.

  1. @Data
  2. @EqualsAndHashCode(callSuper = true)
  3. @ToString(callSuper = true)
  4. public class DeptLeaderDORespVO extends DeptLeaderDOBaseVO {
  5. private Long id;
  6. @NotNull(message = "Department不能为空")
  7. private Long deptId;
  8. @NotNull(message = "User不能为空")
  9. private Long userId;
  10. @NotNull(message = "Is Primary不能为空")
  11. private Integer isPrimary;
  12. private String nickname;
  13. private String workerCode;
  14. }

2. Γράψτε έναν πάροχο SQL

Στη συνέχεια, γράφουμε μια κλάση παρόχου SQL για τη δυναμική δημιουργία ερωτημάτων SQL.χρησιμοποιείται εδώSelectProvider Σχολιασμοί για τον καθορισμό προσαρμοσμένης SQL.

  1. public class DeptLeaderSqlProvider {
  2. public String selectDeptLeaderWithUserDetails(Map<String, Object> params) {
  3. Long deptId = (Long) params.get("deptId");
  4. Long userId = (Long) params.get("userId");
  5. Integer isPrimary = (Integer) params.get("isPrimary");
  6. StringBuilder sql = new StringBuilder();
  7. sql.append("SELECT dl.*, su.nickname, su.worker_code AS workerCode ");
  8. sql.append("FROM system_dept_leader dl ");
  9. sql.append("LEFT JOIN system_user su ON dl.user_id = su.id ");
  10. sql.append("WHERE 1=1 ");
  11. if (deptId != null) {
  12. sql.append("AND dl.dept_id = #{deptId} ");
  13. }
  14. if (userId != null) {
  15. sql.append("AND dl.user_id = #{userId} ");
  16. }
  17. if (isPrimary != null) {
  18. sql.append("AND dl.is_primary = #{isPrimary} ");
  19. }
  20. sql.append("ORDER BY dl.id DESC");
  21. return sql.toString();
  22. }
  23. }

3. Καθορίστε τη μέθοδο ερωτήματος στη διεπαφή Mapper

Τέλος, ορίστε τη μέθοδο ερωτήματος στη διεπαφή Mapper και χρησιμοποιήστε SelectProvider Ο σχολιασμός καθορίζει τον πάροχο SQL.

  1. @Mapper
  2. public interface DeptLeaderMapper extends BaseMapperX<DeptLeaderDO> {
  3. @SelectProvider(type = DeptLeaderSqlProvider.class, method = "selectDeptLeaderWithUserDetails")
  4. List<DeptLeaderDORespVO> selectDeptLeaderWithUserDetails(@Param("deptId") Long deptId,
  5. @Param("userId") Long userId,
  6. @Param("isPrimary") Integer isPrimary);
  7. }

4. Καλέστε τη μέθοδο επιπέδου υπηρεσιών

Η μέθοδος ερωτήματος καλείται στο επίπεδο εξυπηρέτησης και τα αποτελέσματα επιστρέφονται στο μπροστινό μέρος ή υποβάλλονται σε περαιτέρω επεξεργασία.

  1. @Service
  2. public class DeptLeaderService {
  3. @Autowired
  4. private DeptLeaderMapper deptLeaderMapper;
  5. public List<DeptLeaderDORespVO> getDeptLeaders(Long deptId, Long userId, Integer isPrimary) {
  6. return deptLeaderMapper.selectDeptLeaderWithUserDetails(deptId, userId, isPrimary);
  7. }
  8. }

Συνοψίζω

Μέσα από τα παραπάνω βήματα, έχουμε εφαρμόσει τη μέθοδο χρήσης του αριστερού συνδέσμου για την αναζήτηση λεπτομερών πληροφοριών των υπευθύνων τμημάτων στο MyBatis Plus. Αυτή η μέθοδος μπορεί να δημιουργήσει δυναμικά ερωτήματα SQL με βάση τις εισερχόμενες συνθήκες για τη λήψη πληροφοριών σχετικά με τους επικεφαλής των τμημάτων και τους συνδεδεμένους χρήστες τους. Αυτή η μέθοδος είναι πολύ χρήσιμη όταν το ερώτημα δεδομένων πρέπει να εκτελεστεί σε πολλούς πίνακες, διασφαλίζοντας την ευελιξία και την αποτελεσματικότητα του ερωτήματος δεδομένων.

Ελπίζω αυτό το άρθρο να σας βοηθήσει να κατανοήσετε καλύτερα και να χρησιμοποιήσετε το MyBatis Plus για πολύπλοκα ερωτήματα. Εάν έχετε οποιεσδήποτε ερωτήσεις ή περαιτέρω ανάγκες, είστε ευπρόσδεκτοι να συζητήσετε και να επικοινωνήσετε.