1. 环境准备

    1. Springboot 基本环境

      1. 自行前往https://start.spring.io/ 构建一个即可
    2. Elasticsearch服务端
      1. 简单说下windows版本的安装  https://www.elastic.co/cn/downloads/elasticsearch   下载最新版8.1.0,之后解压 不要放到中文目录下,进入bin目录双击运行elasticsearch.bat.
  2. 相关依赖
    1. pom.xml   ELasticsearch相关的依赖

      <dependency>
      <groupId>co.elastic.clients</groupId>
      <artifactId>elasticsearch-java</artifactId>
      <version>8.1.0</version>
      </dependency>
      <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.13.2</version>
      </dependency>
    2. application.yml
      elasticsearch:
      host: 127.0.0.1
      port: 9200
  3. 代码逻辑解释
    1. 创建Elasticsearch 客户端 的bean 对象
      查看代码
      package cn.daimao.TestTryProject.bean;
      import co.elastic.clients.elasticsearch.ElasticsearchClient;
      import co.elastic.clients.json.jackson.JacksonJsonpMapper;
      import co.elastic.clients.transport.ElasticsearchTransport;
      import co.elastic.clients.transport.rest_client.RestClientTransport;
      import org.apache.http.HttpHost;
      import org.elasticsearch.client.RestClient;
      import org.elasticsearch.client.RestClientBuilder;
      import org.springframework.beans.factory.annotation.Value;
      import org.springframework.context.annotation.Bean;
      import org.springframework.stereotype.Component;
      @Component
      public class ElasticClient {
      @Value("${elasticsearch.host}")
      private String host;
      @Value("${elasticsearch.port}")
      private Integer port;
      @Bean
      public ElasticsearchClient getClient(){
      RestClientBuilder builder = RestClient.builder(
      new HttpHost(host, port));
      ElasticsearchTransport transport = new RestClientTransport(builder.build(),new JacksonJsonpMapper());
      return new ElasticsearchClient(transport);
      }
      }
    2. 准备测试对象
      1. 创建测试商品表

        SET NAMES utf8mb4;
        SET FOREIGN_KEY_CHECKS = 0; -- ----------------------------
        -- Table structure for t_product
        -- ----------------------------
        DROP TABLE IF EXISTS `t_product`;
        CREATE TABLE `t_product` (
        `product_id` bigint(0) NOT NULL AUTO_INCREMENT,
        `product_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '商品名称',
        `product_price` decimal(10, 2) NULL DEFAULT NULL COMMENT '商品价格',
        `product_category` bigint(0) NULL DEFAULT NULL COMMENT '商品分类',
        `product_imgurl` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '商品图片地址',
        `product_num` int(0) NULL DEFAULT NULL COMMENT '商品库存',
        `product_description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '商品简单描述',
        `sale` bigint(0) NULL DEFAULT NULL COMMENT '销量',
        `quill` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '详细描述',
        `product_status` int(0) NULL DEFAULT NULL COMMENT '状态',
        `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
        `create_id` bigint(0) NULL DEFAULT NULL COMMENT '创建人',
        PRIMARY KEY (`product_id`) USING BTREE
        ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1;

        2.使用mybatis-plus 生成商品相应对象、service、mapper等

        <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.1</version>
        </dependency>
        查看代码
        package cn.daimao.TestTryProject.domain;
        
        import com.baomidou.mybatisplus.annotation.IdType;
        import com.baomidou.mybatisplus.annotation.TableField;
        import com.baomidou.mybatisplus.annotation.TableId;
        import com.baomidou.mybatisplus.annotation.TableName;
        import java.io.Serializable;
        import java.math.BigDecimal;
        import java.util.Date;
        import lombok.Data; /**
        *
        * @TableName t_product
        */
        @TableName(value ="t_product")
        @Data
        public class TProduct implements Serializable {
        /**
        *
        */
        @TableId(type = IdType.AUTO)
        private Long productId; /**
        * 商品名称
        */
        private String productName; /**
        * 商品价格
        */
        private BigDecimal productPrice; /**
        * 商品分类
        */
        private Long productCategory; /**
        * 商品图片地址
        */
        private String productImgurl; /**
        * 商品库存
        */
        private Integer productNum; /**
        * 商品简单描述
        */
        private String productDescription; /**
        * 销量
        */
        private Long sale; /**
        * 详细描述
        */
        private String quill; /**
        * 状态
        */
        private Integer productStatus; /**
        * 创建时间
        */
        private Date createTime; /**
        * 创建人
        */
        private Long createId; @TableField(exist = false)
        private static final long serialVersionUID = 1L; @Override
        public boolean equals(Object that) {
        if (this == that) {
        return true;
        }
        if (that == null) {
        return false;
        }
        if (getClass() != that.getClass()) {
        return false;
        }
        TProduct other = (TProduct) that;
        return (this.getProductId() == null ? other.getProductId() == null : this.getProductId().equals(other.getProductId()))
        && (this.getProductName() == null ? other.getProductName() == null : this.getProductName().equals(other.getProductName()))
        && (this.getProductPrice() == null ? other.getProductPrice() == null : this.getProductPrice().equals(other.getProductPrice()))
        && (this.getProductCategory() == null ? other.getProductCategory() == null : this.getProductCategory().equals(other.getProductCategory()))
        && (this.getProductImgurl() == null ? other.getProductImgurl() == null : this.getProductImgurl().equals(other.getProductImgurl()))
        && (this.getProductNum() == null ? other.getProductNum() == null : this.getProductNum().equals(other.getProductNum()))
        && (this.getProductDescription() == null ? other.getProductDescription() == null : this.getProductDescription().equals(other.getProductDescription()))
        && (this.getSale() == null ? other.getSale() == null : this.getSale().equals(other.getSale()))
        && (this.getQuill() == null ? other.getQuill() == null : this.getQuill().equals(other.getQuill()))
        && (this.getProductStatus() == null ? other.getProductStatus() == null : this.getProductStatus().equals(other.getProductStatus()))
        && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime()))
        && (this.getCreateId() == null ? other.getCreateId() == null : this.getCreateId().equals(other.getCreateId()));
        } @Override
        public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((getProductId() == null) ? 0 : getProductId().hashCode());
        result = prime * result + ((getProductName() == null) ? 0 : getProductName().hashCode());
        result = prime * result + ((getProductPrice() == null) ? 0 : getProductPrice().hashCode());
        result = prime * result + ((getProductCategory() == null) ? 0 : getProductCategory().hashCode());
        result = prime * result + ((getProductImgurl() == null) ? 0 : getProductImgurl().hashCode());
        result = prime * result + ((getProductNum() == null) ? 0 : getProductNum().hashCode());
        result = prime * result + ((getProductDescription() == null) ? 0 : getProductDescription().hashCode());
        result = prime * result + ((getSale() == null) ? 0 : getSale().hashCode());
        result = prime * result + ((getQuill() == null) ? 0 : getQuill().hashCode());
        result = prime * result + ((getProductStatus() == null) ? 0 : getProductStatus().hashCode());
        result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode());
        result = prime * result + ((getCreateId() == null) ? 0 : getCreateId().hashCode());
        return result;
        } @Override
        public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(getClass().getSimpleName());
        sb.append(" [");
        sb.append("Hash = ").append(hashCode());
        sb.append(", productId=").append(productId);
        sb.append(", productName=").append(productName);
        sb.append(", productPrice=").append(productPrice);
        sb.append(", productCategory=").append(productCategory);
        sb.append(", productImgurl=").append(productImgurl);
        sb.append(", productNum=").append(productNum);
        sb.append(", productDescription=").append(productDescription);
        sb.append(", sale=").append(sale);
        sb.append(", quill=").append(quill);
        sb.append(", productStatus=").append(productStatus);
        sb.append(", createTime=").append(createTime);
        sb.append(", createId=").append(createId);
        sb.append(", serialVersionUID=").append(serialVersionUID);
        sb.append("]");
        return sb.toString();
        }
        }
        查看代码
        package cn.daimao.TestTryProject.service;
        
        import cn.daimao.TestTryProject.domain.TProduct;
        import com.baomidou.mybatisplus.extension.service.IService; /**
        * @author 毛明辉
        * @description 针对表【t_product】的数据库操作Service
        * @createDate 2022-04-06 14:40:35
        */
        public interface TProductService extends IService<TProduct> { }
        package cn.daimao.TestTryProject.service.impl;
        
        import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
        import cn.daimao.TestTryProject.domain.TProduct;
        import cn.daimao.TestTryProject.service.TProductService;
        import cn.daimao.TestTryProject.mapper.TProductMapper;
        import org.springframework.stereotype.Service; /**
        * @author 毛明辉
        * @description 针对表【t_product】的数据库操作Service实现
        * @createDate 2022-04-06 14:40:35
        */
        @Service
        public class TProductServiceImpl extends ServiceImpl<TProductMapper, TProduct>
        implements TProductService{ }
        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
        <mapper namespace="cn.daimao.TestTryProject.mapper.TProductMapper"> <resultMap id="BaseResultMap" type="cn.daimao.TestTryProject.domain.TProduct">
        <id property="productId" column="product_id" jdbcType="BIGINT"/>
        <result property="productName" column="product_name" jdbcType="VARCHAR"/>
        <result property="productPrice" column="product_price" jdbcType="DECIMAL"/>
        <result property="productCategory" column="product_category" jdbcType="BIGINT"/>
        <result property="productImgurl" column="product_imgurl" jdbcType="VARCHAR"/>
        <result property="productNum" column="product_num" jdbcType="INTEGER"/>
        <result property="productDescription" column="product_description" jdbcType="VARCHAR"/>
        <result property="sale" column="sale" jdbcType="BIGINT"/>
        <result property="quill" column="quill" jdbcType="VARCHAR"/>
        <result property="productStatus" column="product_status" jdbcType="INTEGER"/>
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
        <result property="createId" column="create_id" jdbcType="BIGINT"/>
        </resultMap> <sql id="Base_Column_List">
        product_id,product_name,product_price,
        product_category,product_imgurl,product_num,
        product_description,sale,quill,
        product_status,create_time,create_id
        </sql>
        </mapper>
      2. Elasticsearch相关
        1. 创建索引product,可以手动创建,客户端API方法如下,indexName传product即可,简单创建一下就行。

          @Autowired
          private ElasticsearchClient elasticsearchClient;
          @PostMapping("/createIndex")
          public ResultJson createIndex(@RequestParam String indexName) throws IOException {
          elasticsearchClient.indices().create(createIndex -> createIndex.index(indexName));
          return ResultJson.success();
          }
        2. product 增删改  直接上代码 ,毕竟简单
          package cn.daimao.TestTryProject.service;
          
          import cn.daimao.TestTryProject.common.ResultJson;
          import cn.daimao.TestTryProject.domain.TProduct;
          import co.elastic.clients.elasticsearch.ElasticsearchClient;
          import co.elastic.clients.elasticsearch.core.DeleteRequest;
          import co.elastic.clients.elasticsearch.core.IndexRequest;
          import co.elastic.clients.elasticsearch.core.UpdateRequest;
          import org.springframework.beans.factory.annotation.Autowired;
          import org.springframework.stereotype.Service; import java.io.IOException; @Service
          public class ElasticSearchService {
          @Autowired
          private ElasticsearchClient elasticsearchClient; /**
          * 上传商品相关数据到Elasticsearch
          * @param tProduct
          */
          public ResultJson uploadProduct(TProduct tProduct) {
          IndexRequest<TProduct> req ;
          req = IndexRequest.of( b->
          b.index("product").id(tProduct.getProductId()+"").document(tProduct));
          try {
          elasticsearchClient.index(req);
          return ResultJson.success();
          } catch (IOException e) {
          return ResultJson.failure(e.toString());
          }
          } /**
          * 修改
          * @param tProduct
          * @return
          */
          public ResultJson updateDocument(TProduct tProduct){
          UpdateRequest<TProduct,TProduct> req;
          req = UpdateRequest.of(
          b-> b.index("product").id(tProduct.getProductId()+"")
          .doc(tProduct)
          );
          try {
          elasticsearchClient.update(req,TProduct.class);
          return ResultJson.success();
          } catch (IOException e) {
          return ResultJson.failure(e.toString());
          }
          } /**
          * 删除
          * @param productId
          * @return
          */
          public ResultJson deleteDocument(Long productId){
          DeleteRequest req ;
          req = DeleteRequest.of(
          b-> b.index("product").id(productId+"")
          ); try {
          elasticsearchClient.delete(req);
          return ResultJson.success();
          } catch (IOException e) {
          return ResultJson.failure(e.toString());
          }
          }
          }

          在商品操作的时候调用一下即可

          package cn.daimao.TestTryProject.controller;
          
          import cn.daimao.TestTryProject.common.ResultJson;
          import cn.daimao.TestTryProject.domain.TProduct;
          import cn.daimao.TestTryProject.service.ElasticSearchService;
          import cn.daimao.TestTryProject.service.TProductService;
          import org.springframework.beans.factory.annotation.Autowired;
          import org.springframework.web.bind.annotation.*; import java.util.Date; @RestController
          @RequestMapping("/api/product")
          public class ProductController {
          @Autowired
          private TProductService tProductService;
          @Autowired
          private ElasticSearchService elasticSearchService; @PostMapping("/save")
          public ResultJson save(@RequestBody TProduct tProduct){
          tProduct.setCreateTime(new Date());
          tProductService.save(tProduct);
          return elasticSearchService.uploadProduct(tProduct);
          }
          @PostMapping("/update")
          public ResultJson update(@RequestBody TProduct tProduct){
          tProductService.updateById(tProduct);
          return elasticSearchService.updateDocument(tProduct);
          }
          @PostMapping("/delete")
          public ResultJson delete(@RequestParam Long productId){
          tProductService.removeById(productId);
          return elasticSearchService.deleteDocument(productId);
          } }

          漏发了一个通用类,比较简单, 不发了。

  4. 成果展示
    1. 数据我update过,总之是已经传到Elasticsearch上面了。
  5. 查询,后面再补,这个才是关键。

Elasticsearch8.1-ElasticsearchClient-Java客户端简单增删查改-随笔的更多相关文章

  1. java中CRUD(增删查改)底层代码的实现

    java中CRUD(增删查改)底层代码的实现: package com.station.dao; import com.station.model.Product; import java.sql.* ...

  2. MongoDB在Java下的增删查改

    我们总不能一直使用cmd对数据库操作,数据库总是要在程序中使用的.今天来说一下怎么通过Java调用MongoDB. 学习一下最基本也是最常用的增删查改语句,这是使用数据库的基础. 注意事项: 1.要打 ...

  3. mybatis、spring、mysql、maven实现简单增删查改

    之前写过的mybatis博客作为学习mybatis.spring还是不太合适. 现在找到一个不错的例子,首先将这个完整的mybatis增删查改例子在本地上实现出来,然后再进行学习. 项目结构与运行结果 ...

  4. Linq实现对XML的简单增删查改

    一.传统DOM创建XML方法 private static void CreateXmlDocWithDom() { XmlDocument doc =new XmlDocument(); XmlEl ...

  5. C#实现对mongoDB的简单增删查改

    首先添加所需要驱动包(可通过nuget获得) using MongoDB.Bson;using MongoDB.Driver;using MongoDB.Driver.Builders; 一.设置配置 ...

  6. Node.js+Navicat for MySQL实现的简单增删查改

    前提准备: 电脑上必须装有服务器环境,Navicat for MySQL(我用的是这款MySQL,可随意),Node环境 效果如图所示: 源码地址: GitHub:https://github.com ...

  7. java实现简单的数据库的增删查改,并布局交互界面

        一.系统简介 1.1.简介  本系统提供了学生信息管理中常见的基本功能,主要包括管理员.管理员的主要功能有对学生信息进行增加.删除.修改.查找等操作,对信息进行管理,对信息进行修改.查找等操作 ...

  8. Java连接MySQL数据库及简单的增删查改操作

    主要摘自 https://www.cnblogs.com/town123/p/8336244.html https://www.runoob.com/java/java-mysql-connect.h ...

  9. java:Hibernate框架1(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态,增删查改)

    1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件  准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cf ...

随机推荐

  1. DataFrame计算corr()函数计算相关系数时,出现返回值为空或NaN的情况+np.log1p()

  2. 03 Java的数据类型分为两大类 类型转换 八大基本类型

    数据类型 强类型语言:要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用 Java的数据类型分为两大类 基本类型(primitive type) 数值类型 整数类型 byte占1个字节范围: ...

  3. LGP4229题解

    某位寄吧的故事 下文的 \(m\) 即为题面中的 \(Q\). 离散化,把序列变成 \(O(2m)\) 个部分,然后对这 \(O(2m)\) 个部分把最大值求出来,每次把最大值相同的部分拉出来,再把限 ...

  4. iframe于iframe页面之间的函数相互调用

    因为iframe页面于包括父页面在内的其他页面通讯有跨域问题,所以只有在服务器环境下或者火狐浏览器下才能测试. 在iframe页面调用父页面的函数采用parent,例子:在父页面有一个say()函数, ...

  5. Redis pub/sub

    list 类型, lpush + rpop 或 lpush + brpop 用作消息队列时,消息只能消费一次,且不支持多个消费者(消息只能消费一次),并且在客户端崩溃时容易丢失消息.而 pub/sub ...

  6. 设计模式在 Spring 中的应用

    Spring作为业界的经典框架,无论是在架构设计方面,还是在代码编写方面,都堪称行内典范.好了,话不多说,开始今天的内容. spring中常用的设计模式达到九种,我们一一举例: 第一种:简单工厂 又叫 ...

  7. UIautomatorviewer连接设备报错Unexpected error while obtaining UI hierarchy

    先来看下现象哈,点击sdk/tools下uiautomatorviever.bat,点击连接设备的图标,本以为就这么简单,那你就错了: 是不是看到这个瞬间心情就不好了,那么我们该怎么解决这个问题呢,归 ...

  8. vue学习过程总结(03) - 菜鸟教程归纳

    1.模板语法 1.1.文本插值,数据绑定.{{}},如: <p>{{ message }}</p> 1.2.输出HTML代码.v-html,如: <div v-html= ...

  9. python psutila模块

    #!/usr/bin/env python #coding:utf-8 # qianxiao996精心制作 #博客地址:https://blog.csdn.net/qq_36374896 import ...

  10. XSS 32个触发事件

    标签: 1.onmouseenter:当鼠标进入选区执行代码 <div style="background-color:red" onmouseenter="ale ...