Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Các lớp lồng nhau - CustomRowMapper !! Nó không còn là một vấn đề nữa !! - Phần 1

Spring Boot là gì:
Spring Boot là một khuôn khổ web Java dựa trên microservice mã nguồn mở.

RowMapper:
Giao diện RowMapper được sử dụng bởi JdbcTemplate để ánh xạ các hàng của Tập kết quả trên cơ sở mỗi hàng.

Giới thiệu
Ở đây, chúng ta sẽ sử dụng trình ánh xạ hàng tùy chỉnh khi chúng ta chỉ muốn một đối tượng duy nhất làm kiểu trả về

Sự cố trong RowMapper cho các Lớp lồng nhau:
Chúng tôi không thể chỉ định trực tiếp các tham số trả về từ DB cho mô hình lớp vì chúng tôi không bao giờ có thể xác định chính xác từng biến kiểu dữ liệu nguyên thủy riêng lẻ do lồng ghép các lớp.

Sơ đồ lớp được sử dụng trong ví dụ này:

Lớp đơn giản:Không phải lớp lồng nhau

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

Lớp 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 + "]";
  }
}

Lớp ThresholdDTO

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


}

Lớp lồng nhau:

Lớp lồng nhau: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 + "]";
  }
}

Cách sử dụng rowmapper nếu mysql trả về một đối tượng duy nhất cho lớp lồng nhau:

Truy vấn MYSQL chứa các kết hợp trên 3 bảng có giới hạn 1

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 limit 1

Cách truy cập DataBase:

Phương pháp Java

public SportsThresholdCommonDTO getSportsThresholdCommonObject() {
    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 limit 1";
return jdbcTemplate.queryForObject(sql, SportsThresholdCommonDTO.class);
  }

Sự chờ đợi kết thúc ở đây !!!

Lớp người vẽ bản đồ

package workspace;

import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.tree.RowMapper;

public class SportsThresholdCommonMapper implements RowMapper<SportsThresholdCommonDTO> {

  @Override
  public SportsThresholdCommonDTO mapRow(ResultSet rs, int rowNum) throws SQLException {
    SportsThresholdCommonDTO sportsThresholdCommonDTO = new SportsThresholdCommonDTO();
    SportsMasterDTO sportsMasterDTO = new SportsMasterDTO();
    SportsMetaDTO sportsMetaDTO = new SportsMetaDTO();
    ThresholdDTO thresholdDTO = new ThresholdDTO();
    sportsMasterDTO.setId(rs.getInt("sportsMasterId"));
    sportsMasterDTO.setSportsCode(rs.getString("sportsCode"));
    sportsMetaDTO.setId(rs.getInt("sportsMetaId"));
    sportsMetaDTO.setSportsName(rs.getString("sportsName"));
    sportsMetaDTO.setSportsMasterId(rs.getInt("sportsMasterId"));
    thresholdDTO.setId(rs.getInt("thresholdId"));
    thresholdDTO.setSportsMetaDataId(rs.getInt("sportsMetaId"));
    thresholdDTO.setValue(rs.getString("value"));
    sportsThresholdCommonDTO.setSportsMasterDTO(sportsMasterDTO);
    sportsThresholdCommonDTO.setSportsMetaDTO(sportsMetaDTO);
    sportsThresholdCommonDTO.setThresholdDTO(thresholdDTO);
    return sportsThresholdCommonDTO;
  }
}

Cách thay thế:

  1. Tạo một mô hình mới có chứa biến của tất cả các lớp
  2. Tạo Bí danh để lập bản đồ t mô hình phù hợp
  3. Kết quả sẽ là một lớp chưa được phân loại với tất cả dữ liệu.

Hạn chế của việc tạo một mô hình khác

  1. Chi phí chung về khả năng bảo trì
  2. Tạo bí danh và giữ các tên khác nhau trong tất cả các kiểu máy

Kết luận
Chúng tôi có thể lấy đối tượng lớp lồng nhau từ mysql với sự trợ giúp của trình ánh xạ hàng tùy chỉnh.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để CẬP NHẬT một hàng trong bảng hoặc CHÈN hàng nếu nó không tồn tại?

  2. CƠ SỞ DỮ LIỆU DROP của MySQL

  3. MySQL - Làm cách nào để bỏ chia cột thành hàng?

  4. Làm cách nào để sử dụng toán tử gán MySQL (:=) trong truy vấn gốc ở chế độ ngủ đông?

  5. Cách thay đổi múi giờ máy chủ MySQL