MongoDB学习

news2024/11/24 7:20:07

文章目录

  • 前言
  • 0 MongoDB和Redis区别
  • 1 简介MongoDB
  • 2 MongoDB的安装(需要使用Docker)
  • 3 MongoDB 概念解析
    • 3.1 数据库
    • 3 .2 文档
    • 3.3 集合
    • 3.4 MongoDB 数据类型
    • 3.5适用场景
  • 4 常用操作
    • 4.1 INSERT
    • 4.2 Query
    • 4.3 Update
    • 4.4 Remove
    • 4.5 aggregate
    • 4.6 索引
  • 5 整合Springboot使用
    • 5.1 导入依赖
    • 5.2 配置文件
    • 5.3 配置实体类 实体类绑定表
    • 5.4 配置模板操作
      • 5.4.1 如果使用mongoDBTemplate
      • 5.4.1 如果使用mongoDBReposity


前言

MongoDB学习


0 MongoDB和Redis区别

Redis和MongoDB是两种不同的数据库类型,它们在设计目标、数据模型、性能和使用场景上有很大的差异。

Redis是一种基于内存的键值存储数据库,支持高性能读写和支持数据持久化。它通常用于缓存、消息队列、实时分析等应用场景。

MongoDB是一种文档型数据库,支持高性能读写和分布式部署。它通常用于大规模数据存储、查询和分析。

总的来说,Redis更适合高性能场景,MongoDB更适合大规模数据存储和分析。

1 简介MongoDB

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统;在高负载的情况下,添加更多的节点,可以保证服务器性能

可以做缓存,非常适合集群伸缩扩展,适合应对海量数据的读写
由于其文档形式,非常适合存取JSON数据
可以执行简单的查询,但对连表查询不支持

SQL术语/概念	MongoDB术语/概念	解释/说明
database	database	数据库
table	    collection	数据库表/集合
row	        document	数据记录行/文档
column	    field	数据字段/域
index	    index	索引
table       joins	 	表连接,MongoDB不支持
primary key	primary key	主键,MongoDB自动将_id字段设置为主键

在这里插入图片描述

2 MongoDB的安装(需要使用Docker)

#拉取镜像 
docker pull mongo:latest

#创建和启动容器 
docker run -d --restart=always -p 27017:27017 --name mymongo -v /data/db:/data/db -d mongo

#进入容器 
docker exec -it mymongo /bin/bash 

#使用MongoDB客户端进行操作 
mongo 

> show dbs #查询所有的数据库 
admin 0.000GB 
config 0.000GB 
local 0.000GB 

3 MongoDB 概念解析

下表将帮助您更容易理解Mongo中的一些概念:

SQL术语/概念	MongoDB术语/概念	解释/说明
database	database	数据库
table	    collection	数据库表/集合
row	        document	数据记录行/文档
column	    field	数据字段/域
index	    index	索引
table       joins	 	表连接,MongoDB不支持
primary key	primary key	主键,MongoDB自动将_id字段设置为主键

通过下图实例,我们也可以更直观的的了解Mongo中的一些概念:
在这里插入图片描述

3.1 数据库

一个mongodb中可以建立多个数据库

常用操作:
1、 Help查看命令提示 
db.help();
2、 切换/创建数据库
use test
如果数据库不存在,则创建数据库,否则切换到指定数据库
3、 查询所有数据库 
show dbs;
4、 删除当前使用数据库 
db.dropDatabase();
5、 查看当前使用的数据库 
db.getName();
6、 显示当前db状态 
db.stats();
7、 当前db版本 
db.version();
8、 查看当前db的链接机器地址 
db.getMongo〇;

3 .2 文档

文档是一组键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
下表列出了 RDBMS 与 MongoDB 对应的术语:

RDBMS	MongoDB
数据库	数据库
表格   	集合
行	    文档
列	     字段
表联合	嵌入文档
主键	     主键 (MongoDB 提供了 key 为 _id )

需要注意的是:

1、文档中的键/值对是有序的。
2、文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
3、MongoDB区分类型和大小写。
4、MongoDB的文档不能有重复的键。
5、文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
文档键命名规范:
1、键不能含有\0 (空字符)。这个字符用来表示键的结尾。
2、.和$有特别的意义,只有在特定环境下才能使用。
3、以下划线"_"开头的键是保留的(不是严格要求的)。

3.3 集合

集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。
集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。

常用命令:
1、 创建一个集合(table)
db.createCollection( "collName");
2、 得到指定名称的集合(table )
db.getCollection("user");

3.4 MongoDB 数据类型

下表为MongoDB中常用的几种数据类型:

数据类型	描述
String	字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
Integer	整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
Boolean	布尔值。用于存储布尔值(真/假)。
Double	双精度浮点值。用于存储浮点值。
Min/Max keys	将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
Arrays	用于将数组或列表或多个值存储为一个键。
Timestamp	时间戳。记录文档修改或添加的具体时间。
Object	用于内嵌文档。
Null	用于创建空值。
Symbol	符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
Date	日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
Object ID	对象 ID。用于创建文档的 ID。
Binary Data	二进制数据。用于存储二进制数据。
Code	代码类型。用于在文档中存储 JavaScript 代码。
Regular expression	正则表达式类型。用于存储正则表达式。

3.5适用场景

适用场景
1、网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
2、缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由M ongo搭建的持久化缓存层可以避免下层的数据源过载。
3、大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵, 在此之前,很多时候程序员往往会选择传统的文件进行存储。
4、高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对Map Reduce弓摩的内置支持。
5、用于对象及 JSON数据的存储:Mongo的BSON数据格式非常适合文档化格式的存储 及查询。
不适用场合
1、高度事务性的系统:例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。
2、传统的商业智能应用:针对特定问题的BI数据库会对产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。

4 常用操作

4.1 INSERT

> db.User.save({name:'zhangsan',age:21,sex:true})
> db.User.find()
{"_id": Objectld("4f69e680c9106ee2ec95da66"), "name": "zhangsan", "age": 21,
"sex": true}

Objectld 是生成的 规则如下

_id组合
Objectld是、id”的默认类型。Objectld使用12字节的存储空间,每个字节二位十六进制数字, 是一个24位的字符串
 
1. 时间戳:时间不断变化的
2. 机器:主机的唯_标识码。通常是机器主机名的散列值,这样可以确保不同主机 
生成不同的Objectld ,不产生冲突。
3. PID:为了确保在同一台机器上并发的多个进程产生的Objectld是唯一的,
所以加上进程标识符(PID).
4. 计数器:前9个字节保证了同一秒钟不同机器不同进程产生的Objectld是唯一的。 
后3个字节就是一个自动增加的计数器,确保相同进程同一秒产生的Objectld也是 
不一样。同一秒最多允许每个进程拥有IS 777 2托个不同的Objectld。

4.2 Query

1、WHERE
# select * from User where name = 'zhangsan'
> db.User.find({name:"zhangsan"})

2、FIELDS
# select name, age from User where age = 21
> db.User.find({age:21}, {'name':1, 'age':1})

3、SORT
在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1-1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
# select * from User order by age
> db.User.find().sort({age:1})

4、SUCE
在 MongoDB 中使用 limit()方法来读取指定数量的数据,skip()方法来跳过指定数量的数据
# select * from User skip 2 limit 3
> db.User.find().skip(0).limit(3)

5、IN
# select * from User where age in (21, 26, 32)
> db.User.find({age:{$in:[21,26,32]}})

6、COUNT
# select count(*) from User where age >20
> db.User.find({age:{$gt:20}}).count()

70R
# select * from User where age = 21 or age = 28
> db.User.find({$or:[{age:21}, {age:28}]})

4.3 Update

可直接用类似T-SQL条件表达式更新,或用SaveO更新从数据库返回到文档对象。

# update Userset age = 100, sex = 0 where name = 'user1'
> db.User.update({name:"zhangsan"}, {$set:{age:100, sex:0}})

Update()有几个参数需要注意。
db.collection.update(criteria, objNew, upsert, mult)
criteria:需要更新的条件表达式
objNew:更新表达式
upsert:如FI标记录不存在,是否插入新文档。 
multi:是否更新多个文档。

4.4 Remove

removeO用于删除单个或全部文档,删除后的文档无法恢复。

> db.User.remove(id)
//移除对应id的行
> db.User.remove({})
//移除所有

4.5 aggregate

MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)

1.5.1 插入数据
>db.article.insert({
    title: 'MongoDB Overview', 
   description: 'MongoDB is no sql database',
   by_user: 'runoob.com',
   url: 'http://www.runoob.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100
})
>db.article.insert({
   title: 'NoSQL Overview', 
   description: 'No sql database is very fast',
   by_user: 'runoob.com',
   url: 'http://www.runoob.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 10
})
>db.article.insert({
   title: 'Neo4j Overview', 
   description: 'Neo4j is no sql database',
   by_user: 'Neo4j',
   url: 'http://www.neo4j.com',
   tags: ['neo4j', 'database', 'NoSQL'],
   likes: 750
})
2.5.2 统计sum
现在我们通过以上集合计算每个作者所写的文章数
# select by_user, count(*) from article group by by_user
> db.article.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])

{
"result" : [
      {
"_id" : "runoob.com",
"num_tutorial" : 2
      },
      {
"_id" : "Neo4j",
"num_tutorial" : 1
      }
   ],
"ok" : 1
}

在上面的例子中,我们通过字段 by_user 字段对数据进行分组,并计算 by_user 字段相同值的总和。
2.5.3 常见的聚合表达式
表达式	描述	实例
$sum	计算总和。	db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg	计算平均值	db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min	获取集合中所有文档对应值得最小值。	db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max	获取集合中所有文档对应值得最大值。	db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push	在结果文档中插入值到一个数组中。	db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet	在结果文档中插入值到一个数组中,但不创建副本。	db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first	根据资源文档的排序获取第一个文档数据。	db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last	根据资源文档的排序获取最后一个文档数据	db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])

4.6 索引

索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。
这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。
索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。

db.User.createIndex({“name”:1})

语法中 name值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可

5 整合Springboot使用

5.1 导入依赖

<dependencies>

<!--        mongoDB 无论是mongoDBTemplate 或者 mongoDBReposity 的方式都需要这个依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

<!--日期相关-->
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.10.1</version>
        </dependency>


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

<!--        lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

<!--单元测试-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

5.2 配置文件

我这里是properties文件 伙计们
用yaml随你们

# 应用服务 WEB 访问端口
server.port=8083

# /test是使用test数据库
spring.data.mongodb.uri=mongodb://139.xxxxxx.7:27017/test

5.3 配置实体类 实体类绑定表

因为数据库的绑定已经写在配置文件中

@Data
//其实这个是collection 也就是绑定表 和@TABLE一样   实体类和表绑定
@Document("TeaCher")
public class TeaCher {
    @Id
    private String id;
    private String name;
    private Integer age;
    private String email;
    private String createDate;
}

5.4 配置模板操作

两种方式(使用 mongoDBTemplate 或者 mongoDBReposity)
两种方式的操作语法不同
而且因为mongoDBReposity 先写个 接口
这个接口绑定了 实体类 实体类绑定了 表
因此通过mongoDBReposity 方式查 不需要说明是哪个表

5.4.1 如果使用mongoDBTemplate

直接@Autowired 注入模板使用即可

@SpringBootTest
class TestMongoDbApplicationTests {

    @Test
    void contextLoads() {
    }

    @Autowired
    private MongoTemplate mongoTemplate;

    //添加
    @Test
    public void createUser() {
        TeaCher user = new TeaCher();
        user.setAge(20);
        user.setName("test");
        user.setEmail("4932200@qq.com");
        TeaCher user1 = mongoTemplate.insert(user);
        System.out.println(user1);
    }


}

5.4.1 如果使用mongoDBReposity

首先配置一个接口

package com.example.testmongodb.demos.inter;

import com.example.testmongodb.demos.entity.TeaCher;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends MongoRepository<TeaCher, String> {

}

然后跟mongoDBTemplate 一样@Autowired注入使用

    @Autowired
    private UserRepository userRepository;



    //添加
    @Test
    public void Repository() {
        TeaCher user = new TeaCher();

        user.setAge(20);
        user.setName("张三");
        user.setEmail("3332200@qq.com");

        TeaCher user1 = userRepository.save(user);
        System.out.println(user1);

    }

这篇博客参考硅谷文档编写

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

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

相关文章

多比特信号跨时钟域同步处理

多比特信号跨时钟域同步处理 当在时钟域之间传递多比特数据时&#xff0c;普通的同步器并不能保证数据传递的安全性。在多时钟设计中&#xff0c;工程师往往容易犯一个错误&#xff0c;即同一事务处理含有需要从一个时钟域向另一个时钟域传递的多位跨时钟数据,并忽略了同步采样…

腾讯云物联网开发平台 LoRaWAN 透传接入 更新版

前言 之前有一篇文章介绍LoRaWAN透传数据&#xff0c;不过还是用物模型云端数据解析脚本&#xff0c;不是真正的透传。腾讯云物联网开发平台也支持对LoRaWAN原始数据的透传、转发。今天来介绍下。腾讯云 IoT Explorer 是腾讯云主推的一站式物联网开发平台&#xff0c;IoT 小能手…

大话数据结构-C(1)

一&#xff1a;数据结构绪论 1.1 数据&#xff1a; 描述客观事物的符号&#xff0c;计算机中可以操作的对象&#xff0c;能被计算机识别并输入给计算机处理的符号集合。 1.2 数据元素 是组成数据的、有一定意义的基本单位&#xff0c;在计算机中通常作为整体处理。也被称为记…

Linux系统如何设置开机自启脚本

Linux系统开启自启脚本的配置&#xff0c;我这里记录了三种办法&#xff0c;对于绝大多数linux系统&#xff0c;这三种方法里肯定有合适的。 1. 设置/etc/rc.local文件 /etc/rc.local文件是 /etc/rc.d/rc.local文件的软连接&#xff0c;rc.local文件本质上就是一个shell脚本 …

电商TO B背后:谁在重构产业带?

在这盘产业带大旗里&#xff0c;京东、淘宝、拼多多正在成为鲜活的新注解。 作者|思杭 编辑|皮爷 出品|产业家 有一座城&#xff0c;这里的百姓在40年前靠“鸡毛换糖”起家&#xff0c;他们聚集了全国各地的商品&#xff0c;再转卖出去。这样一来&#xff0c;就形成了销路…

金三银四最近一次面试,被阿里P8测开虐惨了.....

都说金三银四涨薪季&#xff0c;我是着急忙慌的准备简历——5年软件测试经验&#xff0c;可独立测试大型产品项目&#xff0c;熟悉项目测试流程...薪资要求&#xff1f;5年测试经验起码能要个20K吧 我加班肝了一页半简历&#xff0c;投出去一周&#xff0c;面试电话倒是不少&a…

itop-3568开发板驱动学习笔记(17)内核中断

《【北京迅为】itop-3568开发板驱动开发指南.pdf》 学习笔记 文章目录中断基础中断中断上下文中断号中断源类型内核中断 API获取中断号中断申请释放中断禁止中断使能中断实验程序中断基础 中断 CPU 在正常运行期间&#xff0c;由外部或者内部引起的事件&#xff0c;让 CPU 停下…

研报精选230411

目录 【行业230411华安证券】智能家居行业深度&#xff1a;ChatGPT等大模型催化智能家居行业进一步发展【行业230411信达证券】食品饮料行业2023年第12周周报&#xff1a;从当前时间点看今年液奶的投资机会【行业230411东方财富证券】食品饮料行业专题研究&#xff1a;BC两端需…

2023年信息安全推荐证书

随着网络安全行业的不断升温&#xff0c;相关的认证数量也不断增加&#xff0c;对于在网络安全行业发展的人才来说&#xff0c;提升职业竞争力最有效的办法之一&#xff0c;就是取得权威认证。 那么如何从繁多的适合网络安全从业者的证书中选择含金量高、发展潜力大的证书&…

Java分布式事务(七)

文章目录 🔥Seata提供XA模式实现分布式事务_业务说明🔥Seata提供XA模式实现分布式事务_下载启动Seata服务🔥Seata提供XA模式实现分布式事务_搭建聚合父工程构建🔥Seata提供XA模式实现分布式事务_转账功能实现上🔥Seata提供XA模式实现分布式事务_转账功能实现下🔥Se…

什么是车规级芯片?

目录 1、AEC-Q系列标准 2、ISO26262功能安全标准 芯片按照应用场景&#xff0c;通常可以分为消费级、工业级、车规级和军工级四个等级&#xff0c;其要求依次为&#xff1a;军工>车规>工业>消费。 车规级芯片&#xff0c;顾名思义&#xff0c;是应用到汽车中的芯片…

GMP调度

目录 A1 基础 协程 映射关系 N:1关系 1:1关系 M:N关系 概念 G M P go协程 GM模型 GMP模型 设计策略 复用线程 并行利用 抢占 全局G队列 "go func()"调度过程 ​编辑 特殊的M0和G0 M0 G0 Go调度器执行过程全解析 场景1 场景2 场景3 场景…

栈实现学生信息管理(C语言)

文章目录Stack.hmain.cStack.c用栈实现学生信息管理。这里放一下有哪些文件。Stack.h #pragma once防止库函数的重复引用&#xff0c;因为库函数会在预编译的时候在程序中展开&#xff0c;会增大程序的体积。   通过typedef对数据重命名&#xff0c;之后需要修改数据就十分方…

C/C++|物联网开发入门+项目实战|C语言基础|玩转c代码---从输入输出开始-学习笔记(6)

文章目录玩转c代码---从输入输出开始参考教程&#xff1a;C语言编程:一本全面的C语言入门教程&#xff08;第3版)第16章需要掌握的内容需要了解的内容常见的人机交互接口串口的输入输出PC常用的几个输入输出函数示例代码3 printf函数使用难点分析A.格式控制字符串的基本形式:示…

【毕业论文】| 基于Unity3D引擎的冒险游戏的设计与实现

&#x1f4e2;博客主页&#xff1a;肩匣与橘 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由肩匣与橘编写&#xff0c;首发于CSDN&#x1f649; &#x1f4e2;生活依旧是美好而又温柔的&#xff0c;你也…

NVIDIA CUDA核函数编写注意事项之In-place

CUDA系列文章目录 文章目录CUDA系列文章目录前言总结参考资料前言 CUDA&#xff08;Compute Unified Device Architecture&#xff0c;统一计算架构&#xff09;是由NVIDIA所推出的一种集成技术&#xff0c;是其对于GPGPU&#xff08;A General-Purpose Graphics Processing U…

【源码解析】JDK 动态代理实现

基本流程 主方法 在该方法中&#xff0c;我们呈现了在日常使用 JDK 动态代理机制的方法。 public class VehicleDynamicProxy { /** * 被代理对象 */ public Vehicle targetVehicle; public VehicleDynamicProxy(Vehicle targetVehicle) { this.targetVehicle target…

注册中心要集成 SpringCloud实现负载均衡,需要哪些接口和规范?

前几天有个大兄弟问了我一个问题&#xff0c;注册中心要集成SpringCloud&#xff0c;想实现SpringCloud的负载均衡&#xff0c;需要实现哪些接口和规范。 既然这个兄弟问到我了&#xff0c;而我又刚好知道&#xff0c;这不得好好写一篇文章来回答这个问题&#xff0c;虽然在后面…

Omniverse Extensions Command 写在其他.py 文件内 导致找不到Command 无法运行 不生效 的解决方案

提要&#xff1a; Command扩展不在extension.py内 例如我的Command&#xff1a;ScatterCreatePointInstancerCommandLJ 在 commands.py 内 然后使用时报错&#xff1a; 2023-04-10 18:16:11 [Error] [omni.kit.commands.command] Cant execute command: "ScatterCreat…

基于springboot和ajax的简单项目 05 日志界面的查找功能

01.这个是基于input标签的查找功能。 02.修改更新table标签的函数&#xff0c;把username这个参数&#xff0c;加到getjson函数的params中&#xff0c;实现依靠username来查询数据。 var username$("#searchNameId").val();//如下语句的含义是什么&#xff1f;动态在…