springboot整合mybats-plus和lombok实现一对多和延迟加载

configuration:
  map-underscore-to-camel-case: false
  cache-enabled: true #配置的缓存的全局开关
  lazyLoadingEnabled: true #延时加载的开关
  multipleResultSetsEnabled: true #开启的话,延时加载一个属性时会加载该对象全部属性,否则按需加载属性
  log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用
         <collection fetchType="lazy" property="orderCarrierList" column="id" select="com.mapper.OrderCarrierMapper.listOrderCarrierAfterPlaceOrder"
                    javaType="List" ofType="com.entity.OrderCarrier"/>
        Long orderCompanyId = (Long)paramMap.get("id");
        List<OrderCompany> companyOrderList =  this.baseMapper.getCompanyOrderList(paramMap);
        ListIterator listIterator = companyOrderList.listIterator();
        while (listIterator.hasNext()){
            OrderCompany orderCompany = (OrderCompany)listIterator.next();
            Long id = orderCompany.getId();

            if(orderCompanyId != null && Long.compare(orderCompanyId,id) == 0){
                //仅仅查询指定orderCarrierId的运单数据
            }else {
                //否则不查询运单
                orderCompany.setOrderCarrierList(null);
            }

            orderCompany.setOrderProductTypeName(ProductCategory.getNameByValue(orderCompany.getOrderProductType()));
            orderCompany.setOrderStateName(OrderStateEnum.getNameByValue(orderCompany.getOrderState()));
        }

测试:

不传orderCarrierId时:

传orderCarrierId时:

总结:

这个配置我配了半天延迟加载一致失效,后面我采用 setxx(null) 的方法 ,  解决了延迟加载的问题(只要能解决问题就行了) 

当不传orderCarrierId是只查询订单(1次查询)

当传orderCarrierId时,在查询订单的时候,会查询指定orderCarrierId的运单信息(2次查询)

猜你喜欢

转载自blog.csdn.net/qq_24271537/article/details/115272989