Elasticsearch、Kibana学习

系列文章目录

JavaSE
基础知识、数据类型学习万年历项目代码逻辑训练习题
代码逻辑训练习题方法、数组学习图书管理系统项目
面向对象编程:封装、继承、多态学习封装继承多态习题常用类、包装类、异常处理机制学习
集合学习IO流、多线程学习仓库管理系统JavaSE项目
员工管理系统、多表查询、反射实现DBHelper学习DML、DDL、数据库对象学习
JavaWeb
网络编程、各种标签、CSS学习ECMAScript、BOM学习DOM、jQuery学习
Servlet、JSP、Cookie、Ajax学习融资管理系统JavaWeb项目
框架
MyBatis框架学习逆向工程、Spring框架IOC、AOP学习SpringMVC框架学习
SpringBoot框架学习招聘网站框架项目Vue介绍、窗体内操作、窗体间操作学习
Vue路由配置、网络请求访问框架项目、element组件介绍学习标准管理系统Vue项目
微服务
Linux安装、Nginx反向代理、负载均衡学习Docker学习Jenkins学习
Nexus学习Spring Security学习RabbitMQ学习
Redis学习MongoDB学习Nacos学习
Spring Session学习Spring Gateway学习JSR 303学习
OenFeign学习Dubbo学习Hystrix学习
Sentinel学习JMeter学习Seata学习
jvisualvm学习Sleuth、Zipkin学习Swagger学习
Elasticsearch学习

文章目录

  • 系列文章目录
  • 前言
  • 一、Elasticsearch、Kibana介绍
    • 1. Elasticsearch
    • 2. Elasticsearch特点
    • 3. Kibana
    • 4. Kibana特点
  • 二、Elasticsearch、Kibana安装
    • 1. 下载镜像
    • 2. 创建路径
    • 3. 分配权限
    • 4. 添加访问权限
    • 5. 启动Elasticsearch
    • 6. 访问Elasticsearch
    • 7. 启动Kibana
  • 三、Elasticsearch、Kibana使用
  • 四、Elasticsearch实现
    • 1. 创建Maven项目
    • 2. 导入依赖
    • 3. 创建EsConfig配置类
    • 4. 创建Score实体类
    • 5. 创建Student实体类
    • 6. 创建EsApplication启动类
    • 7. 创建EsTest测试类
    • 8. 创建application.properties配置文件
    • 9. 创建application.yml配置文件
    • 10. 创建bootstrap.yml配置文件
    • 11. 启动虚拟机环境
    • 12. 测试运行
  • 总结


前言

本文我们要讲述:
Elasticsearch;
Kibana
在下攸攸太上,我每次写代码必定是班里最快的。


一、Elasticsearch、Kibana介绍

Elasticsearch和Kibana都是由Elastic公司提供的开源工具,用于处理和可视化数据。

1. Elasticsearch

Elasticsearch是一个基于Lucene的分布式搜索和分析引擎。它被设计用于快速、可扩展地搜索、分析和存储大量数据。

2. Elasticsearch特点

分布式架构:可以水平扩展以处理大规模数据,并提供高可用性和容错性。
实时搜索:支持对数据的实时索引和搜索,适用于实时应用程序和分析场景。
多种数据类型支持:可以处理结构化、半结构化和非结构化数据,包括文本、地理空间数据等。
强大的查询语言:支持复杂的查询和聚合操作,提供灵活的搜索和分析功能。

3. Kibana

Kibana是一个用于数据可视化和管理的开源工具,通常与Elasticsearch配合使用。

4. Kibana特点

数据可视化:提供丰富的图表、地图和仪表板构建功能,用于展示和分析Elasticsearch中的数据。
实时监控:可以实时监控数据、查询性能和系统指标。
用户友好的界面:提供直观的用户界面,使用户可以轻松地创建和定制数据可视化和仪表板。
集成Elastic Stack:与Elasticsearch、Logstash和Beats等工具无缝集成,构建完整的数据处理和可视化解决方案。
总的来说,Elasticsearch和Kibana通常结合使用,Elasticsearch用于存储和分析数据,而Kibana用于可视化和管理这些数据,为用户提供了强大的数据处理和可视化能力。

二、Elasticsearch、Kibana安装

1. 下载镜像

docker pull elasticsearch:7.6.2
docker pull kibana:7.6.2

漫长的等待后:
在这里插入图片描述
在这里插入图片描述

2. 创建路径

创建/usr/local/docker/es路径和其下config和data两个文件夹
在这里插入图片描述

3. 分配权限

cd /usr/local/docker/es/
ll
chmod -R 777 /usr/local/docker/es/
chmod -R 777 /usr/local/docker/es/config
chmod -R 777 /usr/local/docker/es/data

在这里插入图片描述

4. 添加访问权限

echo "http.host: 0.0.0.0" > /usr/local/docker/es/config/elasticsearch.yml

在这里插入图片描述
我们打开elasticsearch.yml进行查看
在这里插入图片描述
写入成功

5. 启动Elasticsearch

docker run --name es -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
-v /usr/local/docker/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /usr/local/docker/es/data:/usr/share/elasticsearch/data \
-v /usr/local/docker/es/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.6.2

在这里插入图片描述

6. 访问Elasticsearch

http://192.168.43.143:9200/
访问网址查看版本信息

{"name" : "d33a8f9523dc","cluster_name" : "elasticsearch","cluster_uuid" : "Gzf3tkYRRyuHlkSiBzkQyA","version" : {"number" : "7.6.2","build_flavor" : "default","build_type" : "docker","build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f","build_date" : "2020-03-26T06:34:37.794943Z","build_snapshot" : false,"lucene_version" : "8.4.0","minimum_wire_compatibility_version" : "6.8.0","minimum_index_compatibility_version" : "6.0.0-beta1"},"tagline" : "You Know, for Search"
}

在这里插入图片描述

7. 启动Kibana

docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.43.143:9200 -p 5601:5601 -d kibana:7.6.2

在这里插入图片描述

三、Elasticsearch、Kibana使用

http://192.168.43.143:5601
可能出现Kibana Is Not Ready Yet字样,无需慌乱,闲暇片刻,喝喝水,溜溜神,回神后再次刷新,即可出现如下界面
在这里插入图片描述
点击上图Try our sample data按钮
在这里插入图片描述
点击左下角【≡+】(哈哈,赛博拟声词!)
在这里插入图片描述
点击Dev Tools,在弹出的页面里点击Dismiss
将如下代码写入左侧文本框

# 增  /student/_doc/1  student是表名,_doc是文档类型的记录,1是主键的值;
POST /student/_doc/1
{"id":"1","name":"张三","age":21,"scoreList":[{"id":"1","name":"数学", "score":95},{"id":"2","name":"语文", "score":98},{"id":"3","name":"外语", "score":90}]
}POST /student/_doc/2
{"id":"2","name":"李四","age":22,"scoreList":[{"id":"4","name":"数学", "score":85},{"id":"5","name":"语文", "score":88},{"id":"6","name":"外语", "score":80}]
}POST /student/_doc/3
{"id":"3","name":"王五","age":23,"scoreList":[{"id":"7","name":"数学", "score":75},{"id":"8","name":"语文", "score":78},{"id":"9","name":"外语", "score":70}]
}# 查
GET /student/_doc/3
# 查所有
GET /student/_search    # 改
PUT /student/_doc/3
{"id":"3","name":"王六","age":26,"scoreList":[{"id":"7","name":"数学", "score":65},{"id":"8","name":"语文", "score":78},{"id":"9","name":"外语", "score":70}]
}# 删
DELETE /student/_doc/3

将鼠标放在第二行会出现两个按钮
点击运行(click to send request)按钮
在这里插入图片描述

四、Elasticsearch实现

1. 创建Maven项目

在这里插入图片描述
项目结构:
在这里插入图片描述

2. 导入依赖

    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.7.RELEASE</version></parent><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.6.13</spring-boot.version><jwt.version>0.7.0</jwt.version><fastjson.version>1.2.60</fastjson.version><spring-cloud-alibaba.version>2.0.3.RELEASE</spring-cloud-alibaba.version><spring-cloud.version>Finchley.SR2</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><exclusions><exclusion><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId></exclusion></exclusions><version>7.6.2</version></dependency><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.6.2</version></dependency><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-web-servlet</artifactId></dependency><!-- feign --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>compile</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--json--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version><scope>compile</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><classifier>exec</classifier></configuration></plugin></plugins><!--2.资源拷贝的插件 --><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><resource><directory>src/main/resources</directory><includes><include>**/*.yml</include><include>**/*.html</include><include>**/*.js</include><include>**/*.xml</include><include>**/*.properties</include></includes></resource></resources></build>

3. 创建EsConfig配置类

package com.jjy.config;import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class EsConfig {@Beanpublic RestHighLevelClient restHighLevelClient() {RestClientBuilder restClientBuilder = RestClient.builder(new HttpHost("192.168.1.101", 9200, "http"));return new RestHighLevelClient(restClientBuilder);}
}

4. 创建Score实体类

package com.jjy.entry;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.springframework.stereotype.Component;@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Component
public class Score {private String id;private String name;private Double score;
}

5. 创建Student实体类

package com.jjy.entry;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.springframework.stereotype.Component;import java.util.List;@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Component
public class Student {private String name;private Integer age;private String id;private List<Score> scoreList;
}

6. 创建EsApplication启动类

package com.jjy;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class EsApplication {public static void main(String[] args) {SpringApplication.run(EsApplication.class, args);}
}

7. 创建EsTest测试类

package com.jjy.test;
import com.alibaba.fastjson.JSON;
import com.jjy.EsApplication;
import com.jjy.entry.Score;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import com.jjy.entry.Student;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;@RunWith(SpringRunner.class)
@SpringBootTest(classes = EsApplication.class)
public class EsTest {@Autowiredprivate RestHighLevelClient client;/*** 保存数据*/@Testpublic void save() throws IOException {/*student相当于表名,将数据保存到哪里*/IndexRequest indexRequest = new IndexRequest("student");Student student = new Student();student.setAge(20);student.setId("5");student.setName("钱六");Score score1 = new Score();score1.setName("数学");score1.setScore(89.0);score1.setId("shuxue");Score score2 = new Score();score2.setName("语文");score2.setScore(121.0);score2.setId("yuwen");Score score3 = new Score();score3.setName("外语");score3.setScore(124.0);score3.setId("waiyu");List<Score> scoreList = new ArrayList<>();scoreList.add(score1);scoreList.add(score2);scoreList.add(score3);student.setScoreList(scoreList);/*保存数据也是向es发送了rest请求,保存需要一个json的数据,将对象转化成JSON串*/String studentJson = JSON.toJSONString(student);indexRequest.source(studentJson, XContentType.JSON);IndexResponse response = client.index(indexRequest, RequestOptions.DEFAULT);System.out.println(response);}/*** 查询数据*/@Testpublic void select() throws IOException {SearchRequest searchRequest = new SearchRequest();SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();/*查询的字段要加上keyword,表示按照数据中这个字段值查询,不加就查询不到;id主键除外!*/TermQueryBuilder termQuery = QueryBuilders.termQuery("name.keyword", "张三");searchSourceBuilder.query(termQuery);searchRequest.source(searchSourceBuilder);SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);System.out.println(search);}}

8. 创建application.properties配置文件

spring.application.name=elasticsearch

9. 创建application.yml配置文件

server:port: 100

10. 创建bootstrap.yml配置文件

spring:cloud:nacos:discovery:server-addr: 192.168.43.143:8848config:server-addr: 192.168.43.143:8848 #file-extension: yamlnamespace: 7e56a725-f51a-4603-b421-49add0ae9c4b # 命名空间ID,粘贴复制过来即可。shared-configs:- data-id: redissession1.yaml    # 配置详情内:Data ID,粘贴复制过来即可。group: DEFAULT_GROUP           # 配置详情内:Group 粘贴复制过来即可。inetutils:preferred-networks: 192.168.56 # 服务管理内,public内点击详情,可以查看,需要项目启动后能查看,一般默认192.168.56

11. 启动虚拟机环境

需要启动nacos和redis
在这里插入图片描述

12. 测试运行

在这里插入图片描述


总结

本文讲述了:
Elasticsearch:用于存储分析数据;
Kibana:用于可视化使用Elasticsearch
在下攸攸太上,你们可能忘了,但我依然是ൠ♄§星的外星人。

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

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

相关文章

ViT(Vision Transformer详解)

Transformer作为前沿的深度学习框架&#xff0c;带有多模态的特性&#xff0c;对于不同类型的输入数据&#xff0c;不管是文本还是图像均可进行处理&#xff0c;而ViT则是对于Transformer中的视觉方面&#xff08;也就是输入数据为图像&#xff09;的衍生物&#xff08;因Trans…

知识改变命运 数据结构【优先级队列(堆)】

优先级队列(堆&#xff09; 1&#xff1a;堆概念2&#xff1a;堆的创建(以小根堆为例)3&#xff1a;堆的插入与删除3.1 堆的插入3.2堆的删除 4&#xff1a;oj练习5&#xff1a;堆排序6接口介绍&#xff08;底层代码的查看&#xff09;6.1常用三种构造方法 前言&#xff1a;队列…

Hadoop的三种运行模式:单机模式、伪分布式模式和完全分布式模式

单机模式 单机模式是Hadoop最简单的运行模式。在单机模式下&#xff0c;所有Hadoop组件都运行在单个机器上&#xff0c;包括HDFS、MapReduce等。由于只有一个节点参与计算&#xff0c;单机模式适用于开发和测试阶段&#xff0c;不适合用于处理大规模数据。在单机模式下&#xf…

攻防世界----->Replace

前言&#xff1a;做题笔记。 下载 查壳。 upx32脱壳。 32ida打开。 先运行看看&#xff1a; 没有任何反应&#xff1f; 猜测又是 地址随机化(ASLR)---遇见过。 操作参考&#xff1a; 攻防世界----&#xff1e;Windows_Reverse1_dsvduyierqxvyjrthdfrtfregreg-CSDN博客 然后…

UGUI(现成组合控件)

Drop Down Scroll View Scroll Bar size是滚动条的填充程度 Slider 如果设置为静态&#xff0c;那么传入的值始终为自己设置的那个值 Input Field content type为standard时 可以设置line type&#xff0c; 只读不改&#xff0c;就是可以复制&#xff0c;但是你已经不能输入了…

使用.mdf及.ldf恢复SQL SERVER数据库

文章目录 [toc]1.使用.mdf和对应的.ldf文件恢复数据库1.1 将对应的.mdf和.ldf复制到SQL SERVER路径下1.2 打开SSMS 1.使用.mdf和对应的.ldf文件恢复数据库 1.1 将对应的.mdf和.ldf复制到SQL SERVER路径下 一般默认路径是&#xff1a;C:\Program Files\Microsoft SQL Server\MS…

YOLO11改进|注意力机制篇|引入MSCA注意力机制

目录 一、【MSCA】注意力机制1.1【MSCA】注意力介绍1.2【MSCA】核心代码 二、添加【MSCA】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【MSCA】注意力机制 1.1【MSCA】注意力介绍 下图是【MSCA】的结构图&#xff0c;让我…

easyconnect配置wireshark抓包

文章目录 概述过程配置Wireshark抓包 概述 过程 配置Wireshark抓包 首先需要配置虚拟网卡SangforVPN可被Wireshark识别 重启 sc stop npcap sc start npcap# 清空路由表 netsh int ipv4 reset # 查看路由表 route print

企业建站能带来些什么?2024外包建站公司哪家好

目的的话只有企业自己知道&#xff0c;但作用还是有很多的—— 1.塑造企业精神与文化-对内 企业内部不管是否真的存在企业精神和企业文化&#xff0c;在制作网站的过程中都会考虑到这方面的内容&#xff0c;因为这是企业网站内容中不可或缺的一部分。 在企业内部还不存在所谓…

Java中的冒泡排序法

冒泡排序 排序的介绍冒泡排序法代码实现 排序的介绍 冒泡排序法 代码实现 将五个无序&#xff1a;24&#xff0c;69&#xff0c;80&#xff0c;57&#xff0c;13使用冒泡排序法将其排成一个从小到大的有序数列 public class test{public static void main(String[] args){int a…

tensorflow快速入门--如何定义张量、定义网络结构、超参数设置、模型训练???

前言 由于最近学习的东西涉及到tensorflow的使用&#xff0c;故先简单的学习了一下tensorflow中如何定义张量、定义网络结构、超参数设置、模型训练的API调用过程&#xff1b;欢迎大家&#xff0c;收藏关注&#xff0c;本人将持续更新。 文章目录 1、基本操作1、张量基础操作创…

时间序列+Transformer席卷而来,性能秒杀传统,创新性拉满,引爆顶会!

时间序列分析与Transformer模型的结合&#xff0c;已成为深度学习领域的一大趋势。这种结合能够高效捕捉序列中的长期依赖关系&#xff0c;提升时间序列分析和预测的准确性。 时间序列Transformer技术在股票价格预测、气候预测、交通流量预测、设备故障预测、自然语言处理等多…

封装vue-cropper,图片裁剪组件

组件基本使用: 这里的action同时也可以传相对路径&#xff0c;比如封装了axios&#xff0c;那么组件源码里就不能引入元素axios&#xff0c;可以替换为封装的axios。传 action"/file/upload" 源代码&#xff1a; <script setup> import WuyuCropper from /com…

【基础算法总结】字符串篇

目录 一&#xff0c;算法简介二&#xff0c;算法原理和代码实现14.最长公共前缀5.最长回文子串67.二进制求和43.字符串相乘 三&#xff0c;算法总结 一&#xff0c;算法简介 字符串 string 是一种数据结构&#xff0c;它一般和其他的算法结合在一起操作&#xff0c;比如和模拟&…

远程控制软件推荐:亲测好用!

无论是在家办公、技术支持还是远程协助家人&#xff0c;一个好的远程控制工具都能让我们的工作更加高效。下面&#xff0c;我将分享我对几款流行的远程控制软件的个人体验&#xff0c;并给出我的推荐。 向日葵远程控制 直达链接&#xff1a;down.oray.com 向日葵远程控制是…

如何实现一个基于 HTML+CSS+JS 的任务进度条

如何实现一个基于 HTMLCSSJS 的任务进度条 在网页开发中&#xff0c;任务进度条是一种常见的 UI 组件&#xff0c;它可以直观地展示任务的完成情况。本文将向你展示如何使用 HTML CSS JavaScript 来创建一个简单的、交互式的任务进度条。用户可以通过点击进度条的任意位置来…

Spring Boot读取resources目录下文件(打成jar可用),并放入Guava缓存

1、文件所在位置&#xff1a; 2、需要Guava依赖&#xff1a; <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>23.0</version></dependency>3、启动时就读取放入缓存的代码&#xf…

10.8作业

优化登录框&#xff1a; 当用户点击取消按钮&#xff0c;弹出问题对话框&#xff0c;询问是否要确定退出登录&#xff0c;并提供两个按钮&#xff0c;yes|No&#xff0c;如果用户点击的Yes&#xff0c;则关闭对话框&#xff0c;如果用户点击的No&#xff0c;则继续登录 当用户点…

26.删除有序数组中的重复项

题目::26. 删除有序数组中的重复项 - 力扣&#xff08;LeetCode&#xff09; 思路:只要不和前面的数一样就可以移动指针&#xff0c;进行赋值 代码: class Solution { public:int removeDuplicates(vector<int>& nums) {int slow 0 ;for(int fast 1; fast < …

Sharding-JDBC笔记04-分库分表实战

文章目录 前言一、需求描述二、数据库设计三、环境说明四、环境准备4.1.mysql主从同步(windows)4.2.初始化数据库 五、实现步骤5.1 搭建maven工程引入maven依赖 5.2 实体类5.3 dao层5.4 服务类5.5 测试类总结 5.6 查询商品DaoService单元测试输出小结 5.7 统计商品Dao单元测试统…