保管場所には複数の品目が含まれています。保管場所の在庫情報、つまり、各保管場所に含まれる品目番号、品目名、および数量を照会する必要があります。この状況には3つの方法があります。
- javaforループの実装
- ストアドプロシージャの実装
- SQLの複雑なクエリ
最初の方法は非効率的であり、2番目の方法は保管プロセスに精通していない子供靴の学習コストを必要とします。これが最も一般的に使用される3番目の方法です。
返される必要のあるデータ構造:
@Data
public class BinInfo {
private int id;//库位id
private String binName;//库位名
private int maxStock;//库位最大容量
private int status;//库位状态
private int groupName;//库位组
private int priority;//库位优先级
private List<StockSumDto> goodsInfoList;
}
その中でStockSumDtoは、品目番号、品目名、数量を定義します。
@Data
@ApiModel(description = "库存汇总Dto")
public class StockSumDto {
@ApiModelProperty(value = "物料号")
private String partNo;
@ApiModelProperty(value = "物料名称")
private String goodsName;
@ApiModelProperty(value = "物料数量")
private int goodsCounts;
}
マッパーレイヤーのクエリには2つのステップが必要です
最初の一歩
@Select("select id as id,b_name as binName,group_name as groupName,priority as priority,is_empty as status," +
"max_stock as maxStock from dbo.bin order by id asc")
@Results(value = {
@Result(property="id", column="id"),
@Result(property="binName", column="binName"),
@Result(property="groupName", column="groupName"),
@Result(property="priority", column="priority"),
@Result(property="status", column="status"),
@Result(property="maxStock", column="maxStock"),
@Result(property="goodsInfoList", javaType=List.class,column = "id",
many=@Many(select="findGoodsInfoList"))
})
List<BinInfo> getBinInfoByRName();
ピット:@Resultのプロパティはdtoのプロパティであり、列はデータテーブルのテーブルです。クエリステートメントでエイリアスを使用する場合は、ここでエイリアスを使用する必要があります。そうしないと、StockSumDtoの値が発生します。結果は見つかりますが、binの値情報は失われます。
第二段階
@Select("SELECT s.part_no as partNo,sum(s.stock) as goodsCounts,g.name as goodsName from storage s " +
"join goods g on g.part_no = s.part_no where s.b_id = #{id} group by s.part_no ,g.name ")
List<StockSumDto> findGoodsInfoList(Integer id);
注:最初のステップの@Manyは、2番目のステップのクエリに関連付けられており、関連付けられているフィールドはidです。