订单状态在订单文档中保存时是一个整型字段,它对应订单的一个状态信息。一般来说,这种状态都较为固定,所以我们使用一个枚举定义StatusEnum来实现,这样在订单的查询设计中,就可以对各个订单状态进行转换,同时在订单的编辑中也可以列举出所有状态进行选择。代码如下所示:

public enum StatusEnum {

UNPAID(Integer.valueOf(0),“未付款”),

PAID(Integer.valueOf(1),“已付款”),

SHIPPED(Integer.valueOf(2),“已发货”),

RECEIVED(Integer.valueOf(3), “已收货”),

EVALUATED(Integer.valueof(4),“已评价”),

REVOKED(Integer.valueOf(-1),“已撤销”),

REFUNDED(Integer.valueOf(-2),“已退款”);

private Integer code;

private String name;

StatusEnum(Integer code, String name) {

this.code = code;

this.name = name;

public static boolean contains (Integer code) throws NullPointerException {

if(null -= code){

throw new NullPointerException (“constant code is null”);

]else {

StatusEnum[] varl = values();int var2=var1. length;

for(int var3 =0; var3 < var2; ++var3) {

StatusEnum eum = varl[var3];

if(code.equals(eum.getCode())) {

return true;

return false;

public static StatusEnum valueof(Integer code) throws NullPointerException,EnumConstantNotPresentException {

if(null == code) {

throw new NullPointerException (“constant code is null”);]else {

StatusEnum[] var1 =values();int var2 = var1 . length;

for(int var3 =0;var3 < var2; ++var3) {

StatusEnum statusEnum= var1 [var3];

if(code.equals(statusEnum.getCode())) {

return statusEnum;

throw new EnumConstantNotPresentException (StatusEnum.class,

code.toString());

)

public Integer getCode( {

return this.code;

}

public string getName(){

return this.name;

}

}

反应式 MongoDB编程设计

===============

反应式编程设计是Spring Boot 2.0及以上版本提供的一个新功能,这是一个非阻塞的异步调用设计,可以适应高并发的请求调用。在反应式编程中有两个基本概念:Flux和 Mono。Flux表示的是包含0到N个元素的异步序列,在该序列中可以包含三种不同类型的消息通知:正常的包含元素的消息、序列结束的消息和序列出错的消息。当消息通知产生时,订阅者中对应的方法 onNext()、onComplete()和 onError()会被调用。Mono表示的是包含0或者1个元素的异步序列,在该序列中,包含的消息通知的类型与Flux相同。

基于Spring Data的存储库接口设计

Spring Data MongoDB和Spring Data一样,有一个统一的规范设计。前面我们在Spring DataJPA中使用过这种规范,所以接下来的代码,读者会觉得很熟悉。

订单的存储库接口是 OrderRepository,实现代码如下所示:

@Repository

ePrimary

public interface OrderRepository extends ReactiveMongoRepository<Order, String>{

Mono<0rder> findByOrderNo (String orderNo);

}

动态分页查询设计

在存储库接口设计中,可以使用注解@Query灵活地定义复杂的查询。对于订单的分页查询,我们使用了如下所示的动态查询设计:

@Query (“I ‘userid’:?#(([0] == null)?{$exists:true}:[0]},”+

" ‘merchantid’:?#{([1] == null)?{KaTeX parse error: Expected 'EOF', got '}' at position 12: exists:true}̲:[1]},"+" 'stat…exists:true} :[2]1,"+

" ‘created’:?#{([3] == null) and ([4] == null)?{Sexists:true}😦 $gte:

[3],$lte: [4]}}}")

Flux findAll (Long userid, Long merchantid, Integer status, Date start,

Date end, Sort sort) ;

这里我们提供了几个查询条件,它们分别是:用户编号(userid) 、商家编号(merchantid)、订单状态(status)和订单创建日期(created)。这些查询条件如果值为空,则忽略不计,否则按提供的数值进行限定查询。其中,对于订单的创建日期的条件查询,使用了大于或等于(Sgte)开始日期和小于或等于($Ite)结束日期的条件限制。最后,还可以对查询结果进行排序。

针对分页的查询接口声明,我们在服务类OrderService中使用了如下所示的设计:

@service

public class OrderService {

@Autowired

private OrderRepository orderRepository;

public Flux<0rder> findAll (0rderQo orderQo){

try{

Sort sort = Sort.by (new Sort.Order(Sort.Direction.DESC, “created”));

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

面试是跳槽涨薪最直接有效的方式,马上金九银十来了,各位做好面试造飞机,工作拧螺丝的准备了吗?

掌握了这些知识点,面试时在候选人中又可以夺目不少,暴击9999点。机会都是留给有准备的人,只有充足的准备,才可能让自己可以在候选人中脱颖而出。

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

86d4c3ab8389e65ecb71ac0)

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐