le mie informazioni di contatto
Posta[email protected]
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.
Supponiamo di avere le seguenti due tabelle dati:
system_dept_leader
)Nome del campo | tipo | descrivere |
---|---|---|
id | Lungo | chiave primaria |
dipartimento_id | Lungo | Identificativo del dipartimento |
ID utente | Lungo | ID utente |
è_primario | Numero intero | È importante |
system_user
)Nome del campo | tipo | descrivere |
---|---|---|
id | Lungo | chiave primaria |
soprannome | Corda | Soprannome |
codice_lavoratore | Corda | Numero di lavoro |
Implementeremo la query di left join attraverso i seguenti passaggi:
Innanzitutto, dobbiamo definire una classe di risultati della query per archiviare i risultati della query.Qui definiamo aDeptLeaderDORespVO
Classe, ereditata dalla classe baseDeptLeaderDOBaseVO
e contiene i campi del soprannome e del numero di lavoro dell'utente.
- @Data
- @EqualsAndHashCode(callSuper = true)
- @ToString(callSuper = true)
- public class DeptLeaderDORespVO extends DeptLeaderDOBaseVO {
-
- private Long id;
-
- @NotNull(message = "Department不能为空")
- private Long deptId;
-
- @NotNull(message = "User不能为空")
- private Long userId;
-
- @NotNull(message = "Is Primary不能为空")
- private Integer isPrimary;
-
- private String nickname;
- private String workerCode;
- }
Successivamente, scriviamo una classe provider SQL per generare dinamicamente query SQL.usato quiSelectProvider
Annotazioni per specificare SQL personalizzato.
- public class DeptLeaderSqlProvider {
-
- public String selectDeptLeaderWithUserDetails(Map<String, Object> params) {
- Long deptId = (Long) params.get("deptId");
- Long userId = (Long) params.get("userId");
- Integer isPrimary = (Integer) params.get("isPrimary");
-
- StringBuilder sql = new StringBuilder();
- sql.append("SELECT dl.*, su.nickname, su.worker_code AS workerCode ");
- sql.append("FROM system_dept_leader dl ");
- sql.append("LEFT JOIN system_user su ON dl.user_id = su.id ");
- sql.append("WHERE 1=1 ");
- if (deptId != null) {
- sql.append("AND dl.dept_id = #{deptId} ");
- }
- if (userId != null) {
- sql.append("AND dl.user_id = #{userId} ");
- }
- if (isPrimary != null) {
- sql.append("AND dl.is_primary = #{isPrimary} ");
- }
- sql.append("ORDER BY dl.id DESC");
- return sql.toString();
- }
- }
Infine, definisci il metodo di query nell'interfaccia di Mapper e utilizza SelectProvider
L'annotazione specifica il provider SQL.
- @Mapper
- public interface DeptLeaderMapper extends BaseMapperX<DeptLeaderDO> {
-
- @SelectProvider(type = DeptLeaderSqlProvider.class, method = "selectDeptLeaderWithUserDetails")
- List<DeptLeaderDORespVO> selectDeptLeaderWithUserDetails(@Param("deptId") Long deptId,
- @Param("userId") Long userId,
- @Param("isPrimary") Integer isPrimary);
- }
Il metodo di query viene chiamato nel livello di servizio e i risultati vengono restituiti al front-end o ulteriormente elaborati.
- @Service
- public class DeptLeaderService {
-
- @Autowired
- private DeptLeaderMapper deptLeaderMapper;
-
- public List<DeptLeaderDORespVO> getDeptLeaders(Long deptId, Long userId, Integer isPrimary) {
- return deptLeaderMapper.selectDeptLeaderWithUserDetails(deptId, userId, isPrimary);
- }
- }
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.