2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Lorsque nous utilisons MyBatis Plus pour les opérations de base de données, nous devons parfois obtenir des données de plusieurs tables. Cet article explique comment implémenter une requête de jointure gauche dans MyBatis Plus. Nous prendrons comme exemple deux tables, l'une est la table du chef de service (system_dept_leader
), et l'autre est la table utilisateur (system_user
), et montre comment obtenir les informations détaillées du chef de service via une jointure gauche, y compris le surnom et le numéro de travail de l'utilisateur.
Supposons que nous ayons les deux tableaux de données suivants :
system_dept_leader
)Nom de domaine | taper | décrire |
---|---|---|
identifiantentifiant | Long | clé primaire |
département_id | Long | Numéro de service |
ID de l'utilisateur | Long | ID de l'utilisateur |
est_primaire | Entier | Est-ce important |
system_user
)Nom de domaine | taper | décrire |
---|---|---|
identifiantentifiant | Long | clé primaire |
surnom | Chaîne | Surnom |
code_travailleur | Chaîne | Numéro de travail |
Nous allons implémenter la requête de jointure gauche en suivant les étapes suivantes :
Tout d’abord, nous devons définir une classe de résultats de requête pour stocker les résultats de la requête.Nous définissons ici unDeptLeaderDORespVO
Classe, héritée de la classe de baseDeptLeaderDOBaseVO
, et contient les champs de surnom et de numéro de travail de l'utilisateur.
- @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;
- }
Ensuite, nous écrivons une classe de fournisseur SQL pour générer dynamiquement des requêtes SQL.utilisé iciSelectProvider
Annotations pour spécifier du SQL personnalisé.
- 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();
- }
- }
Enfin, définissez la méthode de requête dans l'interface Mapper et utilisez SelectProvider
L'annotation spécifie le fournisseur 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);
- }
La méthode de requête est appelée dans la couche de service et les résultats sont renvoyés au front-end ou traités ultérieurement.
- @Service
- public class DeptLeaderService {
-
- @Autowired
- private DeptLeaderMapper deptLeaderMapper;
-
- public List<DeptLeaderDORespVO> getDeptLeaders(Long deptId, Long userId, Integer isPrimary) {
- return deptLeaderMapper.selectDeptLeaderWithUserDetails(deptId, userId, isPrimary);
- }
- }
Grâce aux étapes ci-dessus, nous avons mis en œuvre la méthode d'utilisation de la jointure gauche pour interroger les informations détaillées des chefs de service dans MyBatis Plus. Cette méthode peut générer dynamiquement des requêtes SQL basées sur les conditions entrantes pour obtenir des informations sur les chefs de service et leurs utilisateurs associés. Cette méthode est très utile lorsque la requête de données doit être effectuée sur plusieurs tables, garantissant la flexibilité et l'efficacité de la requête de données.
J'espère que cet article pourra vous aider à mieux comprendre et utiliser MyBatis Plus pour des requêtes complexes. Si vous avez des questions ou d'autres besoins, vous êtes invités à discuter et à communiquer.