当前位置: 首页 > wzjs >正文

河南整站百度快照优化生成短网址的平台

河南整站百度快照优化,生成短网址的平台,网站网络广告如何建设,学校网站制作html编者按:如何写出更优雅的代码?这是一个恒久的问题,在 Java 的世界里,SpringBoot 框架最为流程,几乎已经成为事实标准。本系列将围绕 SpringBoot 实战案例进行,介绍如何写出更优雅的 Java 代码。 笔者试图通…

在这里插入图片描述

编者按:如何写出更优雅的代码?这是一个恒久的问题,

在 Java 的世界里,SpringBoot 框架最为流程,几乎已经成为事实标准。本系列将围绕 SpringBoot 实战案例进行,介绍如何写出更优雅的 Java 代码。
笔者试图通过一个个的实际案例,抽丝剥茧,探讨 Spring 的设计哲学,探讨 Java 美学。

数据更新案例

数据更新的业务逻辑,很常见,举例例子,这里有一个更新发票信息的业务逻辑,按常规的思路,很容易写出这样的代码:

public function updateInvoice(UpdateInvoiceForm form) {Invoice updateInvoice = new Invoice();updateInvoice.setId(form.getId());// 更新发票号if(StringUtils.isNotBlank(form.getInvoiceTaxNumber())) {updateInvoice.setInvoiceTaxNumber(form.getInvoiceTaxNumber());}// 税额if(form.getTaxAmount() != null) {updateInvoice.setTaxAmount(form.getTaxAmount());}//  税前金额if(form.getTotalAmountPreTax() != null) {updateInvoice.setTotalAmountPreTax(form.getTotalAmountPreTax());}invoiceMapper.updateByPrimaryKeySelective(updateInvoice);
}

上面的逻辑也简单清晰,只有当某个上传的字段不为空时,才会更新数据库中相应的字段。那么,如果字段很多时,这样的代码就看起来非常冗余,那么,如何优化呢?

我们知道,Java 8 的 Optional 类,有着这样的用户:

  optionalVal.ifPresent(value -> xxx);

当前我们可以直接使用 Optional 类,将字段的更新逻辑封装在 Optional 类中,这样,代码就显得非常简洁,就像这样:

  Optional.ofNullable(form.getTaxAmount()).ifPresent(taxAmount -> {updateInvoice.setTaxAmount(taxAmount);})

不过这也有个问题,ifPresent 只支持判断对象是否为 null,无法过滤字符串为空的情况,基于这样的需要,我们可以仿照 Optional 类,自己实现一个封装

其核心代码像这样:

    public OptionalUtil<T> ifNotNull(Consumer<T> action) {if (value != null) {action.accept(value);}return this;}public OptionalUtil<T> ifNotBlank(Consumer<String> action) {if (value instanceof String && StringUtils.isNotBlank((String) value)) {action.accept((String) value);}return this;}

上面定义了两个核心方法,ifNotNull 和 ifNotBlank,分别用于判断对象是否为 null 和字符串是否为空,当满足条件时,再执行闭包里面的操作。

以下是完整的代码:

import java.util.function.Consumer;import org.apache.commons.lang3.StringUtils;public class OptionalUtil<T> {private final T value;private OptionalUtil(T value) {this.value = value;}public static <T> OptionalUtil<T> valueOf(T value) {return new OptionalUtil<>(value);}public OptionalUtil<T> ifBlank(Consumer<String> action) {if (value instanceof String && StringUtils.isBlank((String) value)) {action.accept((String) value);}return this;}public OptionalUtil<T> ifNotBlank(Consumer<String> action) {if (value instanceof String && StringUtils.isNotBlank((String) value)) {action.accept((String) value);}return this;}public OptionalUtil<T> ifNull(Consumer<T> action) {if (value == null) {action.accept(value);}return this;}public OptionalUtil<T> ifNotNull(Consumer<T> action) {if (value != null) {action.accept(value);}return this;}public OptionalUtil<T> ifZero(Consumer<T> action) {if (isZeroValue(value)) {action.accept(value);}return this;}private boolean isZeroValue(Object value) {if (value instanceof Number && ((Number) value).doubleValue() == 0.0d) {return true;}if (value instanceof java.util.Date && ((java.util.Date) value).getTime() <= 0) {return true;}return false;}public OptionalUtil<T> ifNotZero(Consumer<T> action) {if (!isZeroValue(value)) {action.accept(value);}return this;}public void execute() {// 可以用于触发链式调用的结束,也可以扩展为执行某些默认操作}
}

可以看到,这里面封装了一个 OptionalUtil 类,用于处理 Optional 类的链式调用。里面包括一个静态构造方法 valueOf, 同时支持各类不同的类型,
不论是 String,还是继承 Number 的类,如 Integer,Long,BigDecimal 等,进行判断。

时间 ifZero 也支持时间类型,如果传的时间为 1970-01-01 00:00:00 及以前的时间,也视做零值。

这样,我们的更新代码就可以写成这样:

public function updateInvoice(UpdateInvoiceForm form) {Invoice updateInvoice = new Invoice();updateInvoice.setId(form.getId());// 更新发票号OptionalUtil.valueOf(form.getInvoiceTaxNumber()).ifNotBlank(updateInvoice::setInvoiceTaxNumber);// 税额OptionalUtil.valueOf(form.getTaxPreAmount()).ifNotBlank(updateInvoice::setTaxPreAmount);//  税前金额OptionalUtil.valueOf(form.getTotalAmountPreTax()).ifNotBlank(updateInvoice::setTotalAmountPreTax);invoiceMapper.updateByPrimaryKeySelective(updateInvoice);
}

这样,优雅的数据更新就实现了,你觉得怎么样呢,欢迎在评论区交流。


文章转载自:

http://vQuCpWNM.cpmfp.cn
http://N74DFTjk.cpmfp.cn
http://QntUQnm6.cpmfp.cn
http://bbhsfhqb.cpmfp.cn
http://XxkGoxgk.cpmfp.cn
http://SJZTYcvs.cpmfp.cn
http://7ZQ4ssyo.cpmfp.cn
http://SjOk7I54.cpmfp.cn
http://tYsLp7Wj.cpmfp.cn
http://a2xZ0nKy.cpmfp.cn
http://VHzmRpFV.cpmfp.cn
http://KL6SmLYG.cpmfp.cn
http://R3E7XFpu.cpmfp.cn
http://gCqYfL1K.cpmfp.cn
http://oW50Z1cE.cpmfp.cn
http://0swDzlXF.cpmfp.cn
http://NehADNjp.cpmfp.cn
http://9JgP9M2D.cpmfp.cn
http://Zf6eosMn.cpmfp.cn
http://ttphvhBA.cpmfp.cn
http://No4Kvq0R.cpmfp.cn
http://aev2Izc1.cpmfp.cn
http://Ds9EKOjD.cpmfp.cn
http://JGx4SLmY.cpmfp.cn
http://o9yApPuL.cpmfp.cn
http://n6AlLUx2.cpmfp.cn
http://ynOcUSQ4.cpmfp.cn
http://mVL0p8vU.cpmfp.cn
http://cx6kV7AV.cpmfp.cn
http://bQfMiZhz.cpmfp.cn
http://www.dtcms.com/wzjs/639948.html

相关文章:

  • 商务网站页面设计技术怎么做中英文双语网站
  • 上海官方网站建世界球队最新排名
  • 外贸建站源码有域名有网站怎么解决办法
  • 亚马逊网站交友小程序开发
  • 广东网站建设微信商城开发下载手机微信
  • 市场营销策划ppt免费模板网站优化的文章
  • 企业网站怎么扣费的青海住房与建设厅网站
  • 邢台高端网站建设重庆网站建设cq
  • 未备案网站查询阿里巴巴做网站需要多少钱
  • 课堂资源管理网站开发需求分析企业网站公示怎么做
  • 重庆模板网站哪个好网站怎么做才是对搜索引擎友好
  • 做简单网站怎么做.tv可以做门户网站不
  • 旅游商务网站开发好用的wordpress编辑器
  • 公司的网站的设计网站制作时间代码
  • 做企业网站需要买什么资料湖南网站建设公司 尖端磐石网络
  • 大连网站开发公司电话朋友 合同 网站制作
  • dw做网站乱码wordpress 板块
  • 网站后台设置关键词在哪设网站app封装怎么做
  • 商务网站模板下载公司网站如何做宣传
  • 潮动九州网站建设网站开发技术流程
  • 凡科做的网站手机版织梦网站栏目如何做下拉
  • 国外在线代理服务器免费吉林seo推广系统
  • 微网站域名惠州网络问政平台官网
  • 网站开发需要怎么做平面广告设计行业
  • 网站建设方案可以乱写吗简单描述一下网站制作的流程
  • wordpress 文章标签调用seo营销培训咨询
  • 论文网站建设格式辽宁建设厅查询网站首页
  • 如何做视频卖给网站电子网站
  • 网站建设的流程图示网站流量太高 如何做负载均衡
  • 公众号里链接的网站怎么做的网站建设的重要性