2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Wenn wir MyBatis Plus für Datenbankoperationen verwenden, müssen wir manchmal Daten aus mehreren Tabellen abrufen. In diesem Artikel wird erläutert, wie Sie eine Left-Join-Abfrage in MyBatis Plus implementieren. Wir nehmen als Beispiel zwei Tabellen, eine davon ist die Abteilungsleitertabelle (system_dept_leader
), und das andere ist die Benutzertabelle (system_user
) und demonstriert, wie man die detaillierten Informationen des Abteilungsleiters über einen Left Join erhält, einschließlich des Spitznamens und der Arbeitsnummer des Benutzers.
Angenommen, wir haben die folgenden zwei Datentabellen:
system_dept_leader
)Feldname | Typ | beschreiben |
---|---|---|
Ausweis | Lang | Primärschlüssel |
Abteilungs-ID | Lang | Abteilungs-ID |
Benutzer-ID | Lang | Benutzer-ID |
ist_primär | Ganze Zahl | Ist es wichtig |
system_user
)Feldname | Typ | beschreiben |
---|---|---|
Ausweis | Lang | Primärschlüssel |
Spitzname | Zeichenfolge | Spitzname |
Arbeitercode | Zeichenfolge | Auftragsnummer |
Wir werden die Left-Join-Abfrage durch die folgenden Schritte implementieren:
Zuerst müssen wir eine Abfrageergebnisklasse definieren, um Abfrageergebnisse zu speichern.Hier definieren wir aDeptLeaderDORespVO
Klasse, geerbt von der BasisklasseDeptLeaderDOBaseVO
und enthält die Felder „Spitzname“ und „Arbeitsnummer“ des Benutzers.
- @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;
- }
Als nächstes schreiben wir eine SQL-Provider-Klasse zum dynamischen Generieren von SQL-Abfragen.hier verwendetSelectProvider
Anmerkungen zur Angabe von benutzerdefiniertem SQL.
- 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();
- }
- }
Definieren Sie abschließend die Abfragemethode in der Mapper-Schnittstelle und verwenden Sie sie SelectProvider
Die Annotation gibt den SQL-Anbieter an.
- @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);
- }
Die Abfragemethode wird im Service-Layer aufgerufen und die Ergebnisse an das Frontend zurückgegeben oder weiterverarbeitet.
- @Service
- public class DeptLeaderService {
-
- @Autowired
- private DeptLeaderMapper deptLeaderMapper;
-
- public List<DeptLeaderDORespVO> getDeptLeaders(Long deptId, Long userId, Integer isPrimary) {
- return deptLeaderMapper.selectDeptLeaderWithUserDetails(deptId, userId, isPrimary);
- }
- }
Durch die oben genannten Schritte haben wir die Methode implementiert, mithilfe von Left Join die detaillierten Informationen von Abteilungsleitern in MyBatis Plus abzufragen. Diese Methode kann dynamisch SQL-Abfragen basierend auf den eingehenden Bedingungen generieren, um Informationen über Abteilungsleiter und die zugehörigen Benutzer zu erhalten. Diese Methode ist sehr nützlich, wenn die Datenabfrage über mehrere Tabellen hinweg durchgeführt werden muss, um die Flexibilität und Effizienz der Datenabfrage sicherzustellen.
Ich hoffe, dieser Artikel kann Ihnen helfen, MyBatis Plus besser zu verstehen und für komplexe Abfragen zu verwenden. Wenn Sie Fragen oder weitere Bedürfnisse haben, können Sie diese gerne besprechen und kommunizieren.