/**
     * @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. 让你彻底理解 “==”与 Equals

    相信很多朋友在面对,对象判等时经常会犹豫是用“==”还是Equals呢?有时候发现两者得到的结果相同,但有时候有不同, 究竟在什么情况下"==" 会相等,什么情况下Equals会不 ...

  2. Javascript的精华啊【如果以后我看到了或者想到了再继续补吧】

    我不过略有一些讨人喜欢的地方而已,怎么会有什么迷人的魔力呢? 一.语法 JS只有一个数字类型,64位浮点数,所以1和1.0是相同的.为什么这么设计:防止短整型的溢出. 二.对象 1.通常将一个对象的值 ...

  3. ASP.NET 系列:单元测试之StructureMap

    ASP.NET使用StructureMap等依赖注入组件时最重要就是EntityFramework的DbContext对象要保证在每次HttpRequest只有一个DbContext实例,这里将使用第 ...

  4. 学习SQLite之路(一)

    工作快一年了,接触的东西不是很多,学到的东西也不多.无意中看到公司的代码有一点关于sqlite3的(不是我这一层负责的代码),于是乎就学学试试. 参考: http://www.runoob.com/s ...

  5. NPOI2.0学习(一)

    引用空间 using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; 创建工作簿(workbook)和sheet HSSFWorkbook wk = new ...

  6. java中的static详解

    如果一个类成员被声明为static,它就能够在类的任何对象创建之前被访问,而不必引用任何对象.static 成员的最常见的例子是main( ) .因为在程序开始执行时必须调用main() ,所以它被声 ...

  7. Android开发之Fragment

    一.Fragment生命周期: 二.动态添加Fragment的三步: 1.获得Fragment的管理者FragmentManager FragmentManager fragmentManager = ...

  8. nginx启动、重启、关闭

    一.启动 cd usr/local/nginx/sbin ./nginx 二.重启 更改配置重启nginx kill -HUP 主进程号或进程号文件路径 或者使用 cd /usr/local/ngin ...

  9. git 高级命令

    git bisect 运行git bisect 通常是为了找出某个导致版本库产生倒退或bug的特殊提交 例如:你的版本库已经从一个已知的"好"状态过渡到一个已知的"坏&q ...

  10. 【BZOJ 1030】【JSOI 2007】文本生成器 AC自动机+递推

    一直不理解到底怎么做啊,想了好久$TwT$ 最后终于明白了为什么找到第一个满足条件的$fail$就计算,因为避免重复,这个回答,,, 然后$root$下面要接上26个节点,这里26个字母中不在字典内的 ...