入れ子クラス- Customrowmapper!もう問題じゃない!第2部
21205 ワード
スプリングブートとは
Spring BootはオープンソースのMicroServiceベースのJava Webフレームワークです.
rowmapper :
Rowmapperインターフェイスは、JDbcTemplateによって行単位で結果セットの行をマッピングするために使用されます.
導入
ここでは、オブジェクトのリストを戻り型としたい場合に、カスタム行マッパーを使用します.
入れ子クラスに対するRowmapperの問題点:
クラスの入れ子によって個々のプリミティブデータ型変数を正確に正確に知ることができないので、DBから返されるパラメーターを直接クラスに割り当てることはできません.
SportsMasterto.ジャバ
ネストしたクラス
ジャバメソッド
マッパークラス
はすべてのクラス の変数を含む新しいモデルを作ります Tモデルを適切にマップするエイリアスを の結果は、すべてのデータを持つ未入れ子クラスです. 別のモデルを作ることの欠点保全性オーバーヘッド エイリアスを作り、すべてのモデル で異なる名前を保持する
結論
我々は、カスタム行マッパーの助けを借りてMySQLからネストされたクラスのオブジェクトのリストを取得することができます.
Spring BootはオープンソースのMicroServiceベースのJava Webフレームワークです.
rowmapper :
Rowmapperインターフェイスは、JDbcTemplateによって行単位で結果セットの行をマッピングするために使用されます.
導入
ここでは、オブジェクトのリストを戻り型としたい場合に、カスタム行マッパーを使用します.
入れ子クラスに対するRowmapperの問題点:
クラスの入れ子によって個々のプリミティブデータ型変数を正確に正確に知ることができないので、DBから返されるパラメーターを直接クラスに割り当てることはできません.
この例で使用するクラス図
単純なクラス
SportsMasterto.ジャバ
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 + "]";
}
}
しきい値クラス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
+ "]";
}
}
入れ子クラス:
ネストしたクラス
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;
}
}
交互の方法
結論
我々は、カスタム行マッパーの助けを借りてMySQLからネストされたクラスのオブジェクトのリストを取得することができます.
Reference
この問題について(入れ子クラス- Customrowmapper!もう問題じゃない!第2部), 我々は、より多くの情報をここで見つけました https://dev.to/sainiankitsaini/nested-classes-customrowmapper-not-a-problem-anymore-part-2-3i9mテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol