प्रौद्योगिकी साझेदारी

Mybatis left join कथं कार्यान्वितम्

2024-07-12

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

दत्तांशकोशसञ्चालनार्थं MyBatis Plus इत्यस्य उपयोगं कुर्वन् कदाचित् अस्माभिः बहुभ्यः सारणीभ्यः आँकडानां प्राप्तिः आवश्यकी भवति । अस्मिन् लेखे MyBatis Plus इत्यस्मिन् left join query इत्यस्य कार्यान्वयनस्य परिचयः भविष्यति । उदाहरणरूपेण द्वौ सारणी गृह्णामः, एकः विभागप्रमुखसारणी (system_dept_leader), अपरः च उपयोक्तृसारणी (system_user), तथा च विभागनेतुः विस्तृतसूचनाः वामसंयोगद्वारा कथं प्राप्तुं शक्यते इति प्रदर्शयति, यत्र उपयोक्तुः उपनाम कार्यसङ्ख्या च सन्ति ।

दत्तांशसारणी संरचना

मानातु यत् अस्माकं कृते निम्नलिखितद्वयं दत्तांशसारणी अस्ति ।

विभाग नेतृत्व तालिका ( .system_dept_leader)

क्षेत्रनामप्रकारःवर्णेतु
idदीर्घम्‌प्राथमिक कुञ्जी
dept_idदीर्घम्‌विभाग आईडी
उपयोक्तृ_परिचयःदीर्घम्‌उपयोक्तृपरिचयः
इति_प्राथमिकम्पूर्णाङ्कःकिं महत्त्वपूर्णम् अस्ति

 

उपयोक्तृसारणी ( .system_user)

क्षेत्रनामप्रकारःवर्णेतु
idदीर्घम्‌प्राथमिक कुञ्जी
उपनामसूत्रनिक नाम
श्रमिक_संहितासूत्रनौकरी संख्या

कार्यान्वयनपदार्थाः

वयं निम्नलिखितपदार्थानाम् माध्यमेन left join query कार्यान्विष्यामः ।

  1. प्रश्नपरिणामवर्गं परिभाषयन्तु
  2. SQL प्रदाता लेखनम्
  3. Mapper interface मध्ये query method परिभाषयन्तु

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 interface मध्ये query method परिभाषयन्तु

अन्ते Mapper interface मध्ये query method परिभाष्य उपयोगं कुर्वन्तु 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 इत्यस्मिन् विभागनेतृणां विस्तृतसूचनाः पृच्छितुं left join इत्यस्य उपयोगस्य पद्धतिं कार्यान्वितवन्तः। एषा पद्धतिः विभागनेतृणां तेषां सम्बद्धानां च उपयोक्तृणां विषये सूचनां प्राप्तुं आगच्छन्तीनां परिस्थितीनां आधारेण गतिशीलरूपेण SQL प्रश्नान् जनयितुं शक्नोति । यदा बहुसारणीषु दत्तांशप्रश्नस्य आवश्यकता भवति तदा एषा पद्धतिः अतीव उपयोगी भवति, येन दत्तांशप्रश्नस्य लचीलतां कार्यक्षमतां च सुनिश्चितं भवति ।

आशासे यत् एषः लेखः भवन्तं जटिलप्रश्नानां कृते MyBatis Plus इत्यस्य अधिकतया अवगन्तुं उपयोगं च कर्तुं साहाय्यं कर्तुं शक्नोति। यदि भवतः किमपि प्रश्नं वा अधिकानि आवश्यकतानि वा सन्ति तर्हि चर्चां कर्तुं संवादं च कर्तुं भवतः स्वागतम्।