/**
     * @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. http缓存提高性能

    秋招也算是正式结束了,现在整理一下笔记,当作巩固一下知识,也希望这个对大家有帮助 http 缓存 和 cdn 缓存可以说是面试必问的问题,竟然是必问的问题,那就总结全面一点- http缓存机制 缓存分 ...

  2. EMV内核使用中的常见问题

    EMV内核在使用上会由于调用不当引起的许多问题,本文旨在基于内核LOG(也就是与IC卡交互的指令LOG)的基础上,对一些常见问题作初步的分析与解答,方便不熟悉EMV规范的同学参考. 本文的前提是你已经 ...

  3. 微信公众平台开发(71)OAuth2.0网页授权

    微信公众平台开发 OAuth2.0网页授权认证 网页授权获取用户基本信息 作者:方倍工作室 微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使 ...

  4. 操作文件方法简单总结(File,Directory,StreamReader,StreamWrite )

    对于文件夹,文档的操作一直处于一知半解状态,有时间闲下来了,好好练习了一把,对文档,文件的操作有了一个基本的认知, 若要深入了解,还是得通过实际的项目才行了,好了废话不多说,上酸菜!! 注:红色标题为 ...

  5. MATLAB调用C程序、调试和LDPC译码

    MATLAB是一个很好用的工具.利用MATLAB脚本进行科学计算也特别方便快捷.但是代码存在较多循环时,MATLAB运行速度极慢.如果不想放弃MATLAB中大量方便使用的库,又希望代码能迅速快捷的运行 ...

  6. requirejs:性能优化-及早并行加载

    为了提高页面的性能,通常情况下,我们希望资源尽可能地早地并行加载.这里有两个要点,首先是尽早,其次是并行. 通过data-main方式加载要尽可能地避免,因为它让requirejs.业务代码不必要地串 ...

  7. ul、li实现横向导航按钮

    好久没写博客了,主要是懒得呼气都不想呼,上周分给我一个新的任务,就是自己新建一个系统,快速极限开发,虽然之前自己也做过小的系统,但毕竟是自己做,随着自己的心意做,没有做其他的限制等,现在呢是给公司做, ...

  8. Bootstrap系列 -- 41. 带表单的导航条

    有的导航条中会带有搜索表单,在Bootstrap框架中提供了一个“navbar-form”,使用方法很简单,在navbar容器中放置一个带有navbar-form类名的表单.navbar-left”让 ...

  9. python环境搭建-Linux系统下python2.6.6升级python3.5.2步骤

    [root@template ~]# python -v # /usr/lib64/python2.6/encodings/utf_8.pyc matches /usr/lib64/python2.6 ...

  10. restFull常用注解

    @GET.@POST.@PUT.@DELETE.@HEAD您可以使用它们来绑定根资源或子资源内的 Java 方法与 HTTP 请求方法.HTTP GET 请求被映射到由 @GET 注释的方法,以此类推 ...