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的学习中,会难免遇到多对多表的查询,今天我也遇到了这个问题.那么我想了好久.也没有想到一个解决的办法,试了几种方法,可能是思路的限制我放弃了,后来,我就在网上百度,可是发现百度出来的结 ...
随机推荐
- http缓存提高性能
秋招也算是正式结束了,现在整理一下笔记,当作巩固一下知识,也希望这个对大家有帮助 http 缓存 和 cdn 缓存可以说是面试必问的问题,竟然是必问的问题,那就总结全面一点- http缓存机制 缓存分 ...
- EMV内核使用中的常见问题
EMV内核在使用上会由于调用不当引起的许多问题,本文旨在基于内核LOG(也就是与IC卡交互的指令LOG)的基础上,对一些常见问题作初步的分析与解答,方便不熟悉EMV规范的同学参考. 本文的前提是你已经 ...
- 微信公众平台开发(71)OAuth2.0网页授权
微信公众平台开发 OAuth2.0网页授权认证 网页授权获取用户基本信息 作者:方倍工作室 微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使 ...
- 操作文件方法简单总结(File,Directory,StreamReader,StreamWrite )
对于文件夹,文档的操作一直处于一知半解状态,有时间闲下来了,好好练习了一把,对文档,文件的操作有了一个基本的认知, 若要深入了解,还是得通过实际的项目才行了,好了废话不多说,上酸菜!! 注:红色标题为 ...
- MATLAB调用C程序、调试和LDPC译码
MATLAB是一个很好用的工具.利用MATLAB脚本进行科学计算也特别方便快捷.但是代码存在较多循环时,MATLAB运行速度极慢.如果不想放弃MATLAB中大量方便使用的库,又希望代码能迅速快捷的运行 ...
- requirejs:性能优化-及早并行加载
为了提高页面的性能,通常情况下,我们希望资源尽可能地早地并行加载.这里有两个要点,首先是尽早,其次是并行. 通过data-main方式加载要尽可能地避免,因为它让requirejs.业务代码不必要地串 ...
- ul、li实现横向导航按钮
好久没写博客了,主要是懒得呼气都不想呼,上周分给我一个新的任务,就是自己新建一个系统,快速极限开发,虽然之前自己也做过小的系统,但毕竟是自己做,随着自己的心意做,没有做其他的限制等,现在呢是给公司做, ...
- Bootstrap系列 -- 41. 带表单的导航条
有的导航条中会带有搜索表单,在Bootstrap框架中提供了一个“navbar-form”,使用方法很简单,在navbar容器中放置一个带有navbar-form类名的表单.navbar-left”让 ...
- 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 ...
- restFull常用注解
@GET.@POST.@PUT.@DELETE.@HEAD您可以使用它们来绑定根资源或子资源内的 Java 方法与 HTTP 请求方法.HTTP GET 请求被映射到由 @GET 注释的方法,以此类推 ...