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;
	}
}

  

时间: 2024-12-16 05:09:58

List多对多的查询应用的相关文章

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

本节内容 多对多关系引入 多对多映射关系 多对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 多对多关系引入 让我们再次回顾在第二篇中建立的数据模型: 在图上,我已经清晰的标注了表之间的关系,上两篇分析Customer和Order之间的"外键关系"或者称作"父子关系"."一对多关系"和关联查询,这一篇以Order为中心,分析Order和Product之间的关系,直接看下面一幅图的两张表: 上面两

Django 【补充】ORM多对多正向查询

一.多对多的正反向查询 class Class(models.Model): name = models.CharField(max_length=32,verbose_name="班级名") course = models.CharField(verbose_name="课程",max_length=32) def __str__(self): return self.name class Teacher(models.Model): name = models.

Mybatis的多表(多对多)查询

Mybatis的多表(多对多)查询 示例:用户和角色 一个用户可以有多个角色 一个角色可以赋予多个用户 解决办法 建立两张表:用户表,角色表 让用户表和角色表具有多对多的关系.需要使用中间表,中间表包含各自的主键,在中间表中是外键. 建立两个实体类:用户实体类和角色实体类 让用户和角色的实体类能体现出来多对多的关系 各自包含对方一个集合引用 建立两个配置文件 用户的配置文件 角色的配置文件 实现配置 当我们查询用户时,可以同时得到用户所包含的角色信息. 当我们查询角色时,可以同时得到角色所赋予的

python flask(多对多表查询)

我们在flask的学习中,会难免遇到多对多表的查询,今天我也遇到了这个问题.那么我想了好久.也没有想到一个解决的办法,试了几种方法,可能是思路的限制我放弃了,后来,我就在网上百度,可是发现百度出来的结果和自己想要的还有一定的差距,那么我根据百度上得来的思路,那么我也对我的数据结构进行了探索, 下面来看看我这里怎么来查询的,首先给大家看下我写的数据库的代码的片段,这样,加深理解. post_class=db.Table('post_class', db.Column('post_id',db.In

mybatis多对多关联查询——(十)

1.需求 查询用户及用户购买商品信息. 2     sql语句 查询主表是:用户表 关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表: orders.orderdetail.items SELECT orders.*, USER.username, USER.sex, USER.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.items_num, orderdetail.

Hibernate 多对一关联查询

一.单向多对一和双向多对一的区别 如果只需要从一方获取另一方数据,就用单向多对一:如果需要从双方都获取对方数据,就用双向多对一. 如果有两个对象,一个为User对象,一个为Department对象,一个用户只能属于一个部门,而一个部门可以包含多个用户.这样就是多对一关系.如下图 假设:我们需要通过用户找到所对应的部门,不需要通过部门查询该部门有哪些用户,就采用单向多对一关系 如果:我们不仅需要通过用户获取所对应的部门,还需要通过部门对象获取该部门下的用户,那么就采用双向多对一 二.单向多对一关系

mybatis 一对多和多对一关联查询

首先  数据库量表之间字段关系(没有主外键) studentmajor表的id字段对应student表里major字段 两个实体类 package com.model; import java.util.Date; public class Student { private Integer sno; private String sname; private String ssex; private Integer sclass; private StudentMajor studentmaj

【Hibernate】双向多对多Set查询

一个计划对于多个竞价,一个竞价对应多个计划. 1.实体 /** * @author Tidy * @Description 计划 */ public class EbgStockPlanContent extends Model { /***省略***/ private Set<EbgBidding> biddingSet = new HashSet<EbgBidding>(); /***省略getset***/ } /** * @author Tidy * @Descriptio

三大框架 之 Hibernate查询(一对多、多对多、查询关系)

目录 一对多 表之间关系 表之间关系建表原则 一对多关系配置 建立表 建立ORM 添加配置文件 添加核心配置文件 引入工具类 编写测试类 级联操作 什么是级联 级联分类 级联是有方向性 级联保存或更新 级联删除 在双向级联的过程当中,会产生一些多余的sql语句 lazy懒加载(默认值是proxy,不自动获取外键对象) 级联保存或更新(解决 瞬时对象异常,只保存一边) 多对多 多对多关系配置 建立表 建立ORM 添加配置文件 在核心配置文件当中添加两个新配置 编写测试类 多对多的操作 查询方式 O