java SpringBoot2

private String describe;

public String getId() {
    return id;
}

public String getName() {
    return name;
}

public String getType() {
    return type;
}

public String getDescribe() {
    return describe;
}

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

public void setType(String type) {
    this.type = type;
}

public void setName(String name) {
    this.name = name;
}

public void setDescribe(String describe) {
    this.describe = describe;
}

@Override
public String toString() {
    return "books{" +
            "id='" + id + '\'' +
            ", type='" + type + '\'' +
            ", name='" + name + '\'' +
            ", description='" + describe + '\'' +
            '}';
}

}


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ec44f3580ed44f69bc32b35c5e00b5a5.png)  
 这里 我们就定义了几个属性 声明get set函数 然后 为了不免错误 我们id直接给了个字符串类型  
 重写了toString 让大家能够更直观的看到属性  
 然后 Document 的indexName 告诉程序 我们要用的是哪一个索引 这里我们给了个 books 表示操作books 索引


然后 我们创建一个Mapper接口 这里 我们直接就叫 BooksMapper  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/7a67d096cc2643aab9e857f4f7bb75dd.png)  
 接口代码如下



package com.example.webdom.service;

import com.example.webdom.domain.books;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface BoooksMaaper extends ElasticsearchRepository<books,String> {
}


它需要继承 ElasticsearchRepository 操作ES的一个接口 然后通过 Repository 将它加到spring容器中


然后 我们在启动类同目录下的 config 包 没有就建一个 下面创建一个类 叫 ESClientConfig 名字无所谓  
 然后 编写代码如下



package com.example.webdom.config;

import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClientBuilder;

@Configuration
public class ESClientConfig {

@Autowired
private Environment environment;

@Bean
public RestHighLevelClient elasticsearchClient() {
    String elasticsearchHosts = environment.getProperty("spring.elasticsearch.hosts");
    RestClientBuilder builder = RestClient.builder(HttpHost.create(elasticsearchHosts));
    // 设置其他配置,如认证信息、连接超时等
    RestHighLevelClient client = new RestHighLevelClient(builder);
    return client;
}

}


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e7115e0dbe864595b241f186307e17c1.png)  
 然后 我们在测试类 中将这个接口条件装配进来  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/54dce45293ec43649cdc8ba6c876a548.png)  
 测试类代码编写如下



package com.example.webdom;

import com.example.webdom.domain.books;
import com.example.webdom.service.BoooksMaaper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class WebDomApplicationTests {

@Autowired
private BoooksMaaper BoooksMaaper;

@Test
void set() {
    books bookdai = new books();
    bookdai.setId("1");
    bookdai.setType("爱猫当的自我修改样");
    bookdai.setName("爱护猫猫");
    bookdai.setDescribe("帮助所有爱猫当快速了解猫猫");
    books book = BoooksMaaper.save(bookdai);
    System.out.println(book);
}

}


这里 我们条件装配了自己写的接口 BoooksMaaper  
 然后 books实体类 new出来 然后 用set方法给每一个字段赋值  
 最后调用 save 添加方法 它有一个返回值 就是我们的属性类实体对象


我们右键运行  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/2a82ad5bf11742e8a1933498c3c271f6.png)  
 此时 我们就运行成功了 然后 可以看到 save 返回的这个对象 就是我们添加进去的东西了  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/64377d79cfd4499cb955e6622ed78cfc.png)  
 然后 我们通过请求查询一下 books索引下面的文档  
 http://localhost:9200/books/\_search get  
 就会看到 这里确实是进来了  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/bf0d7f9471ce4b5784744dbe064a233b.png)  
 然后呢 这个东西的修改比较有意思  
 我们还是这样一段代码



books bookdai = new books();
bookdai.setId(“1”);
bookdai.setType(“vue”);
bookdai.setName(“vue基础到进阶”);
bookdai.setDescribe(“测试vue内容修改”);
books book = BoooksMaaper.save(bookdai);
System.out.println(book);


有些人可能已经蒙了 save不是添加吗?  
 这里的设定非常有趣呀 save 你的id如果有 它会覆盖 如果没有 就是添加  
 我们的id 1是已经存在的 所以 它会将我们前面添加那条id为1的数据覆盖掉 就是修改功能了


运行之后 控制台输出一切正常  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/da206b8d076544a2b9f7008ebbf54f59.png)  
 然后 我们来查一下  
 会发现 确实是实现了一个修改的效果  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/faccb7377bcc4a889bf26e7b64022c84.png)  
 然后 我们来看 ES最有特殊的查询  
 其实ES主要的价值就在于分词的一个查询


首先是查询全部 findAll  
 我们这样写



Iterable all = BoooksMaaper.findAll();
for (books book : all){
System.out.println("book = " +book);
}


调用 findAll 返回一个 泛型为我们实体类的Iterable接口集合  
 然后 for遍历这个集合 输出每一次结果


运行代码 因为我们总共就一条数据 所以输出的内容就一条 findAll就是查询全部  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/9466abda18b840a1a87b24fa9b1526ac.png)  
 然后 按照id查询 findById



Optional byId = BoooksMaaper.findById(“1”);
System.out.println(byId);


我们查询id为1的内容 并输出  
 右键运行代码  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ae54e16d51c94182ac1f7f190c6a32fd.png)  
 这里 也是顺利查出来了  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/c2734bbd1e554d73a7bc86dfc6ebcf7a.png)  
 然后 他有一个比较特殊函数 感觉不是很实用findAllById  
 它支持传入list数组  
 可以传给它多个id 然后带出多条数据



ArrayList ids = new ArrayList<>();
ids.add(“1”);
ids.add(“2”);
ids.add(“3”);
ids.add(“4”);
Iterable byId = BoooksMaaper.findAllById(ids);


查询 id 1 2 3 4的数据 然后形成一个 实体类泛型的 Iterable集合


然后 我们来说自定义的查询方法  
 我们 可以在自己写的 BoooksMaaper 接口中写一个这样的函数



//自定义 根据name查询
List findByName(String name);


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0644f636d88e4448a95594c914d830da.png)  
 这里需要注意 findBy 后面 跟自己要条件查询的字段名 首字母大写 因为如果你不这样 它是找不到你要查哪个字段的


然后 我们测试类来调用这个函数



List byId = BoooksMaaper.findByName(“vue”);
System.out.println(byId);


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/42bb92f113f1449786528f69bbf2f4cf.png)  
 运行代码 这里也顺利通过 vue 模糊查询到了  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/7f03984997bc47c5ac2d4eb2a5e5f0f6.png)  
 最后删除方法  
 我们就看个根据id删除吧 deleteById  
 没有返回值  
 我们直接写



BoooksMaaper.deleteById(“1”);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值