使用Spring Boot和MongoDB快速进行Web应用原型设计

回到我以前的项目之一,我被要求制作一些应急申请。 时间表紧张,范围简单。 内部编码标准是PHP,因此尝试建立经典的Java EE堆栈将是一个真正的挑战。 而且,说实话,完全过大了。 那怎么办 我趁机尝试了Spring。 我以前使用过它,但是在旧版本中,它被隐藏在此时困扰我的门户软件的技术堆栈中。

我的目标是使WebOps可以简单地放在装有Java的服务器上并运行它。 无需摆弄数十种XML配置和内存微调。 就像java -jar application.jar一样容易。
这是“ Spring Boot”的完美呼唤。 这个Spring项目旨在简化开发人员的工作流程,并消除对配置和样板代码的负担。

我的项目渴望的另一件事是面向文档的数据存储。 我的意思是,该应用程序的主要目的是提供现实世界纸质表格的数字版本。 那么,如果我们可以将文档表示为文档,那么为什么要创建关系混乱呢? 我之前在几个小型项目中使用过MongoDB,因此我决定继续使用它。

这和这篇文章有什么关系? 好吧,我将向您展示如何快速整合Web应用程序所需的所有点点滴滴。 Spring Boot将使很多事情变得相当容易,并使代码最少。 最后,您将拥有一个JAR文件,该文件是可执行文件,只需将其拖放到服务器上即可进行部署。 您的WebOps将为此而爱您。

假设我们将要创建下一个大型产品管理Web应用程序。 因为这是下一件大事,所以它需要一个大名字: Productr (这就是我是软件工程师,而不是销售或市场营销的原因……)。
Productr将做令人惊奇的事情,本文将向您展示其早期阶段,这些阶段是:

  • 提供简单的REST界面来查询所有可用产品
  • 从MongoDB加载这些产品
  • 提供生产就绪的监控设施
  • 使用JavaScript UI显示所有产品

您需要开始的全部是:

  • Java 8
  • 马文
  • 您最喜欢的IDE(IntelliJ,Eclipse,vi,edlin,butterfly…)
  • 浏览器(可以,或者是Internet Explorer / MS Edge,但是谁真的想要这个?!)

对于不耐烦的人,该代码也可以在GitHub上获得 。

让我们开始吧

创建具有以下内容的pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.3.0.RELEASE</version></parent><modelVersion>4.0.0</modelVersion><groupId>net.h0lg.tutorials.rapid</groupId><artifactId>rapid-resting</artifactId><version>1.0</version><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

在这几行中,已经发生了很多事情。 最重要的是已定义的父项目。 这将为我们带来许多有用且必要的依赖项,例如日志记录,Tomcat运行时等等。 由于Spring的模块化,所有内容都可以通过pom.xml或依赖项注入进行重新配置。 为了快速启动所有功能,默认设置绝对可以。 (配置公约,有人吗?)

现在,创建强制性的Maven文件夹结构:

mkdir -p src/main/java src/main/resources src/test/java src/test/resources

我们已经解决了。

启动引擎

让我们开始工作。 我们希望提供一个REST接口来访问我们大量的产品。 因此,让我们开始创建在/ api / products下可用的REST集合。 为此,我们必须做一些事情:

  1. 我们需要创建包含有关我们令人难以置信的产品的所有信息的“数据模型”
  2. 我们需要一个提供一种方法的控制器,该方法可以完成GET请求的所有必要操作
  3. 为我们的应用程序创建主入口点

数据模型非常简单并且可以快速完成。 只需创建一个名为demo.model的包和一个名为Product的类。 Product类非常简单:

package demo.model;import java.io.Serializable;/*** Our very important and sophisticated data model*/
public class Product implements Serializable {String productId;String name;String vendor;public String getProductId() {return productId;}public void setProductId(String productId) {this.productId = productId;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getVendor() {return vendor;}public void setVendor(String vendor) {this.vendor = vendor;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Product product = (Product) o;if (getProductId() != null ? !getProductId().equals(product.getProductId()) : product.getProductId() != null)return false;if (getName() != null ? !getName().equals(product.getName()) : product.getName() != null) return false;return !(getVendor() != null ? !getVendor().equals(product.getVendor()) : product.getVendor() != null);}@Overridepublic int hashCode() {int result = getProductId() != null ? getProductId().hashCode() : 0;result = 31 * result + (getName() != null ? getName().hashCode() : 0);result = 31 * result + (getVendor() != null ? getVendor().hashCode() : 0);return result;}
}

我们的产品具有令人难以置信的3个属性:字母数字产品ID,名称和供应商(为简单起见,仅是名称)。 它是可序列化的,并且使用我的IDE的代码生成来实现getter,setter和equals()hashCode()方法。

好的,因此使用一种提供GET侦听器的方法来创建一个控制器。 返回您最喜欢的IDE,并创建包demo.controller和一个名为ProductsController的类,其内容如下:

package demo.controller;import demo.model.Product;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.List;/*** This controller provides the REST methods*/
@RestController
@RequestMapping(value = "/", method = RequestMethod.GET)
public class ProductsController {@RequestMapping(value = "/", method = RequestMethod.GET)public List getProducts() {List products = new ArrayList();return products;}}

这实际上是提供REST接口所需的一切。 好的,此刻返回了一个空列表,但是定义起来很简单。

最后缺少的是我们应用程序的入口点。 只需在程序包演示中创建一个名为Productr的类,然后为其提供以下内容:

package demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** This is the entry point of our application*/
@SpringBootApplication
public class ProductrApplication {public static void main (String... opts) {SpringApplication.run(ProductrApplication.class, opts);}}

Spring Boot为我们节省了许多按键操作。 无论如何,@SpringBootApplication会完成我们每个Web应用程序所需的一些操作。 该注释是以下注释的简写:

  • @组态
  • @EnableAutoConfiguration
  • @ComponentScan

现在是时候第一次启动我们的应用程序了。 借助我们在pom.xml中配置的Spring Boot的maven插件,启动该应用程序非常简单: mvn spring-boot:run 。 只需在项目根目录中运行此命令即可。 您更喜欢IDE提供的惰性N键单击方式? 好的,只需指示您喜欢的IDE运行ProductrApplication即可

一旦启动,请使用浏览器,REST客户端(您应该签出Postman ,我喜欢这个工具)或诸如curl的命令行工具。 您要查找的地址是: http:// localhost:8080 / api / products / 。 因此,使用curl ,命令如下所示:

curl http://localhost:8080/api/products/

请提供资料

好的,返回一个空列表不是很闪亮,是吗? 因此,让我们引入数据。 在许多项目中,经典的关系数据库通常会显得过大(如果必须使用它并进行横向扩展,则会很痛苦)。 这可能是NoSQL数据库被大肆宣传的原因之一。 一个(在我看来很好)的例子是MongoDB。

启动和运行MongoDB非常简单。 在Linux上,您可以使用软件包管理器进行安装。 例如,对于Debian / Ubuntu,只需执行: sudo apt-get install mongodb

对于Mac,最简单的方法是自制软件brew install mongodb并按照“注意事项”部分中的说明进行操作。

Windows用户应使用MongoDB安装程序(和toi toi toi)。

好吧,我们只是对数据存储进行了排序。 现在是时候使用它了。 有一个特定的Spring项目处理数据–称为Spring Data 。 碰巧的是,一个名为Spring Data MongoDB的子项目正等着我们。 甚至更多,Spring Boot提供了一个依赖包,可以立即加快速度。 难怪pom.xml<dependencies>部分中的以下几行足以引入我们需要的所有内容:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

现在,创建一个名为demo.domain的新包,并放入一个名为ProductRepository的新接口。 Spring提供了一种非常简洁的方法来摆脱编写与数据源交互通常所需的代码。 大多数基本查询都是由Spring Data生成的-您只需要定义一个接口即可。 甚至没有指定方法标题就可以使用几个查询方法。 一个示例是findAll()方法,该方法将返回集合中的所有条目。
但是,让我们看看它在起作用,而不是在谈论它。 定制的ProductRepository接口应如下所示:

package demo.domain;import demo.model.Product;
import org.springframework.data.mongodb.repository.MongoRepository;/*** This interface lets Spring generate a whole Repository implementation for* Products.*/
public interface ProductRepository extends MongoRepository {}

接下来,在同一包中创建一个名为ProductService的类。 此类的目的是实际提供一些用于查询产品的有用方法。 现在,代码就像这样简单:

package demo.domain;import demo.model.Product;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;/*** This is a little service class we will let Spring inject later.*/
@Service
public class ProductService {@Autowiredprivate ProductRepository repository;public List getProducts() {return repository.findAll();}}

看看我们如何在没有在接口中定义的情况下使用repository.findAll() ? 很漂亮,不是吗? 尤其是在您急于需要快速起床的情况下。

好了,到目前为止,我们已经为数据访问奠定了基础。 我认为是时候将它们连接在一起了。 为此,只需回到我们的类demo.controller.ProductsController并稍加修改即可。 我们要做的就是注入我们闪亮的新ProductService服务并调用其getProducts()方法。 之后,该类将如下所示:

package demo.controller;import demo.domain.ProductService;
import demo.model.Product;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.List;/*** This controller provides the REST methods*/
@RestController
@RequestMapping("/api/products/")
public class ProductsController {// Let Spring DI inject the service for us@Autowiredprivate ProductService productService;@RequestMapping(value = "/", method = RequestMethod.GET)public List getProducts() {// Ask the data store for a list of productsreturn productService.getProducts();}}

而已。 启动MongoDB(如果尚未运行),再次启动我们的应用程序(还记得mvn spring-boot:run whaty ?!),并向http:// localhost:8080 / api / products /发起另一个GET请求:

$ curl http://localhost:8080/api/products/
[]

等等,还是一个空名单? 是的,或者您还记得我们将任何内容放入数据库吗? 让我们使用以下命令来更改它:

mongo localhost/test --eval "db.product.insert({productId: 'a1234', name: 'Our First Product', vendor: 'ACME'})"

这会将一个名为“我们的第一个产品”的产品添加到我们的数据库中。 好的,我们的服务现在返回什么? 这个:

$ curl http://localhost:8080/api/products/
[{"productId":"5657654426ed9d921affc3c0","name":"Our First Product","vendor":"ACME"}]

很简单,不是吗?

寻找更多数据却没有时间自己创建? 好了,快到圣诞节了,所以请选择我的一些小测试:

curl https://gist.githubusercontent.com/daincredibleholg/f8667a26ce2f17776903/raw/ed9b4c8ec6c9c455dc063e833af2418648928ba6/quick-web-app-product-example.json | mongoimport -d test -c product --jsonArray

基本要求唾手可得

在当今繁忙的日子里,随着“微服务”文化的传播,关注服务器或云环境上实际运行的内容变得越来越困难。 因此,在过去几年中,我在几乎所有环境中进行监控都是一件大事。 一种常见的模式是提供运行状况检查端点。 从简单的ping端点到运行状况指标,您可以找到所有内容,并返回与业务相关的指标的详细概述。 所有这些在大多数情况下都是“复制粘贴”冒险,涉及处理许多样板代码。 这是我们要做的–只需将以下依赖项添加到pom.xml中:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

并重新启动服务。 让我们看看如果查询http:// localhost:8080 / health会发生什么:

$ curl http://localhost:8080/health
{"status":"UP","diskSpace":{"status":"UP","total":499088621568,"free":83261571072,"threshold":10485760},"mongo":{"status":"UP","version":"3.0.7"}}

这应该为基本的健康检查提供足够的数据。 如果遵循启动日志消息,则可能会发现许多其他端点。 尝试一下,然后查看执行器文档以获取更多信息。

给我看看

好的,我们获得了REST服务和一些数据。 但是我们想将这些数据显示给我们的用户。 因此,让我们继续并提供一个页面,其中概述了我们的出色产品。

感谢圣诞老人,这里有一个非常活跃的Web UI社区,致力于处理漂亮,易用的前端框架和库。 一个很受欢迎的例子是Bootstrap 。 它易于使用,并且所有所需的点点滴滴都通过开放的CDN提供。

我们希望对我们的产品有一个简短的概述,所以表格视图会很不错。 Bootstrap Table将帮助我们实现这一目标。 它建立在Bootstrap之上,也可以通过CDN使用。 我们生活在一个怎样的世界里……

但是,等等,将我们HTML文件放在哪里? Spring Boot再次使它变得容易。 只需创建一个名为src / main / resources / static的文件夹,并创建一个具有以下内容的名为index.html的新HTML文件:

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Productr</title><!-- Import Bootstrap CSS from CDNs --><link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/bootstrap-table/1.9.1/bootstrap-table.min.css">
</head>
<body>
<nav class="navbar navbar-inverse"><div class="container"><div class="navbar-header"><button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a class="navbar-brand" href="#">Productr</a></div><div id="navbar" class="collapse navbar-collapse"><ul class="nav navbar-nav"><li class="active"><a href="#">Home</a></li><li><a href="#about">About</a></li><li><a href="#contact">Contact</a></li></ul></div><!--/.nav-collapse --></div>
</nav><div class="container"><table data-toggle="table" data-url="/api/products/"><thead><tr><th data-field="productId">Product Reference</th><th data-field="name">Name</th><th data-field="vendor">Vendor</th></tr></thead></table></div><!-- Import Bootstrap, Bootstrap Table and JQuery JS from CDNs --><script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script><script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script><script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-table/1.9.1/bootstrap-table.min.js"></script>
</body>
</html>

这个文件不是很复杂。 它只是一个HTML文件,其中包括CDN中最小化CSS文件。 如果您第一次看到类似//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css之类的引用,那么协议(http或https)丢失就是一个不错的错误。 以这种方式引用的资源将通过与加载主页相同的协议进行加载。 说,如果您使用http:// localhost:8080 / ,它将使用http:加载CSS文件。

<body>块包含一个导航栏(使用HTML5 <nav>标记)和一个表。 该表定义的有趣部分是提供的data-url属性。 Bootstrap表将其解释为加载数据。 我们的定义指向我们先前创建的REST端点。 通过<th>定义上的data-field属性定义在哪一列中使用JSON对象的哪一部分。 您可以找到匹配的属性名称吗?

最后但并非最不重要的一点是,我们加载了所需JavaScript库。 所有与Bootstrap相关JavaScript功能都需要JQuery,因此这是第一个要加载的库。 紧随其后的是主要的Bootstrap和Bootstrap Table JavaScript文件。 这些库文件中的每个文件均以最小化版本加载,以使下载时间保持最少。

现在去哪里

可以说我们现在有一个非常简单的Web应用程序。 好吧,本文的主要目的是向您展示如何以尽可能少的代码来加快速度。 您已经看到,有时POM文件中的依赖项为您带来了一项全新的功能,而无需任何其他代码。 退后一步,看看到目前为止我们已经建立了什么,然后考虑下一步需要做的事情。 并开始在Spring宇宙中四处看看。

我认为,除了添加缺少的测试之外,接下来需要的最关键的步骤之一就是引入安全性。 查看Spring Security及其子项目Spring Security OAuth 。 对“经典”网页更感兴趣? 查看Spring MVC以及集成非常复杂的模板引擎有多么容易(例如,通过遵循本指南 )。

希望您喜欢这篇文章,也喜欢我喜欢它的创作。 祝大家圣诞快乐,如果一个或另一个想要与您取得联系,您可以在Twitter , G +和LinkedIn上找到我。

翻译自: https://www.javacodegeeks.com/2015/12/quick-web-app-prototyping-spring-boot-mongodb.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355357.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

栈计算机术语,计算机数据结构词汇中英对照

小编为大家整理了计算机数据结构词汇中英对照&#xff0c;希望对你有帮助哦!计算机数据结构词汇中英对照&#xff1a;栈 stack队列 queue串 string数组 array树 tree图 grabh查找&#xff0c;线索 searching更新 updating排序(分类) sorting插入 insertion数据抽象 data abstra…

查询分析器在哪里_你应该知道的3种Node.js分析器类型

Node.js类似于许多其他编码语言&#xff0c;因为它需要与正确的工具结合使用来调试程序&#xff0c;克服任何瓶颈并优化其功能。使用正确的分析器&#xff0c;您可以毫不费力地实现这一目标&#xff0c;尽管它们都不是完美的。在编码中&#xff0c;分析器是一种动态程序分析软件…

Linux 学习重点内容(第二节)

#Linux 学习重点内容 第一天 常用命令 第二天 系统管理 第三天 网络应用 第四天 LAMP产品级环境搭建 第五天 Apache服务器配置 第六天 LNMP快速环境部署-Nginx服务配置 ##目标 具备使用Linux开发能力 服务器简单维护管理 --- ##…

全国计算机一级选择题汇总,全国计算机一级考试选择题训练及答案

全国计算机一级考试选择题训练及答案练习题一1、 将二进制数110B左移一位后其等值的十进制数为()。A、6 B、1100 C、12 D、32、 某微型机的CPU中含有32条地址线、28位数据线及若干条控制信号线&#xff0c;对内存按字节寻址&#xff0c;其最大内存空间是()。A、4MBB、256MBC、2…

python url拼接_教你写python爬虫——用python爬原图

环境&#xff1a;python3.6 pycharm“猎物”&#xff1a;http://www.polayoutu.com &#xff08;仅学习用&#xff09;动机1&#xff1a;想要爬一些尺寸比较大&#xff08;不是尺度&#xff09;的美图养养眼&#xff0c;仅此而已&#xff1b;动机2&#xff1a;学习python爬虫&…

Devoxx的Red Hat Engineers提供了更多Java EE

现在是Devoxx比利时时间&#xff01; 最后。 今天的一切都随着大学会议的开始而开始&#xff0c;会议本身将于明天早晨开始。 我们都非常兴奋&#xff0c;因为这是欧洲的重大事件。 红帽很荣幸今年再次成为赞助商。 我们将在现场举行14次会议&#xff0c;一个展位–提供啤酒&am…

济宁医学院计算机专业好就业吗,山东这3所医学院实力强,就业率高,中等生可捡漏...

原标题&#xff1a;山东这3所医学院实力强&#xff0c;就业率高&#xff0c;中等生可捡漏山东的医药类院校中&#xff0c;实力较强的是山东大学医学院、青岛大学医学院、山东第一医科大学、山东中医药大学&#xff0c;这4所医学院的录取分数都比较高。今天给大家介绍山东3所二批…

php读取西门子plc_PLC对模拟量信号,是怎么进行处理的?

模拟量信号是自动化过程控制系统中最基本的过程信号(压力、温度、流量等)输入形式。系统中的过程信号通过变送器&#xff0c;将这些检测信号转换为统一的电压、电流信号&#xff0c;并将这些信号实时的传送至控制器(PLC)。PLC通过计算转换&#xff0c;将这些模拟量信号转换为内…

gnutls_handshake() failed: Illegal parameter

gnutls_handshake() failed: Illegal parameter 报错信息如下&#xff1a; fatal: unable to access https://git.xxx.com/xxxx/xxxx.git/: gnutls_handshake() failed: Illegal parameter 背景及原因&#xff1a; 1、系统环境是Ubantu 2、最近变更git使proxy做负载 3、 openss…

计算机一级怎么描述,计算机一级「关于RGB正确的描述的是」相关单选题

1、【题目】关于RGB正确的描述的是选项&#xff1a;A.色光三元色B.印刷用色C.一种专色D.网页用色答案&#xff1a;A解析&#xff1a;暂无解析1、【题目】Photoshop 中利用背景橡皮擦工具擦除图像背景层时&#xff0c;被擦除的区域填充什么颜色?选项&#xff1a;A.黑色B.透明C.…

AFNetworking 3.1.0 使用中某些知识点讲解

# POST / GET 请求 /*! 首先要知道&#xff0c;POST请求不能被缓存&#xff0c;只有 GET 请求能被缓存。因为从数学的角度来讲&#xff0c;GET 的结果是 幂等 的&#xff0c;就好像字典里的 key 与 value 就是幂等的&#xff0c;而 POST 不 幂等 。缓存的思路就是将查询的参数…

Java 8 Streams:过滤和谓词否定

最近&#xff0c;有关LJC 邮件列表的成员在流中.filter方法中使用谓词否定的有趣讨论&#xff0c;因此我认为值得在博客文章中进行总结。 讨论的主题是使用.filter和否定谓词的方法。 这篇文章的代码可以在我的github帐户中找到 。 也许这就是您可能会想到的方式&#xff0c;…

sql server2008如何修改mac地址_如何查看本机的MAC地址和IP地址?

MAC地址是每台电脑或是手机设备中唯一进行识别的编码&#xff0c;IP地址则是路由器分配给电脑或是手机设备联网使用的一个编码。当我们电脑或无法上网&#xff0c;都需要查看IP地址是否正确。那如何查看MAC地址和IP地址呢&#xff1f;方法一&#xff1a;如何电脑已经成功联网了…

计算机工作原理 仿真,虚拟DCS仿真工作原理

虚拟dcs(ViRTUal DCS)是相对于在过程工业系统中运行的真实DCS(Real DCS)而言的&#xff0c;"虚拟DCS"就是将真实DCS在非DCS的计算机系统中以某种形式再现。"虚拟"是现今广泛使用的一种高新技术概念&#xff0c;比如有实现视景模拟的"虚拟现实"、…

poj1062 Bellman 最短路应用

昂贵的聘礼Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 41066 Accepted: 11959Description 年轻的探险家来到了一个印第安部落里。在那里他和酋长的女儿相爱了&#xff0c;于是便向酋长去求亲。酋长要他用10000个金币作为聘礼才答应把女儿嫁给他。探险家拿不出…

vlookup练习_大胆合并吧!VLOOKUP坐字法专做单元格合并查找

回复[目录]学习113篇Excel教程全套Excel视频教程&#xff0c;微信扫码观看编按&#xff1a;前面才讲了Excel家规&#xff0c;数据源表不能有合并单元格&#xff0c;今天就嘚瑟地呼吁“大胆合并”。为何&#xff1f;因为老菜鸟给大家带来了单元格合并查找利器VLOOKUP坐字法查找。…

第一代计算机主要应用领域为数据处理,第一代计算机主要应用领域为____。    A.数据处理 B.人工智能 C.科学计算 D.过程控制...

C、科学计算。一代主要用于科学计算&#xff0c;二代用与数据处理。计算机发明者约翰冯诺依曼。计算机是20世纪最先进的科学技术发明之一&#xff0c;对人类的生产活动和社会活动产生了极其重要的影响&#xff0c;并以强大的生命力飞速发展。它的应用领域从最初的军事科研应用扩…

jaxb 映射 空字段_JAXB和未映射的属性

jaxb 映射 空字段JAXB&#xff08;JSR-222&#xff09;是例外配置&#xff0c;这意味着存在默认映射应用于域对象。 这意味着有时您需要显式排除字段/属性。 在这篇文章中&#xff0c;我将讨论如何使用XmlTransient或XmlAccessorType&#xff08;XmlAccessType.NONE&#xff09…

vscode 书签_10个我必备的 VS code 拓展

推荐&#xff1a;Vue 3中令人激动的新功能&#xff1a;FragmentSuspense多v-modelVS Code是我最喜欢的文本编辑器。它是目前最可扩展的、最流行的代码编辑器。而且令人惊讶的是&#xff0c;它是由微软制作的(我知道)。在我看来&#xff0c;没有任何其他IDE或编辑器能比VS Code更…

u盘显示项目不在计算机zhng,能装在u盘上的操作系统有哪些?

满意答案zhng9211推荐于 2016.08.27采纳率&#xff1a;51% 等级&#xff1a;11已帮助&#xff1a;7556人可装在U盘上的操作系统现在的计算机技术简直日新月异&#xff0c;U盘&#xff0c;固态硬盘等等存储介质做的可以越来越大&#xff0c;并越来越便宜。电脑已经不是稀罕物…