• spring boot实战——微信点餐系统02:接口信息,分页工具,gson, 注解信息,表单验证,字段返回(时间处理,null处理)


    ServiceImpl一定要加注解 @service ,测试类一定要加 @SpringBootTest!!!!!!

    调用更新操作要使用事务,@Transactional(rollbackFor=Exception.class)

    1、商品信息

    商品Dao:

      查询在架商品

    商品Service:

      根据Id查询商品

      前端查询所有在架商品

      后端查询所有商品(注意加一个分页参数:使用springframework的 Pageable 接口类)   ----》在服务端可以使用 PageRequest 类,它是 pageable 类的实现类。

      保存商品

      加库存

      减库存

    商品controller

    #1 访问 http://192.168.43.18/#/order

    #2  在控制台 console 输入 document.cookie='openid=abc123'

    #3 配置Nginx 将请求转到开发环境的连接,注意:如果使用WiFi网络,要用下面的IPV4地址  http://192.168.43.104:8080/sell/buyer/product/list

    2、订单主表信息 

     订单主表dao:

      工具微信OpenId查找订单

    订单详情表dao:

      根据订单Id查找订单详情 List    findByOrderId

    订单主表service:

      创建订单     注意扣库存的并发时,多人同时扣库存,会导致超卖! 使用 Redis解决

      查询单个订单

      查询订单列表

      取消订单

      完结订单

      支付订单

    工具:

      将一个对象相对应的属性复制另一个对象相同的属性:BeanUtils.copyProperties(productInfo,productInfoVO);

     关于分页:

      在service使用 Pageable pageable()做形参, controller 使用 Pageable 的实现类 PageRequest 当实参,返回值使用 Page 的 PageImpl 带数据回来。 

    import org.springframework.data.domain.Pageable;
    #service
    Page<ProductInfo> findAll(Pageable pageable);
    
    #service impl
    @Override
    public Page<ProductInfo> findAll(Pageable pageable) {
        return repository.findAll(pageable);
    }
    
    #在controller
    PageRequest pageRequest=PageRequest.of(0,5);
    Page<ProductInfo> page = productService.findAll(pageRequest);
    

      gson 将前端传过来的表单字符串,字符串转换为 list

         转字符串:https://blog.csdn.net/bingqilin_/article/details/48341093     详细介绍:https://www.jianshu.com/p/eaa72df1f015

    注:关于注解

    dao加的注解:

    @Entity #加到持久层
    @Data   #lombok的注解
    @Id   
    @DynamicUpdate   #时间戳自动更新
    @GeneratedValue(strategy = GenerationType.IDENTITY)  #主键自动增长

      

    service加的注解:

      @service

    Test 测试类加的注解:

    @SpringBootTest
    @Transactional #测试后,进行数据回滚
    

    商品controller

    @RestController
    

      

    VO ,View Object 

    @JsonProperty("name") #返回数据的时候,使用别名

    Form 表单验证 https://www.cnblogs.com/WHL5/p/9242906.html

    @NotEmpty(message = "地址必填")
    

      

    @Null 验证对象是否为空

    @NotNull 验证对象是否为非空

    @AssertTrue 验证 boolean 对象是否为 true

    @AssertFalse 验证 boolean 对象是否为 false

    @NotEmpty  验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)

     字段返回(时间处理,null处理)

     时间可在配置文件修改 json 的配置

    https://blog.csdn.net/z_k_h/article/details/82253530

    spring
         jackson:
              time-zone: GMT+8
              date-format: yyyy-MM-dd HH:mm:ss  

    当值为 null 时,不返回

    方法1:在对象上添加注解,单个类生效

    @JsonInclude(JsonInclude.Include.NON_NULL)
    

      

    方法2:全局配置文件添加 

         spring.jackson.default-property-inclusion: non_null
    

      

    当对象属性为 null 时,返回默认值 : 直接在对象类设置属性值   private List<OrderDetail> orderDetailList = new ArrayList<>();    (这样可能不太建议,可以寻找其他方法)

    end

  • 相关阅读:
    程序员无休止加班的真正原因!
    Tomcat 爆出高危漏洞!
    Spring Boot 2.3 终于要来了!
    2020 年 4月全国程序员工资出炉!
    面试官再问你如何看待义务加班,学会如何怼回去!
    如何在一分钟内搞定面试官?
    安装android studio时,解决unable to access android sdk add-on list
    poj 3230 Travel(dp)
    hdu 2059 龟兔赛跑(dp)
    解决未能启动服务“VMware Authorization Service”
  • 原文地址:https://www.cnblogs.com/Lemonades/p/11745776.html
Copyright © 2020-2023  润新知