Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kelas Bersarang - CustomRowMapper !! Bukan Masalah Lagi!! - Bagian 2

Apa itu Boot Musim Semi:
Spring Boot adalah kerangka kerja web Java berbasis layanan mikro sumber terbuka.

RowMapper:
Antarmuka RowMapper digunakan oleh JdbcTemplate untuk memetakan baris ResultSet pada basis per baris.

Pengantar
Di sini kita akan menggunakan custom row mapper ketika kita menginginkan daftar objek sebagai tipe kembalian.

Masalah di RowMapper untuk Kelas bersarang:
Kami tidak dapat secara langsung menetapkan parameter yang dikembalikan dari DB ke model kelas karena kami tidak pernah dapat menentukan variabel tipe data primitif individual karena bersarangnya kelas.

Diagram Kelas yang digunakan dalam Contoh ini:

Kelas Sederhana :Kelas Tidak Bertingkat

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;
  }
}

Kelas 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 + "]";
  }
}

Kelas ambang batas 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
        + "]";
  }


}

Kelas Bersarang:

Kelas Bersarang: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 + "]";
  }
}

Kueri MYSQL Yang berisi gabungan pada 3 tabel tanpa batas

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

Cara menggunakan row mapper jika mysql mengembalikan daftar objek untuk kelas bersarang:
Metode Java

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));
  }

Penantian Berakhir Disini !!!

Kelas Pemeta

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;
  }
}

Cara Alternatif:

  1. Buat model baru yang berisi variabel semua kelas
  2. Buat Alias ​​​​untuk memetakan model t dengan benar
  3. Hasilnya akan menjadi kelas tidak bersarang dengan semua data.

Kelemahan membuat model lain

  1. Overhead pemeliharaan
  2. Membuat alias dan menyimpan nama yang berbeda di semua model

Kesimpulan
Kami bisa mendapatkan daftar objek kelas bersarang dari mysql dengan bantuan custom row mapper.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mendapatkan jumlah baris di tabel MySQL menggunakan PHP?

  2. MySQL:Apa yang dimaksud dengan versi kebalikan dari LIKE?

  3. mySQL ::masukkan ke tabel, data dari tabel lain?

  4. Bagaimana cara mengetahui apakah MySQLnd adalah driver aktif?

  5. Menghitung Ukuran Pool Buffer InnoDB untuk Server MySQL Anda