List多对多的查询应用
/**
* @param param
* @author mercy 查询主副产品(主副产品是多对多的关系)
* @return
*/
public String queryProductSpecAttr(JSONObject param){
ResultInfo result = new ResultInfo(0,"success","");
Grid grid = new Grid();
String productSpecId=param.getString("productSpecId");
ProductSpec ps=productSpecDao.findByProductSpecId(productSpecId);
String prodCode=ps.getProdCode();//prodCode相同的话则可能存在主副产品
int prodType=ps.getProdType(); //主副产品标识(0:主产品,1:附属产品)
//查当前产品属性
List<ProductSpecAttr> productSpecAttrList=productSpecAttrDao.findByProductSpecId(productSpecId);
//产品属性List
List<ProductDto> listPsaList=new ArrayList<ProductDto>() ;
//主产品
if(prodType==0){
//主产品属性
ProductDto mainDto=new ProductDto();
mainDto.setMainList(productSpecAttrList);
mainDto.setProductName(ps.getName());
mainDto.setProductSpecId(ps.getProductSpecId());
//存主主产品属性,名称
listPsaList.add(mainDto);
//查出附属产品
List<ProductSpec> psSubList=productSpecDao.findByProdCodeAndProdType(prodCode,1);
if(psSubList.size()>0){
//查附属产品数据
for(ProductSpec psl:psSubList){
Integer productId = psl.getId();
if(ps.getId()!=productId){
ProductDto subDto=new ProductDto();
List<ProductSpecAttr> psaSubList=productSpecAttrDao.findByProductSpecId(psl.getProductSpecId());
subDto.setSubList(psaSubList);
subDto.setProductName(psl.getName());
subDto.setProductSpecId(psl.getProductSpecId());
//附属产品属性,名称
listPsaList.add(subDto);
}
}
}
//附属产品
}else if(prodType==1){
ProductDto subDto=new ProductDto();
List<ProductSpec> psMainList=productSpecDao.findByProdCodeAndProdType(prodCode,0);
//存附属产品名称
subDto.setProductName(ps.getName());
subDto.setProductSpecId(ps.getProductSpecId());
//存附属产品属性
subDto.setSubList(productSpecAttrList);
//存附属产品属性,名称
listPsaList.add(subDto);
if(psMainList.size()>0){
//查主产品数据
for(ProductSpec psl:psMainList){
Integer productId = psl.getId();
if(ps.getId()!=productId){
ProductDto mainDto=new ProductDto();
List<ProductSpecAttr> psaMainList=productSpecAttrDao.findByProductSpecId(psl.getProductSpecId());
mainDto.setProductName(psl.getName());
mainDto.setProductSpecId(psl.getProductSpecId());
mainDto.setMainList(psaMainList);
//主产品属性,名称
listPsaList.add(mainDto);
}
}
}
}
grid.setContent(listPsaList);
result.setResult_data(JSONObject.toJSONString(grid));
return JSONObject.toJSONString(result);
}
上面这段代码输出的是一个主产品包含多个附属产品,1个主产品有多个产品属性,一个附属产品有多个产品属性
ProductDto类:
package com.eshore.ismp.product.dto;
import java.util.List;
import com.eshore.ismp.product.model.ProductSpecAttr;
public class ProductDto {
private String productName;
private String productSpecId;
private List<ProductSpecAttr> subList;
private List<ProductSpecAttr> mainList;
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getProductSpecId() {
return productSpecId;
}
public void setProductSpecId(String productSpecId) {
this.productSpecId = productSpecId;
}
public List<ProductSpecAttr> getSubList() {
return subList;
}
public void setSubList(List<ProductSpecAttr> subList) {
this.subList = subList;
}
public List<ProductSpecAttr> getMainList() {
return mainList;
}
public void setMainList(List<ProductSpecAttr> mainList) {
this.mainList = mainList;
}
}
List多对多的查询应用的更多相关文章
- NHibernate教程(11)--多对多关联查询
本节内容 多对多关系引入 多对多映射关系 多对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 多对多关系引入 让我们再次回顾在第二篇中建立的数据模型 ...
- mybatis实战教程二:多对一关联查询(一对多)
多对一关联查询 一.数据库关系.article表和user表示多对一的关系 CREATE TABLE `article` ( `id` ) NOT NULL AUTO_INCREMENT, `user ...
- mybatis多表查询之多对多关系查询的实现-xml方式
Mybatis对于多对多关系下的查询提供了集合(collection)的概念来解决,collection属性是resultMap高级结果映射的子集,首先,在本例中我们使用的是集合元素来解决多对多的查询 ...
- Python--day64--找到作者关联的所有书籍对象、ORM多对多关联查询的原理
找到当前作者关联的所有书籍对象: ORM多对多关联查询的原理: 编辑作者:
- django ORM多对多正向查询时查询返回结果为None
表 class Books(models.Model): '''书籍''' id = models.AutoField(primary_key=True) name = models.CharFiel ...
- mybatis 14: 多对一关联查询
业务背景 根据订单id查询订单的信息,以及该订单所属的客户的基本信息(不包括该客户自己的订单信息) 两张数据表 客户表 订单表 实体类 客户实体类:Customer private Integer i ...
- hibernate中HQL多对多的查询
现有三张表 TLXPURCHASE.采购事项审批表,TLXPURCHASEACTIVITY.采购招标活动对应表,TLXACTIVITY.招标活动表,采购事项审批表和采购活动表是多对多关系.java中定 ...
- 【Hibernate】双向多对多Set查询
一个计划对于多个竞价,一个竞价对应多个计划. 1.实体 /** * @author Tidy * @Description 计划 */ public class EbgStockPlanContent ...
- python flask(多对多表查询)
我们在flask的学习中,会难免遇到多对多表的查询,今天我也遇到了这个问题.那么我想了好久.也没有想到一个解决的办法,试了几种方法,可能是思路的限制我放弃了,后来,我就在网上百度,可是发现百度出来的结 ...
随机推荐
- MPI+WIN10并行试运行
系统:2015 win10专业版 x64 MPI安装包:mpich2-1.4.1p1-win-x86-64.man 将后缀改为.msi 以管理员身份安装 安装过程一路默认,注意<behappy为 ...
- 完全背包变型题(hdu5410)
这是2015年最后一场多校的dp题,当时只怪自己基础太差,想了1个多小时才想出来,哎,9月份好好巩固基础,为区域赛做准备.题目传送门 题目的意思是给你n元钱,m类糖果,每类糖果分别有p, a, b, ...
- NodeJs爬虫—“眼睛好看是一种什么样的体验?”
逛知乎的时候经常看见有好多的福利贴(钓鱼贴),这不最近又让我发现了一个——眼睛好看是一种什么样的体验是一种怎么样的体验呢?我决定把答案里的照片都下到我的电脑里好好体验一下,怎么做呢,一张一张下好麻烦, ...
- 继续研究NDK
继续研究NDK 我在阿里云服务器上搭建了Android ndk的开发平台,并且借助这一平台研究了NDK的内部细节. NDK提供了Android本地编程的接口,让你可以开发高效的依赖库,提高程序的速度, ...
- js前端分页
转载:http://www.cnblogs.com/lyzg/p/5791011.html http://www.cnblogs.com/m-m-g-y0416/p/5601903.html
- Http协议中的Content-Length属性
Android开发的时候需要与从服务器上获取数据,数据是通过http协议封装的.Android端使用的是Xutils第三方插件来发起http请求,但是每次只能拿到部分数据.通过仔细分析后原来是Cont ...
- Webservice学习
参考博客1: http://www.cnblogs.com/lzhp/archive/2013/01/13/2858559.html 参考博客2:http://blog.csdn.net/shilei ...
- rhel7修改网卡命名规则
1步:当安装完红帽RHEL7系统安装完成,您的网卡命名是这样的. 第2步:请编辑网卡的配置文件 将”/etc/sysconfig/network-scripts/ifcfg-eno16777736“的 ...
- linux基础-附件1 linux系统启动流程
附件1 linux系统启动流程 最初始阶段当我们打开计算机电源,计算机会自动从主板的BIOS(Basic Input/Output System)读取其中所存储的程序.这一程序通常知道一些直接连接在主 ...
- Mybatis学习--Mapper.xml映射文件
简介 Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心. 映射文件中有很多属性,常用的就是parameterType(输入类型 ...