简介:可以先去看看官网的地址,对你有帮助:https://docs.spring.io/spring-data/elasticsearch/docs/4.1.2/reference/html/#repositories.core-concepts
常用的crud
public interface CrudRepository<T, ID> extends Repository<T, ID> {
<S extends T> S save(S entity); //保存
Optional<T> findById(ID primaryKey); //根据id查询
Iterable<T> findAll(); //查全部
long count(); //统计
void delete(T entity); //删除
boolean existsById(ID primaryKey); //判断id是否存在
}
@Test
public void findAll(){
//设置分页
// Pageable pageable = PageRequest.of(0, 5);
// Iterable all = esProductRepository.findAll(pageable);
Iterable<EsProduct> all = esProductRepository.findAll();
Iterator<EsProduct> iterator = all.iterator();
while(iterator.hasNext()){
EsProduct next = iterator.next();
System.out.println("输出:"+next);
}
System.out.println("111");
}
输出:
@Test
public void findAllById() {
Optional byId = esProductRepository.findById((long) 9);
EsProduct esProduct = byId.get();
System.out.println("输出:"+esProduct);
}
@Test
public void count() {
long count = esProductRepository.count();
System.out.println("全部数据:"+count);
}
@Test
public void existsById(){
boolean existsById = esProductRepository.existsById((long) 9);
if(existsById){
System.out.println("哈哈哈哈");
}
else{
System.out.println("不存在");
}
@Test
public void delete(){
esProductRepository.deleteById((long)9);
esProductRepository.deleteAll();
//根据实体类条件删除
EsProduct esProduct = new EsProduct();
esProductRepository.delete(esProduct);
}
@Test
public void save(){
EsProduct esProduct = new EsProduct();
esProductRepository.save(esProduct);
}
@Test
public void update() {
EsProduct esProduct = new EsProduct();
esProduct.setId((long)9);
esProduct.setProductName("红红火火恍恍惚惚或我改了");
esProductRepository.save(esProduct);
}
首先,要先继承ElasticsearchRepository
public interface xxxRepository extends ElasticsearchRepository<xxx, Long> {
}
左边先写你要的数据 然后右边一般是get或者find…等等
eg:
/***
* 根据id查找
* @param id
* @return
*/
EsProduct getAllById(Long id);
@Test
public void findAllById() {
Optional<EsProduct> byId = esProductRepository.findById((long) 9);
EsProduct oneData = esProductRepository.getAllById((long) 9);
System.out.println("输出oneData:"+oneData);
EsProduct esProduct = byId.get();
System.out.println("输出:"+esProduct);
}
运行结果都是输出:
其他的一些简单的查询例子如下:
public interface EsProductRepository extends ElasticsearchRepository<EsProduct, Long> {
//需注意,这些方法不是写死的,要对应你封装的实体类,也可以在该方法再进行扩展
//eg:countByProductNameAnd....
/***
* 根据商品名字统计s
* @param productName
* @return
*/
long countByProductName(String productName);
/***
* 根据用户名称删除
* @param productName
* @return
*/
long deleteByProductName(String productName);
/***
* 根据商品名称查询
* @param productName
* @return
*/
List<EsProduct> getAllByProductName(String productName);
/***
* 按价格进行降序排序
* @return
*/
List<EsProduct> findEsProductsByOrderByPriceDesc();
/***
* 按价格进行降序升序,并分页
* @param page
* @return
*/
Page<EsProduct> findEsProductsByOrderByPriceAsc(Pageable page);
/***
* 模糊查询商品名称并分页
* @param productName
* @param page
* @return
*/
Page<EsProduct> findEsProductsByProductNameLike(String productName,Pageable page);
/***
* 根据商品名称进行流的查询
* @param productName
* @return
*/
Stream<EsProduct> findEsProductsByProductName(String productName);
}
条件是productName 或者 subTitle 或者 keywords 都可以查到。
public interface EsProductRepository extends ElasticsearchRepository<EsProduct, Long> {
/**
* 搜索查询
*
* @param productName 商品名称
* @param subTitle 商品标题
* @param keywords 商品关键字
* @param page 分页信息
* @return
*/
Page<EsProduct> findByProductNameOrSubTitleOrKeywords(String productName, String subTitle, String keywords, Pageable page);
}
写法注意
1.要采用驼峰命名法。
2.方法名称productName 和 subTitle 和 keywords 都是数据库属性有的,名字都要对应上。
@Test
public void findByProductNameOrSubTitleOrKeywords(){
//开启分页
Pageable pageable = PageRequest.of(0, 5);
Page<EsProduct> byProductNameOrSubTitleOrKeywords = esProductRepository.findByProductNameOrSubTitleOrKeywords("小米", "海澜之家", "便宜", pageable);
System.out.println("输出:"+byProductNameOrSubTitleOrKeywords);
}
运行结果:可以看出,都没任何问题。
来表达存储库方法的可空性约束。它们在运行时提供了一种工具友好的方法和选择加入null
检查,如下所示:
@NonNullApi
:在包级别上用于声明参数和返回值的默认行为分别是既不接受也不产生null
值。@NonNull
: 用于不能使用的参数或返回值null
(在适用的情况下不需要用于参数和返回值@NonNullApi
)。@Nullable
: 用在参数或返回值上即可null
。eg:List
/***
* 根据商品名称进行流的查询
* @param productName
* @return
*/
Stream<EsProduct> findEsProductsByProductName(String productName);
/***
* 根据商品名称查询
* @param productName
* @return
*/
@Async
List<EsProduct> getAllByProductName(@Nullable String productName);
个人搭建项目代码地址:
https://github.com/hongjiatao/spring-boot-anyDemo
欢迎收藏点赞三连。谢谢!有问题可以留言博主会24小时内无偿回复。