es学习之spring data elasticsearch项目搭建

我爱海鲸 2022-03-17 15:30:19 暂无标签

简介spring data elasticsearch、orm

2022-03-17:

start

es的搭建请参考:es学习之elasticsearch在centos7上的搭建

end

0、查看es相关文档:Elasticsearch中文文档

1、创建项目,如图:

2、pom文件如下:

<?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">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>


    <groupId>xyz.haijin</groupId>
    <artifactId>springdata-elasticsearch</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <repositories>
        <repository>
            <id>nexus-aliyun</id>
            <name>Nexus aliyun</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

3、项目截图:

4、创建实体类:

package xyz.haijin.bean;

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

/**
 * @Author liuhaijin
 * @Date 2022/3/15
 */
@Document(indexName = "book", type = "_doc")
public class BookBean {
    @Id
    private String id;
    private String title;
    private String author;
    private String postDate;

    public BookBean(){}

    public BookBean(String id, String title, String author, String postDate){
        this.id=id;
        this.title=title;
        this.author=author;
        this.postDate=postDate;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getPostDate() {
        return postDate;
    }

    public void setPostDate(String postDate) {
        this.postDate = postDate;
    }

    @Override
    public String toString() {
        return "BookBean{" +
                "id='" + id + '\'' +
                ", title='" + title + '\'' +
                ", author='" + author + '\'' +
                ", postDate='" + postDate + '\'' +
                '}';
    }  

5、创建dao层:

package xyz.haijin.dao;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import xyz.haijin.bean.BookBean;

/**
 * 接口关系
 * ElasticsearchRepository --> ElasticsearchCrudRepository --> PagingAndSortingRepository --> CrudRepository
 *
 * @Author liuhaijin
 * @Date 2022/3/15
 */
public interface BookRepository extends ElasticsearchRepository<BookBean, String> {

    //Optional<BookBean> findById(String id);

    Page<BookBean> findByAuthor(String author, Pageable pageable);

    Page<BookBean> findByTitle(String title, Pageable pageable);

}

6、创建service层:

package xyz.haijin.xyz.haijin.service;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import xyz.haijin.bean.BookBean;

import java.util.List;
import java.util.Optional;

/**
 * @Author liuhaijin
 * @Date 2022/3/15
 */
public interface BookService {
    Optional<BookBean> findById(String id);

    BookBean save(BookBean blog);

    void delete(BookBean blog);

    Optional<BookBean> findOne(String id);

    List<BookBean> findAll();

    Page<BookBean> findByAuthor(String author, PageRequest pageRequest);

    Page<BookBean> findByTitle(String title, PageRequest pageRequest);

}
package xyz.haijin.xyz.haijin.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import xyz.haijin.bean.BookBean;
import xyz.haijin.dao.BookRepository;
import xyz.haijin.xyz.haijin.service.BookService;

import java.util.List;
import java.util.Optional;

/**
 * @Author liuhaijin
 * @Date 2022/3/15
 */
@Service("blogService")
public class BookServiceImpl implements BookService {
    @Autowired
    @Qualifier("bookRepository")
    private BookRepository bookRepository;


    @Override
    public Optional<BookBean> findById(String id) {
        //CrudRepository中的方法
        return bookRepository.findById(id);
    }

    @Override
    public BookBean save(BookBean blog) {
        return bookRepository.save(blog);
    }

    @Override
    public void delete(BookBean blog) {
        bookRepository.delete(blog);
    }

    @Override
    public Optional<BookBean> findOne(String id) {
        return bookRepository.findById(id);
    }

    @Override
    public List<BookBean> findAll() {
        return (List<BookBean>) bookRepository.findAll();
    }

    @Override
    public Page<BookBean> findByAuthor(String author, PageRequest pageRequest) {
        return bookRepository.findByAuthor(author,pageRequest);
    }

    @Override
    public Page<BookBean> findByTitle(String title, PageRequest pageRequest) {
        return bookRepository.findByTitle(title,pageRequest);
    }
}

7、创建controller层:

package xyz.haijin.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.web.bind.annotation.*;
import xyz.haijin.bean.BookBean;
import xyz.haijin.xyz.haijin.service.BookService;

import java.util.Optional;

/**
 * @Author liuhaijin
 * @Date 2022/3/15
 */
@RestController
public class ElasticController {
    @Autowired
    private BookService bookService;

    @RequestMapping("/book/{id}")
    @ResponseBody
    public BookBean getBookById(@PathVariable String id){
        Optional<BookBean> opt =bookService.findById(id);
        BookBean book=opt.get();
        System.out.println(book);
        return book;
    }

    @RequestMapping("/save")
    @ResponseBody
    public void Save(){
        BookBean book=new BookBean("1","ES入门教程","haijin","2022-03-15");
        System.out.println(book);
        bookService.save(book);
    }


    @GetMapping("/page")
    @ResponseBody
    public Page<BookBean> page(@RequestParam String author){
        PageRequest pageRequest = PageRequest.of(0,10, Sort.unsorted());
        Page<BookBean> bookBeanPage = bookService.findByAuthor(author, pageRequest);
        System.out.println(bookBeanPage);
        return bookBeanPage;
    }


    @GetMapping("/delete")
    @ResponseBody
    public void delete(@RequestParam String id){
        BookBean book=new BookBean(id,"","","");
        bookService.delete(book);
    }

}

8、application.properties配置文件:

spring.data.elasticsearch.cluster-name=test
spring.data.elasticsearch.cluster-nodes=192.168.19.131:9300
spring.data.elasticsearch.repositories.enabled=true

9、创建启动类:

package xyz.haijin;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @Author liuhaijin
 * @Date 2022/3/15
 */
@SpringBootApplication
public class EsApplation {

    public static void main(String[] args) {
        SpringApplication.run(EsApplation.class, args);
    }
}

10、请求:

http://localhost:8080/book/1 查询

http://localhost:8080/delete?id=1 删除

http://localhost:8080/save 保存

c

你好:我的2025