Condivisione della tecnologia

Come implementare Mybatis left join

2024-07-12

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

Quando utilizziamo MyBatis Plus per operazioni di database, a volte è necessario ottenere dati da più tabelle. Questo articolo introdurrà come implementare la query di join sinistro in MyBatis Plus. Prenderemo come esempio due tabelle, una è la tabella del capo dipartimento (system_dept_leader) e l'altra è la tabella utente (system_user) e mostra come ottenere informazioni dettagliate sul responsabile del dipartimento tramite un left join, inclusi il nickname e il numero di lavoro dell'utente.

Struttura della tabella dati

Supponiamo di avere le seguenti due tabelle dati:

Tabella della leadership del dipartimento (system_dept_leader)

Nome del campotipodescrivere
idLungochiave primaria
dipartimento_idLungoIdentificativo del dipartimento
ID utenteLungoID utente
è_primarioNumero interoÈ importante

 

tabella utente (system_user)

Nome del campotipodescrivere
idLungochiave primaria
soprannomeCordaSoprannome
codice_lavoratoreCordaNumero di lavoro

Fasi di implementazione

Implementeremo la query di left join attraverso i seguenti passaggi:

  1. Definire la classe dei risultati della query
  2. Scrivere un provider SQL
  3. Definire il metodo di query nell'interfaccia del Mapper

1. Definire la classe dei risultati della query

Innanzitutto, dobbiamo definire una classe di risultati della query per archiviare i risultati della query.Qui definiamo aDeptLeaderDORespVO Classe, ereditata dalla classe baseDeptLeaderDOBaseVOe contiene i campi del soprannome e del numero di lavoro dell'utente.

  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. Scrivere un provider SQL

Successivamente, scriviamo una classe provider SQL per generare dinamicamente query SQL.usato quiSelectProvider Annotazioni per specificare SQL personalizzato.

  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. Definire il metodo di query nell'interfaccia del Mapper

Infine, definisci il metodo di query nell'interfaccia di Mapper e utilizza SelectProvider L'annotazione specifica il provider 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. Chiamare il metodo del livello di servizio

Il metodo di query viene chiamato nel livello di servizio e i risultati vengono restituiti al front-end o ulteriormente elaborati.

  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. }

Riassumere

Attraverso i passaggi precedenti, abbiamo implementato il metodo di utilizzo del left join per interrogare le informazioni dettagliate dei leader dipartimento in MyBatis Plus. Questo metodo può generare dinamicamente query SQL in base alle condizioni in entrata per ottenere informazioni sui leader di dipartimento e sugli utenti associati. Questo metodo è molto utile quando è necessario eseguire query sui dati su più tabelle, garantendo la flessibilità e l'efficienza della query sui dati.

Spero che questo articolo possa aiutarti a comprendere e utilizzare meglio MyBatis Plus per query complesse. Se avete domande o ulteriori esigenze, siete invitati a discutere e comunicare.