From 558c49526d6501ff55752dbd7572cd22de9add03 Mon Sep 17 00:00:00 2001 From: YunaiV <> Date: Thu, 18 Jun 2020 19:16:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=80=E5=A7=8B=20Solr=20=E5=85=A5=E9=97=A8?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 15 +++-- .../dataobject/SolrProductDO.java | 9 +-- .../repository/ProductRepository02.java | 12 ++++ .../repository/ProductRepository03.java | 17 ++++++ .../src/main/resources/application.yml | 5 +- .../repository/ProductRepository02Test.java | 57 +++++++++++++++++++ .../repository/ProductRepository03Test.java | 26 +++++++++ lab-66/《芋道 Spring Boot Web Solr 入门》.md | 1 + pom.xml | 2 +- 9 files changed, 131 insertions(+), 13 deletions(-) create mode 100644 lab-66/lab-66-spring-data-solr/src/main/java/cn/iocoder/springboot/lab15/springdatasolr/repository/ProductRepository02.java create mode 100644 lab-66/lab-66-spring-data-solr/src/main/java/cn/iocoder/springboot/lab15/springdatasolr/repository/ProductRepository03.java create mode 100644 lab-66/lab-66-spring-data-solr/src/test/java/cn/iocoder/springboot/lab15/springdatasolr/repository/ProductRepository02Test.java create mode 100644 lab-66/lab-66-spring-data-solr/src/test/java/cn/iocoder/springboot/lab15/springdatasolr/repository/ProductRepository03Test.java create mode 100644 lab-66/《芋道 Spring Boot Web Solr 入门》.md diff --git a/README.md b/README.md index f4af41ad..d9a875e1 100644 --- a/README.md +++ b/README.md @@ -65,19 +65,24 @@ ## 数据访问 -* [《芋道 Spring Boot Redis 入门》](http://www.iocoder.cn/Spring-Boot/Redis/?github) 对应 [lab-11](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-11) -* [《芋道 Spring Boot 缓存 Cache 入门》](http://www.iocoder.cn/Spring-Boot/Cache/?github) 对应 [lab-21](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-21) +**关系数据库** + * [《芋道 Spring Boot 数据库连接池入门》](http://www.iocoder.cn/Spring-Boot/datasource-pool/?github) 对应 [lab-19](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-19) * [《芋道 Spring Boot MyBatis 入门》](http://www.iocoder.cn/Spring-Boot/MyBatis/?github) 对应 [lab-12](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-12) * [《芋道 Spring Boot JPA 入门》](http://www.iocoder.cn/Spring-Boot/JPA/?github) 对应 [lab-13](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-13) * [《芋道 Spring Boot JdbcTemplate 入门》](http://www.iocoder.cn/Spring-Boot/JdbcTemplate/?github) 对应 [lab-14](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-14) -* [《芋道 Spring Boot Elasticsearch 入门》](http://www.iocoder.cn/Spring-Boot/Elasticsearch/?github) 对应 [lab-15](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-15) -* 《芋道 Spring Boot Solr 入门》计划中... -* [《芋道 Spring Boot MongoDB 入门》](http://www.iocoder.cn/Spring-Boot/MongoDB/?github) 对应 [lab-16](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-16) * [《芋道 Spring Boot 多数据源(读写分离)入门》](http://www.iocoder.cn/Spring-Boot/dynamic-datasource/?github) 对应 [lab-17](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-17) * [《芋道 Spring Boot 分库分表入门》](http://www.iocoder.cn/Spring-Boot/sharding-datasource/?github) 对应 [lab-18](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-18) * [《芋道 Spring Boot 数据库版本管理入门》](http://www.iocoder.cn/Spring-Boot/database-version-control/?github) 对应 [lab-20](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-20) +**非关系数据库** + +* [《芋道 Spring Boot Redis 入门》](http://www.iocoder.cn/Spring-Boot/Redis/?github) 对应 [lab-11](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-11) +* [《芋道 Spring Boot 缓存 Cache 入门》](http://www.iocoder.cn/Spring-Boot/Cache/?github) 对应 [lab-21](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-21) +* [《芋道 Spring Boot MongoDB 入门》](http://www.iocoder.cn/Spring-Boot/MongoDB/?github) 对应 [lab-16](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-16) +* [《芋道 Spring Boot Elasticsearch 入门》](http://www.iocoder.cn/Spring-Boot/Elasticsearch/?github) 对应 [lab-15](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-15) +* [《芋道 Spring Boot Solr 入门》](http://www.iocoder.cn/Spring-Boot/Solr/?github) 对应 [lab-66](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-66) + ## 事务管理 * [《芋道 Spring Boot 分布式事务 Seata 入门》](http://www.iocoder.cn/Spring-Boot/Seata/?github) 对应 [lab-52](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-52) diff --git a/lab-66/lab-66-spring-data-solr/src/main/java/cn/iocoder/springboot/lab15/springdatasolr/dataobject/SolrProductDO.java b/lab-66/lab-66-spring-data-solr/src/main/java/cn/iocoder/springboot/lab15/springdatasolr/dataobject/SolrProductDO.java index e7f87583..11fed5de 100644 --- a/lab-66/lab-66-spring-data-solr/src/main/java/cn/iocoder/springboot/lab15/springdatasolr/dataobject/SolrProductDO.java +++ b/lab-66/lab-66-spring-data-solr/src/main/java/cn/iocoder/springboot/lab15/springdatasolr/dataobject/SolrProductDO.java @@ -11,27 +11,28 @@ public class SolrProductDO { * ID 主键 */ @Id + @Indexed(name = "id", type = "int") private Integer id; /** * SPU 名字 */ - @Indexed(value = "name") + @Indexed(name = "name", type = "string") private String name; /** * 描述 */ - @Indexed(value = "description") + @Indexed(name = "description", type = "string") private String description; /** * 分类编号 */ - @Indexed(value = "cid") + @Indexed(name = "cid", type = "cid") private Integer cid; /** * 分类名 */ - @Indexed(value = "category_name") + @Indexed(name = "category_name", type = "string") private String categoryName; public Integer getId() { diff --git a/lab-66/lab-66-spring-data-solr/src/main/java/cn/iocoder/springboot/lab15/springdatasolr/repository/ProductRepository02.java b/lab-66/lab-66-spring-data-solr/src/main/java/cn/iocoder/springboot/lab15/springdatasolr/repository/ProductRepository02.java new file mode 100644 index 00000000..216363bf --- /dev/null +++ b/lab-66/lab-66-spring-data-solr/src/main/java/cn/iocoder/springboot/lab15/springdatasolr/repository/ProductRepository02.java @@ -0,0 +1,12 @@ +package cn.iocoder.springboot.lab15.springdatasolr.repository; + +import cn.iocoder.springboot.lab15.springdatasolr.dataobject.SolrProductDO; +import org.springframework.data.solr.repository.SolrCrudRepository; + +public interface ProductRepository02 extends SolrCrudRepository { + + SolrProductDO findByName(String name); + +// Page findByNameLike(String name, Pageable pageable); + +} diff --git a/lab-66/lab-66-spring-data-solr/src/main/java/cn/iocoder/springboot/lab15/springdatasolr/repository/ProductRepository03.java b/lab-66/lab-66-spring-data-solr/src/main/java/cn/iocoder/springboot/lab15/springdatasolr/repository/ProductRepository03.java new file mode 100644 index 00000000..33aef1bd --- /dev/null +++ b/lab-66/lab-66-spring-data-solr/src/main/java/cn/iocoder/springboot/lab15/springdatasolr/repository/ProductRepository03.java @@ -0,0 +1,17 @@ +package cn.iocoder.springboot.lab15.springdatasolr.repository; + +import cn.iocoder.springboot.lab15.springdatasolr.dataobject.SolrProductDO; +import org.springframework.data.solr.repository.Query; +import org.springframework.data.solr.repository.SolrCrudRepository; + +import java.util.List; + +public interface ProductRepository03 extends SolrCrudRepository { + + /** + * 根据 name 匹配商品名或者商品分类,获得符合的商品列表 + */ + @Query("name:?0 OR category_name:?0") + List findByCustomQuery(String name); + +} diff --git a/lab-66/lab-66-spring-data-solr/src/main/resources/application.yml b/lab-66/lab-66-spring-data-solr/src/main/resources/application.yml index afc2af0c..3ed773e1 100644 --- a/lab-66/lab-66-spring-data-solr/src/main/resources/application.yml +++ b/lab-66/lab-66-spring-data-solr/src/main/resources/application.yml @@ -1,6 +1,5 @@ spring: data: + # Spring Data Solr 配置项,对应 SolrProperties 配置类 solr: - host: 'http://127.0.0.1:8983/solr' - repositories: - enabled: true + host: 'http://127.0.0.1:8983/solr' # Solr 服务器地址 diff --git a/lab-66/lab-66-spring-data-solr/src/test/java/cn/iocoder/springboot/lab15/springdatasolr/repository/ProductRepository02Test.java b/lab-66/lab-66-spring-data-solr/src/test/java/cn/iocoder/springboot/lab15/springdatasolr/repository/ProductRepository02Test.java new file mode 100644 index 00000000..d7c3ddff --- /dev/null +++ b/lab-66/lab-66-spring-data-solr/src/test/java/cn/iocoder/springboot/lab15/springdatasolr/repository/ProductRepository02Test.java @@ -0,0 +1,57 @@ +package cn.iocoder.springboot.lab15.springdatasolr.repository; + +import cn.iocoder.springboot.lab15.springdatasolr.Application; +import cn.iocoder.springboot.lab15.springdatasolr.dataobject.SolrProductDO; +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; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = Application.class) +public class ProductRepository02Test { + + @Autowired + private ProductRepository02 productRepository; + + @Test // 根据名字获得一条记录 + public void testFindByName() { + SolrProductDO product = productRepository.findByName("芋道源码"); + System.out.println(product); + } + +// @Test // 使用 name 模糊查询,分页返回结果 +// public void testFindByNameLike() { +// // 根据情况,是否要制造测试数据 +// if (false) { +// testInsert(); +// } +// +// // 创建排序条件 +// Sort sort = Sort.by(Sort.Direction.DESC, "id"); // ID 倒序 +// // 创建分页条件。 +// Pageable pageable = PageRequest.of(0, 10, sort); +// // 执行分页操作 +// Page page = productRepository.findByNameLike("芋道", pageable); +// // 打印 +// System.out.println(page.getTotalElements()); +// System.out.println(page.getTotalPages()); +// } +// +// /** +// * 为了给分页制造一点数据 +// */ +// private void testInsert() { +// for (int i = 1; i <= 100; i++) { +// SolrProductDO product = new SolrProductDO(); +// product.setId(i); // 一般 ES 的 ID 编号,使用 DB 数据对应的编号。这里,先写死 +// product.setName("芋道源码:" + i); +// product.setDescription("我只是一个描述"); +// product.setCid(1); +// product.setCategoryName("技术"); +// productRepository.save(product); +// } +// } + +} diff --git a/lab-66/lab-66-spring-data-solr/src/test/java/cn/iocoder/springboot/lab15/springdatasolr/repository/ProductRepository03Test.java b/lab-66/lab-66-spring-data-solr/src/test/java/cn/iocoder/springboot/lab15/springdatasolr/repository/ProductRepository03Test.java new file mode 100644 index 00000000..75302726 --- /dev/null +++ b/lab-66/lab-66-spring-data-solr/src/test/java/cn/iocoder/springboot/lab15/springdatasolr/repository/ProductRepository03Test.java @@ -0,0 +1,26 @@ +package cn.iocoder.springboot.lab15.springdatasolr.repository; + +import cn.iocoder.springboot.lab15.springdatasolr.Application; +import cn.iocoder.springboot.lab15.springdatasolr.dataobject.SolrProductDO; +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.util.List; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = Application.class) +public class ProductRepository03Test { + + @Autowired + private ProductRepository03 productRepository; + + @Test + public void testFindByCustomQuery() { + List products = productRepository.findByCustomQuery("技术"); + System.out.println(products.size()); + } + +} diff --git a/lab-66/《芋道 Spring Boot Web Solr 入门》.md b/lab-66/《芋道 Spring Boot Web Solr 入门》.md new file mode 100644 index 00000000..65412077 --- /dev/null +++ b/lab-66/《芋道 Spring Boot Web Solr 入门》.md @@ -0,0 +1 @@ + diff --git a/pom.xml b/pom.xml index eccf3941..c89c0aa5 100644 --- a/pom.xml +++ b/pom.xml @@ -76,6 +76,7 @@ + @@ -109,7 +110,6 @@ - lab-66