/**
     * @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多对多的查询应用的更多相关文章

  1. NHibernate教程(11)--多对多关联查询

    本节内容 多对多关系引入 多对多映射关系 多对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 多对多关系引入 让我们再次回顾在第二篇中建立的数据模型 ...

  2. mybatis实战教程二:多对一关联查询(一对多)

    多对一关联查询 一.数据库关系.article表和user表示多对一的关系 CREATE TABLE `article` ( `id` ) NOT NULL AUTO_INCREMENT, `user ...

  3. mybatis多表查询之多对多关系查询的实现-xml方式

    Mybatis对于多对多关系下的查询提供了集合(collection)的概念来解决,collection属性是resultMap高级结果映射的子集,首先,在本例中我们使用的是集合元素来解决多对多的查询 ...

  4. Python--day64--找到作者关联的所有书籍对象、ORM多对多关联查询的原理

    找到当前作者关联的所有书籍对象: ORM多对多关联查询的原理: 编辑作者:

  5. django ORM多对多正向查询时查询返回结果为None

    表 class Books(models.Model): '''书籍''' id = models.AutoField(primary_key=True) name = models.CharFiel ...

  6. mybatis 14: 多对一关联查询

    业务背景 根据订单id查询订单的信息,以及该订单所属的客户的基本信息(不包括该客户自己的订单信息) 两张数据表 客户表 订单表 实体类 客户实体类:Customer private Integer i ...

  7. hibernate中HQL多对多的查询

    现有三张表 TLXPURCHASE.采购事项审批表,TLXPURCHASEACTIVITY.采购招标活动对应表,TLXACTIVITY.招标活动表,采购事项审批表和采购活动表是多对多关系.java中定 ...

  8. 【Hibernate】双向多对多Set查询

    一个计划对于多个竞价,一个竞价对应多个计划. 1.实体 /** * @author Tidy * @Description 计划 */ public class EbgStockPlanContent ...

  9. python flask(多对多表查询)

    我们在flask的学习中,会难免遇到多对多表的查询,今天我也遇到了这个问题.那么我想了好久.也没有想到一个解决的办法,试了几种方法,可能是思路的限制我放弃了,后来,我就在网上百度,可是发现百度出来的结 ...

随机推荐

  1. HP DL60 Gen9 安装CentOS 6.5

    由于Gen 9的VID中自带RETHAT 5.X-7.0的驱动, 所以不需要制作驱动盘. 一, 准备工作 1. 制作 CentOS安装盘 2. 配置阵列, 开机过了自检后按F10. 自己看着配... ...

  2. Qt学习笔记 ListWidget的增删改

    学习了一下ListWidget控件的使用,做一个小功能增删改 先把代码分解最后给出完整代码 在窗体上添加一个ListWidget 一个Horizontal Specer和  三个PushButton ...

  3. Oracle 常见错误排查

    1. java.sql.SQLException: ORA-01000: 超出打开游标的最大数 step 1: 查看数据库当前的游标数配置slqplus:show parameter open_cur ...

  4. 端口被占用的解决方案 sql server 10048 错误

    一大早发现sql server服务无法启动,10048错误,一查是端口占用. 先找到哪个进程,结束即可. cmd命令, netstat /ano|findset "1433" 出现 ...

  5. C#微信公众号开发系列教程六(被动回复与上传下载多媒体文件)

    微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...

  6. 快速备份和还原 MySQL 数据库的另一种方法

    一直使用 SQL Server 作为公司产品的数据库来存储系统数据,所以备份还原一直都不是问题,因为 SQL Server 的备份还原非常迅速和易用.但今年公司改变策略,使用起 MySQL 数据库作为 ...

  7. c/s 自动升级(WebService)

    首先声明,本人文笔不好,大家见笑,欢迎高手吐槽. 做c/s开发肯定会遇到的就是自动升级功能,而这实现方式是非常多. 本文使用 webservice的方式来提供升级服务 首先准备服务 为了方便我们专门用 ...

  8. 1109关于redo_Log和undo_log和BIN-LOG

    转自http://www.cnblogs.com/Bozh/archive/2013/03/18/2966494.html 三者之间的区别BIN-LOG 一个对应BINLOG文件REDO-LOG 对应 ...

  9. js实现登陆页面的拖拽功能

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>登 ...

  10. 利用springframework+javax.mail发邮件(普通邮件、带附件邮件、HTML格式邮件)

    Spring提供了发送电子邮件的支持,可以发送普通邮件.带附件邮件.HTML格式邮件,甚至还可以使用Velocity模板定制化邮件内容. 一.引入相关的库 1 2 3 4 5 6 7 8 9 10 1 ...