Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

नेस्टेड क्लासेस - CustomRowMapper !! अब कोई समस्या नहीं !! - भाग 2

स्प्रिंग बूट क्या है:
स्प्रिंग बूट एक खुला स्रोत, माइक्रोसर्विस-आधारित जावा वेब ढांचा है।

रोमैपर:
RowMapper इंटरफ़ेस का उपयोग JdbcTemplate द्वारा प्रति-पंक्ति के आधार पर ResultSet की पंक्तियों को मैप करने के लिए किया जाता है।

परिचय
यहां हम कस्टम रो मैपर का उपयोग करने जा रहे हैं जब हम वस्तुओं की सूची रिटर्न प्रकार के रूप में चाहते हैं।

नेस्टेड कक्षाओं के लिए RowMapper में समस्या:
हम सीधे क्लास मॉडल को डीबी से लौटाए गए पैरामीटर असाइन नहीं कर सकते हैं क्योंकि हम कक्षाओं के घोंसले के कारण व्यक्तिगत आदिम डेटा प्रकार चर को सटीक रूप से सटीक करने में सक्षम नहीं हैं।

इस उदाहरण में प्रयुक्त वर्ग आरेख:

साधारण क्लास :नेस्टेड क्लास नहीं

SportsMasterDTO.java

package workspace;

public class SportsMasterDTO {
  private int id;
  private String sportsCode;

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public String getSportsCode() {
    return sportsCode;
  }

  public void setSportsCode(String sportsCode) {
    this.sportsCode = sportsCode;
  }
}

SportsMetaDTO क्लास:

package workspace;

public class SportsMetaDTO {
  private int id;
  private int sportsName;
  private int sportsMasterId;
  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public int getSportsName() {
    return sportsName;
  }
  public void setSportsName(int sportsName) {
    this.sportsName = sportsName;
  }
  public int getSportsMasterId() {
    return sportsMasterId;
  }
  public void setSportsMasterId(int sportsMasterId) {
    this.sportsMasterId = sportsMasterId;
  }
  @Override
  public String toString() {
    return "SportsMetaDTO [id=" + id + ", sportsName=" + sportsName + ", sportsMasterId="
        + sportsMasterId + "]";
  }
}

दहलीजDTO वर्ग

package workspace;

public class ThresholdDTO {
  private int id;
  private int sportsMetaDataId;
  private String value;

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public int getSportsMetaDataId() {
    return sportsMetaDataId;
  }

  public void setSportsMetaDataId(int sportsMetaDataId) {
    this.sportsMetaDataId = sportsMetaDataId;
  }

  public String getValue() {
    return value;
  }

  public void setValue(String value) {
    this.value = value;
  }

  @Override
  public String toString() {
    return "ThresholdDTO [id=" + id + ", sportsMetaDataId=" + sportsMetaDataId + ", value=" + value
        + "]";
  }


}

नेस्टेड क्लास:

नेस्टेड क्लास:SportsThresholdCommonDTO

package workspace;

public class SportsThresholdCommonDTO {
  private SportsMasterDTO sportsMasterDTO;
  private SportsMetaDTO sportsMetaDTO;
  private ThresholdDTO thresholdDTO;
  public SportsMasterDTO getSportsMasterDTO() {
    return sportsMasterDTO;
  }
  public void setSportsMasterDTO(SportsMasterDTO sportsMasterDTO) {
    this.sportsMasterDTO = sportsMasterDTO;
  }
  public SportsMetaDTO getSportsMetaDTO() {
    return sportsMetaDTO;
  }
  public void setSportsMetaDTO(SportsMetaDTO sportsMetaDTO) {
    this.sportsMetaDTO = sportsMetaDTO;
  }
  public ThresholdDTO getThresholdDTO() {
    return thresholdDTO;
  }
  public void setThresholdDTO(ThresholdDTO thresholdDTO) {
    this.thresholdDTO = thresholdDTO;
  }
  @Override
  public String toString() {
    return "SportsThresholdCommonDTO [sportsMasterDTO=" + sportsMasterDTO + ", sportsMetaDTO="
        + sportsMetaDTO + ", thresholdDTO=" + thresholdDTO + "]";
  }
}

MYSQL क्वेरी जिसमें बिना किसी सीमा के 3 टेबल पर शामिल होते हैं

select 
  sm.id as sportsMasterId, 
  sm.sportsCode, 
  smd.id as sportsMetaId, 
  smd.sportsName, 
  smd.sportsMasterId, 
  t.id as thresholdId, 
  t.sportsMetaDataId, 
  t.value 
from 
  sportsMaster 
  inner join sportsMetaData smd on sm.id = smd.sportsMasterId 
  inner join threshold t on t.sporsMetaDataId = smd.id

पंक्ति मैपर का उपयोग कैसे करें यदि mysql नेस्टेड वर्ग के लिए वस्तुओं की सूची लौटाता है:
जावा विधि

public List<AlertingMasterThresholdCommonDTO> getSportsThresholdCommonList() {
    String sql =
        "select sm.id as sportsMasterId, sm.sportsCode, smd.id as sportsMetaId, smd.sportsName, smd.sportsMasterId, t.id as thresholdId, t.sportsMetaDataId, t.value from sportsMaster inner join sportsMetaData smd on sm.id = smd.sportsMasterId inner join threshold t on t.sporsMetaDataId = smd.id";
    return sportsThresholdCommonMapperList
        .mapper(jdbcTemplate.queryForList(sql));
  }

इंतजार यहीं खत्म होता है !!!

मैपर क्लास

package workspace;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class SportsThresholdCommonMapperList {
  public List<SportsThresholdCommonDTO> mapper(List<Map<String, Object>> rows) {
    List<SportsThresholdCommonDTO> sportsThresholdCommonDTOs = new ArrayList<>();
    for (Map rs : rows) {
      SportsThresholdCommonDTO sportsThresholdCommonDTO = new SportsThresholdCommonDTO();
      SportsMasterDTO sportsMasterDTO = new SportsMasterDTO();
      SportsMetaDTO sportsMetaDTO = new SportsMetaDTO();
      ThresholdDTO thresholdDTO = new ThresholdDTO();
      sportsMasterDTO.setId((Integer) rs.get("sportsMasterId"));
      sportsMasterDTO.setSportsCode((String) rs.get("sportsCode"));
      sportsMetaDTO.setId((Integer) rs.get("sportsMetaId"));
      sportsMetaDTO.setSportsName((String) rs.get("sportsName"));
      sportsMetaDTO.setSportsMasterId((Integer) rs.get("sportsMasterId"));
      thresholdDTO.setId((Integer) rs.get("thresholdId"));
      thresholdDTO.setSportsMetaDataId((Integer) rs.get("sportsMetaId"));
      thresholdDTO.setValue((String) rs.get("value"));
      sportsThresholdCommonDTO.setSportsMasterDTO(sportsMasterDTO);
      sportsThresholdCommonDTO.setSportsMetaDTO(sportsMetaDTO);
      sportsThresholdCommonDTO.setThresholdDTO(thresholdDTO);
      sportsThresholdCommonDTOs.add(sportsThresholdCommonDTO);
    }
    return sportsThresholdCommonDTOs;
  }
}

वैकल्पिक तरीका:

  1. एक नया मॉडल बनाएं जिसमें सभी वर्गों के चर शामिल हों
  2. टी मॉडल को ठीक से मैप करने के लिए उपनाम बनाएं
  3. परिणाम सभी डेटा के साथ एक गैर-नेस्टेड वर्ग होगा।

दूसरा मॉडल बनाने का दोष

  1. रखरखाव ओवरहेड्स
  2. उपनाम बनाना और सभी मॉडलों में अलग-अलग नाम रखना

निष्कर्ष
हम कस्टम रो मैपर की मदद से mysql से नेस्टेड क्लास ऑब्जेक्ट लिस्ट प्राप्त करने में सक्षम हैं।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. GROUP_BYs के दो बाएं जॉइन में से GROUP_CONCAT से अजीब डुप्लिकेट व्यवहार

  2. मैं एक MySQL टेबल पर कस्टम चेक बाधा कैसे जोड़ूं?

  3. उबंटू में MySQL के लिए एसएसएल/टीएलएस कैसे सक्षम करें

  4. MySQL में JSON डेटा कैसे खोजें?

  5. MySQL REGEXP उदाहरण