精华内容
下载资源
问答
  • 我的思路是 写一个sql语句。 然后通过页面的for循环 (俩个循环) 一个循环用户以及订单表的信息,在第一个for循环里面再插入一个for循环 用来遍历 商品 表。 现在唯一的就是 思路不清晰。sql语句写的也有问题。 ...
  • 微信支付查询订单比较时间

    千次阅读 2018-04-04 09:34:01
    最近,在写一个微信支付接口,分享一下,在查询订单的时间比较问题.官方微信支付订单查询: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2知道订单默认是2个小时超时状态.原来是直接乘2个小时与...

    最近,在写一个微信支付接口,分享一下,我在查询订单的时间比较问题.

    官方微信支付订单查询: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2

    我知道订单默认是2个小时超时状态.原来是直接乘2个小时与当前时间比较


    发现,一进判断就结束了,后面就不执行了.

    后来网上查询了一下,微信支付和其他的不一样,我就修改成下面的方法:订单支付时间,格式为yyyyMMddHHmmss;就解决问题了.我后面的代码是转成标准的jsonp格式.

    date时间比较:

    Date1.after(Date2),当Date1大于Date2时,返回TRUE,当小于等于时,返回false;

    Date1.before(Date2),当Date1小于Date2时,返回TRUE,当大于等于时,返回false;


    展开全文
  • 大家晚上好,今天发现其实上一篇博客中其实还有一部分包以及类创建没有和大家分享(因为忙着找bug~结果在更新博客时候忘记了┭┮﹏┭┮);在这里做一下补充说明 (1)其中有新建了一个enums包里面存放了...

    13、买家订单service查询

    大家晚上好,今天我发现其实上一篇博客中其实还有一部分的包以及类的创建没有和大家分享(因为我忙着找bug~结果在更新博客的时候忘记了┭┮﹏┭┮);在这里做一下补充说明


    (1)其中有新建了一个enums包里面存放了一些状态的结果集合 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210306214905434.png)
    • OrderStatusEnum(订单状态结果集)
    package com.yummy.sell.enums;
    
    import lombok.Getter;
    
    /**
     * 订单状态
     * @author LYM
     * @date 2021/3/5
     */
    @Getter
    public enum OrderStatusEnum {
        NEW(0,"新订单"),
        FINISHED(1,"完结"),
        CANCEL(2,"已取消"),
        ;
        private Integer code;
        private String message;
    
        OrderStatusEnum(Integer code,String message) {
            this.code = code;
            this.message=message;
        }
    }
    
    
    • PayStatusEnum(支付状态结果集)
    package com.yummy.sell.enums;
    
    import lombok.Getter;
    
    /**
     * 支付状态
     * @author LYM
     * @date 2021/3/5
     */
    @Getter
    public enum PayStatusEnum {
        WAIT(0,"未支付"),
        SUCCESS(1,"支付成功"),
        ;
        private Integer code;
        private String message;
    
        PayStatusEnum(Integer code,String message) {
            this.code = code;
            this.message=message;
        }
    }
    
    
    • ProductStatusEnum(商品状态结果集)
    package com.yummy.sell.enums;
    
    import lombok.Getter;
    
    /**
     * 商品状态
     * @author LYM
     * @date
     */
    @Getter
    public enum ProductStatusEnum {
        UP(0,"在架"),
        DOWN(1,"下架")
        ;
        private Integer code;
        private String message;
    
        ProductStatusEnum(Integer code,String message) {
            this.code = code;
            this.message=message;
        }
    
    }
    
    
    • ResultEnum(返回前端提示的消息结果集)
    package com.yummy.sell.enums;
    
    import lombok.Getter;
    
    /**
     * 返回前端提示的消息
     * @author LYM
     * @date 2021/3/5 15:55
     */
    @Getter
    public enum ResultEnum {
    
        PRODUCT_NOT_EXIST(10,"商品不存在"),
        PRODUCT_STOCK_ERROR(11,"商品库存不足"),
        ORDER_NOT_EXIT(12,"订单不存在"),
        ORDERDETAIL_NOT_EXIT(13,"订单详情不存在");
        ;
    
        private Integer code;
        private String message;
    
        ResultEnum(Integer code, String message) {
            this.code = code;
            this.message = message;
        }
    
    }
    
    

    (2)紧跟着上面返回前端提示的结果集,有新建了一个exception包用来抛出异常调用的,其结构如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210306215712802.png)
    • SellException类
    package com.yummy.sell.exception;
    
    import com.yummy.sell.enums.ResultEnum;
    
    /**
     * @author LYM
     * @date 2021/3/5 15:55
     */
    public class SellException extends RuntimeException{
        private Integer code;
    
        public SellException(ResultEnum resultEnum) {
            super(resultEnum.getMessage ());
            this.code=resultEnum.getCode ();
        }
    }
    
    
    

    (3)在dto包中其实我又新加了一个CartDTO(购物车数据传输转换),dto包的结构如下 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210306215336257.png)
    • CartDTO
    package com.yummy.sell.dto;
    
    import lombok.Data;
    
    import javax.persistence.Entity;
    import javax.persistence.Id;
    
    /**
     * 购物车
     * @author LYM
     * @date 2021/3/5 16:53
     */
    @Data
    @Entity
    public class CartDTO {
    
        /**商品Id*/
        @Id
        private String productId;
    
        /**商品数量*/
        private Integer productQuantity;
    
        public CartDTO(String productId, Integer productQuantity) {
            this.productId = productId;
            this.productQuantity = productQuantity;
        }
    }
    
    

    应该补充的差不多了吧哈哈哈哈~~~


    (4)下面开始进入主题,service层的订单查询,首先是查询一条记录**findOne()方法**
    • 编辑OrderServiceImpl类的代码

      @Override
      public OrderDTO findOne(String orderId) {
          OrderMaster orderMaster=orderMasterRepository.findOne (orderId);
          if(orderMaster==null){
              //抛出订单不存在异常
              throw new SellException (ResultEnum.ORDER_NOT_EXIT);
          }
          List<OrderDetail> orderDetailList=orderDetailRepository.findByOrderId (orderId);
          if(CollectionUtils.isEmpty (orderDetailList)){
              throw new SellException (ResultEnum.ORDERDETAIL_NOT_EXIT);
          }
          OrderDTO orderDTO=new OrderDTO ();
          //将orderMaster复制到orderDTO里面
          BeanUtils.copyProperties (orderMaster,orderDTO);
          orderDTO.setOrderDetailList (orderDetailList);
          return orderDTO;
      }
      
    • service层代码逻辑实现好之后我们就可以到OrderServiceImplTest进行测试

      @Test
      public void testFindOne() {
          OrderDTO result=orderService.findOne (ORDER_ID);
          log.info ("\n【查询单个订单】\n result={}",result);
          Assert.assertEquals (ORDER_ID,result.getOrderId ());
      }
      
    • 运行测试结果如下:
      在这里插入图片描述
      测试通过数据查询成功~


    (5)接着是查询订单列表**findList方法的实现**
    • 新建一个转换器,新建converter包,新建转换器类OrderMaster2OrderDTOConverter
    package com.yummy.sell.converter;
    
    import com.yummy.sell.dataobject.OrderMaster;
    import com.yummy.sell.dto.OrderDTO;
    import org.springframework.beans.BeanUtils;
    
    import java.util.List;
    import java.util.stream.Collectors;
    
    /**
     * OrderMaster转换成OrderDTO
     * @author LYM
     * @date 2021/3/6 22:16
     */
    public class OrderMaster2OrderDTOConverter {
    
        /**
         * OrderMaster转OrderDTO
         * @param orderMaster
         * @return
         */
        public static OrderDTO convert(OrderMaster orderMaster){
            OrderDTO orderDTO=new OrderDTO ();
            BeanUtils.copyProperties (orderMaster,orderDTO);
            return orderDTO;
        }
    
        /**
         * List<OrderMaster>转List<OrderDTO>
         * @param orderMasterList
         * @return
         */
        public static List<OrderDTO> convert(List<OrderMaster> orderMasterList ){
            return orderMasterList.stream ().map (
                    e->convert (e)
            ).collect (Collectors.toList ());
        }
    }
    
    
    • 编写实现类方法
       @Override
        public Page<OrderDTO> findList(String buyerOpenid, Pageable pageable) {
            Page<OrderMaster> orderMasterPage=orderMasterRepository.findByBuyerOpenid (buyerOpenid, pageable);
            //这里我们不需要去查询详情页面,因为用户的订单列表页面是没有详情的
            List<OrderDTO> orderDTOList=OrderMaster2OrderDTOConverter.convert (orderMasterPage.getContent ());
            Page<OrderDTO> orderDTOPage=new PageImpl<OrderDTO> (orderDTOList,pageable,orderMasterPage.getTotalElements ());
            return orderDTOPage;
        }
    
    • 编写测试类方法
    @Test
        public void testFindList() {
            PageRequest request=new PageRequest (0,2);
            Page<OrderDTO> orderDTOPage=orderService.findList (BUYER_OPENID,request);
            Assert.assertNotEquals (0,orderDTOPage.getTotalElements ());
        }
    
    • 最后我们来测试运行一下,打个断点如下图
      在这里插入图片描述
      我们在debug下运行
      在这里插入图片描述
      由上图我们可以看到查询到了记录总共有4条,数据库也确实有buyer_openid="lym"的四条订单记录,如下:
      在这里插入图片描述
      其中size=2表示每一页有2条记录
      在这里插入图片描述
      由上图我们可以看到数据成功被转换成orderDTO类型
      在这里插入图片描述

    运行通过啦~


    (6)总结

    其实今天在测试运行的时候也有遇到一个项目启动不了报错啥的,后来可能是我的数据库断连重新连接就好了!!!订单的单个查询以及列表查询到今天就结束啦!明天会继续更新订单的取消、完成以及支付等等功能♥。

    展开全文
  • 我们打开用户的我的订单,发现什么都没有,我们应该写这部分的了 我们进入房东的账户看一下 这个只是假的,写死的,所以还是没有 我们观察这两个路由是一样的只有后面不同 以为接收了这个数据来区分...

    查询用户订单

    我们打开用户的我的订单,发现什么都没有,我们应该写这部分的了

    我们进入房东的账户看一下

    这个只是假的,写死的,所以还是没有

    我们观察这两个路由是一样的只有后面不同

    以为接收了这个数据来区分房东和用户

    我们先来定义路由

    接下来我们要进行判断,判断当前访问的是用户还是房东,然后再根据不同的身份编写不同的程序

    房东的身份:
            1.先查询属于自己的房子,就是House的房东id等于当前登陆用户的id


            2.把这些房子的id取出来(放到列表中)
            3.根据房子的id查询预订了自己房子的订单:就是根据条件查询,订单中的房屋id是不是在第二部中的列表里,在就是自己的房屋

    客户的身份:
            1.因为客户下的订单,所以直接在订单表中查询就行了:根据用户的id在订单中查询,如果订单中的user_id等于用户id,那么就是改用户预定的房间

    然后返回数据,因为数据是在列表中的,所以用这种方式,之前也有过

    展开全文
  • 经手同事之前也改过几次,不过效果始终不好,总会出现订单号重复问题,所以趁着这次问题我好好理了一下我同事写代码。 这里简要展示下当时代码: /** * OD单号生成 * 订单号生成规则:OD + ...

    我们线上出了一次事故,这个事故的表象是这样的:

    系统出现了两个一模一样的订单号,订单的内容却不是不一样的,而且系统在按照订单号查询的时候一直抛错,也没法正常回调,而且事情发生的不止一次,所以这次系统升级一定要解决掉。

    经手的同事之前也改过几次,不过效果始终不好,总会出现订单号重复的问题,所以趁着这次问题我好好的理了一下我同事写的代码。

    这里简要展示下当时的代码:

    /**
     * OD单号生成
     * 订单号生成规则:OD + yyMMddHHmmssSSS + 5位数(商户ID3位+随机数2位) 22位
     */
    public static String getYYMMDDHHNumber(String merchId){
          StringBuffer orderNo = new StringBuffer(new SimpleDateFormat("yyMMddHHmmssSSS").format(new Date()));
          if(StringUtils.isNotBlank(merchId)){
              if(merchId.length()>3){
                  orderNo.append(merchId.substring(0,3));
              }else {
                  orderNo.append(merchId);
              }
          }
          int orderLength = orderNo.toString().length();
          String randomNum = getRandomByLength(20-orderLength);
          orderNo.append(randomNum);
          return orderNo.toString();
    }
    
    
      /** 生成指定位数的随机数 **/
      public static String getRandomByLength(int size){
          if(size>8 || size<1){
              return "";
          }
          Random ne = new Random();
          StringBuffer endNumStr = new StringBuffer("1");
          StringBuffer staNumStr = new StringBuffer("9");
          for(int i=1;i<size;i++){
              endNumStr.append("0");
              staNumStr.append("0");
          }
          int randomNum = ne.nextInt(Integer.valueOf(staNumStr.toString()))+Integer.valueOf(endNumStr.toString());
          return String.valueOf(randomNum);
      }      

    可以看到,这段代码写的其实不怎么好,代码部分暂且不议,代码中使订单号不重复的主要因素点是随机数和毫秒,可是这里的随机数只有两位,在高并发环境下极容易出现重复问题。

    同时毫秒这一选择也不是很好,在多核CPU多线程下,一定时间内(极小的)这个毫秒可以说是固定不变的(测试验证过),所以这里我先以100个并发测试下这个订单号生成。

    测试代码如下:

    public static void main(String[] args) {
        final String merchId = "12334";
        List<String> orderNos = Collections.synchronizedList(new ArrayList<String>());
        IntStream.range(0,100).parallel().forEach(i->{
            orderNos.add(getYYMMDDHHNumber(merchId));
        });
    
        List<String> filterOrderNos = orderNos.stream().distinct().collect(Collectors.toList());
    
        System.out.println("生成订单数:"+orderNos.size());
        System.out.println("过滤重复后订单数:"+filterOrderNos.size());
        System.out.println("重复订单数:"+(orderNos.size()-filterOrderNos.size()));
    }

    果然,测试的结果如下:

    当时我就震惊🤯了,一百个并发里面竟然有13个重复的!!!

    我赶紧让同事先不要发版,这活儿我接了!

    对这一烫手的山竽拿到手里没有一个清晰的解决方案可是不行的,我大概花了6+分钟和同事商量了下业务场景,决定做如下更改:

    • 去掉商户ID的传入(按同事的说法,传入商户ID也是为了防止重复订单的,事实证明并没有叼用)

    • 毫秒仅保留三位(缩减长度同时保证应用切换不存在重复的可能)

    • 使用线程安全的计数器做数字递增(三位数最低保证并发800不重复,代码中我给了4位)

    • 更换日期转换为java8的日期类以格式化(线程安全及代码简洁性考量)

    经过以上思考后我的最终代码是:

    /** 订单号生成(NEW) **/
    private static final AtomicInteger SEQ = new AtomicInteger(1000);
    private static final DateTimeFormatter DF_FMT_PREFIX = DateTimeFormatter.ofPattern("yyMMddHHmmssSS");
    private static ZoneId ZONE_ID = ZoneId.of("Asia/Shanghai");
    public static String generateOrderNo(){
        LocalDateTime dataTime = LocalDateTime.now(ZONE_ID);
        if(SEQ.intValue()>9990){
            SEQ.getAndSet(1000);
        }
        return  dataTime.format(DF_FMT_PREFIX)+SEQ.getAndIncrement();
    }

    当然代码写完成了可不能这么随随便便结束了,现在得走一个测试main函数看看:

    public static void main(String[] args) {
    
        List<String> orderNos = Collections.synchronizedList(new ArrayList<String>());
        IntStream.range(0,8000).parallel().forEach(i->{
            orderNos.add(generateOrderNo());
        });
    
        List<String> filterOrderNos = orderNos.stream().distinct().collect(Collectors.toList());
    
        System.out.println("生成订单数:"+orderNos.size());
        System.out.println("过滤重复后订单数:"+filterOrderNos.size());
        System.out.println("重复订单数:"+(orderNos.size()-filterOrderNos.size()));
    }
    
    /**
      测试结果: 
      生成订单数:8000
      过滤重复后订单数:8000
      重复订单数:0
    **/

    真好,一次就成功了,可以直接上线了。。。

    然而,我回过头来看以上代码,虽然最大程度解决了并发单号重复的问题,不过对于我们的系统架构还是有一个潜在的隐患:如果当前应用有多个实例(集群)难道就没有重复的可能了?

    鉴于此问题就必然需要一个有效的解决方案,所以这时我就思考:多个实例应用订单号如何区分开呢?

    以下为我思考的大致方向:

    在此我想了下,我们的应用是跑在docker里面,而且每个docker容器内的应用端口都一样,不过网路IP不会存在重复的问题,至于进程也有存在重复的可能,对于UUID的方式之前吃过亏,远之吧,redis或DB也算是一种比较好的方式,不过独立性较差。。。

    同时还有一个因素也很重要,就是所有涉及到订单号生成的应用都是在同一台宿主机(linux实体服务器)上, 所以就目前的系统架构我选用了IP的方式。

    以下是我的代码:

    import org.apache.commons.lang3.RandomUtils;
    
    import java.net.InetAddress;
    import java.time.LocalDateTime;
    import java.time.ZoneId;
    import java.time.format.DateTimeFormatter;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    import java.util.concurrent.atomic.AtomicInteger;
    import java.util.stream.Collectors;
    import java.util.stream.IntStream;
    
    public class OrderGen2Test {
    
        /** 订单号生成 **/
        private static ZoneId ZONE_ID = ZoneId.of("Asia/Shanghai");
        private static final AtomicInteger SEQ = new AtomicInteger(1000);
        private static final DateTimeFormatter DF_FMT_PREFIX = DateTimeFormatter.ofPattern("yyMMddHHmmssSS");
        public static String generateOrderNo(){
            LocalDateTime dataTime = LocalDateTime.now(ZONE_ID);
            if(SEQ.intValue()>9990){
                SEQ.getAndSet(1000);
            }
            return  dataTime.format(DF_FMT_PREFIX)+ getLocalIpSuffix()+SEQ.getAndIncrement();
        }
    
        private volatile static String IP_SUFFIX = null;
        private static String getLocalIpSuffix (){
            if(null != IP_SUFFIX){
                return IP_SUFFIX;
            }
            try {
                synchronized (OrderGen2Test.class){
                    if(null != IP_SUFFIX){
                        return IP_SUFFIX;
                    }
                    InetAddress addr = InetAddress.getLocalHost();
                    //  172.17.0.4  172.17.0.199 ,
                    String hostAddress = addr.getHostAddress();
                    if (null != hostAddress && hostAddress.length() > 4) {
                        String ipSuffix = hostAddress.trim().split("\\.")[3];
                        if (ipSuffix.length() == 2) {
                            IP_SUFFIX = ipSuffix;
                            return IP_SUFFIX;
                        }
                        ipSuffix = "0" + ipSuffix;
                        IP_SUFFIX = ipSuffix.substring(ipSuffix.length() - 2);
                        return IP_SUFFIX;
                    }
                    IP_SUFFIX = RandomUtils.nextInt(10, 20) + "";
                    return IP_SUFFIX;
                }
            }catch (Exception e){
                System.out.println("获取IP失败:"+e.getMessage());
                IP_SUFFIX =  RandomUtils.nextInt(10,20)+"";
                return IP_SUFFIX;
            }
        }
    
    
        public static void main(String[] args) {
            List<String> orderNos = Collections.synchronizedList(new ArrayList<String>());
            IntStream.range(0,8000).parallel().forEach(i->{
                orderNos.add(generateOrderNo());
            });
    
            List<String> filterOrderNos = orderNos.stream().distinct().collect(Collectors.toList());
    
            System.out.println("订单样例:"+ orderNos.get(22));
            System.out.println("生成订单数:"+orderNos.size());
            System.out.println("过滤重复后订单数:"+filterOrderNos.size());
            System.out.println("重复订单数:"+(orderNos.size()-filterOrderNos.size()));
        }
    }
    
    /**
      订单样例:20082115575546011022
      生成订单数:8000
      过滤重复后订单数:8000
      重复订单数:0
    **/

    最后,代码说明及几点建议

    • generateOrderNo()方法内不需要加锁,因为AtomicInteger内使用的是CAS自旋转锁(保证可见性的同时也保证原子性,具体的请自行了解)

    • getLocalIpSuffix()方法内不需要对不为null的逻辑加同步锁(双向校验锁,整体是一种安全的单例模式)

    • 本人实现的方式并不是解决问题的唯一方式,具体解决问题需要视当前系统架构具体而论

    • 任何测试都是必要的,我同事在前几次尝试解决这个问题后都没有自测,不测试有损开发专业性!

    展开全文
  • 首先, 申请接入流程不多说,这个是申请地址 ,先看一下我在平台申请五个api(第一个是默认就有,也是必须有,下面四个是自己添加),如下图: 我说明一下第一个下单接口和第五个路由推送接口,其他照...
  • 下面讲解一下查询订单php方法: 在进行查询之前我们要必须知道4个参数: $key ='212332132132132'//公众号在申请微信支付时候需要你自己一个密匙 $appid = 'xxxxxxx';//进行收钱公众号appid
  • 在“我的china-pub >> 纸版书 >>订单记录”页面,“查看订单”下拉列表中,查询“当年的”,查询结果居然还是2010年的订单记录。 研究发现这个应该和服务器系统时间不同步没有关系,而是界面设计中存在的超低级的...
  • 最近做项目涉及到微信公众号支付,翻遍文档和查阅众多资料后,记一下自己整过程: 1.先看官方文档,把DEMO下载下来,发现都是要证书,继续看文档,API列表 2.还是看文档,参数,坑最多地方,这里...
  • 正常来说,插入之前先查询一下有没有已成功的订单并上锁就好,但是MYSQL 行锁锁不住不存在的数据。 比如事务1,查询了发现不存在,就去插入, 事务2在事务1插入前也查询了,也发现不存在,也去插入 MYSQL 有没有...
  • 先看一下我的订单详情表: 订单实体类,里面用集合存储了订单详情: 然后是我的resultMap: 直接上结论: 经过两天的摸索,我发现resultmap中的id字段是不能重复的(绝对不是我忘了 ,重复的字段会被mybatis自动...
  • 淘宝和京东的每天[color=red][b]订单量肯定很大[/b][/color],那1月两月、1年10年后订单数据量肯定很大很多,而且 淘宝中我的订单是 分页显示的(大多网银中的查询却是限制日期段来查询显示的),求大神解惑 他们的...
  • 我们在开始创建数据表和向表中插入演示数据之前,想给大家解释一下实时数据表设计理念,这样也许能帮助大家能更好理解SQL查询。 在数据库设计中,有一条非常重要规则就是要正确建立主键和外键关系。 ...
  • Mysql 分页查询优化几种思路

    千次阅读 2019-06-17 10:33:28
    下面简单说一下我知道的一些方法。 准备工作 为了对下面列举的一些优化进行测试,下面针对已有的一张表进行说明。 表名:order_history 描述:某个业务的订单历史表 主要字段:unsigned int id,...
  • 经手同事之前也改过几次,不过效果始终不好:总会出现订单号重复问题, 所以趁着这次问题我好好理了一下我同事写代码。 这里简要展示下当时代码: `/** * OD单号生成 * 订单号生成规则:OD + ...
  • 1.直接上代码 也是看别人的我自己因为要用找了很久 query没有找到返回单独列这里就用另一种, 有大佬知道可以指点一下 DBObject obj = new BasicDBObject(); //这里是条件 obj.put("ipoNo", "订单...
  • 经手同事之前也改过几次,不过效果始终不好:总会出现订单号重复问题, 所以趁着这次问题我好好理了一下我同事写代码。 这里简要展示下当时代码: /***OD单号生成*订单号生成规则:OD+...
  • 下面简单说一下我知道的一些方法。 准备工作 为了对下面列举的一些优化进行测试,下面针对已有的一张表进行说明。 表名:order_history 描述:某个业务的订单历史表 主要字段:unsigned int id,...
  • 经手同事之前也改过几次,不过效果始终不好:总会出现订单号重复问题, 所以趁着这次问题我好好理了一下我同事写代码。 这里简要展示下当时代码: /** *OD单号生成 *订单号生成规则:OD + ...
  • 下面简单说一下我知道的一些方法。 准备工作 为了对下面列举的一些优化进行测试,下面针对已有的一张表进行说明。 表名:order_history 描述:某个业务的订单历史表 主要字段:unsigned int id,tinyint(4) int...
  • 下面简单说一下我知道的一些方法。 准备工作 为了对下面列举的一些优化进行测试,下面针对已有的一张表进行说明。 表名:order_history 描述:某个业务的订单历史表 主要字段:unsigned i...
  • 下面简单说一下我知道的一些方法。 准备工作 为了对下面列举的一些优化进行测试,下面针对已有的一张表进行说明。 表名:order_history 描述:某个业务的订单历史表 主要字段:unsigned int id,tinyint(4) int...
  • 下面简单说一下我知道的一些方法。 准备工作 为了对下面列举的一些优化进行测试,下面针对已有的一张表进行说明。 表名:order_history 描述:某个业务的订单历史表 主要字段:unsigned int id,tinyi...
  • 下面简单说一下我知道的一些方法。 准备工作 为了对下面列举的一些优化进行测试,下面针对已有的一张表进行说明。 表名:order_history 描述:某个业务的订单历史表 主要字段:unsign...
  • 明确告诉你,没有,曾经非常困惑这类问题,直到某次有幸去大厂交流了一下,才发现他们拿微服务基本都做是OLTP(联机事务处理)类业务——最多涉及多个库表事务性写入,通过最终一致性解决。而你说这种联表...
  • 前一段时间在淘宝上多买了几件宝贝,通过物流查询宝贝的进度的... 快递查询 http://kd.loveyd.com/ ,该应用把相关快递的查询表单集合到一个页面中,淘宝买家找到对应的物流公司的查询表单,输入对应的订单号码,...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 310
精华内容 124
关键字:

查一下我的订单