横空出世、MyBatis-Plus同款ES ORM框架,用起来够优雅

使用过Spring Data操作ES的小伙伴应该有所了解,它只能实现一些非常基本的数据管理工作,一旦遇到稍微复杂点的查询,基本都要依赖ES官方提供的RestHighLevelClient,Spring Data只是在其基础上进行了简单的封装。最近发现一款更优雅的ES ORM框架Easy-Es,使用它能像MyBatis-Plus一样操作ES,今天就以mall项目中的商品搜索功能为例,来聊聊它的使用!

Easy-Es简介

Easy-Es(简称EE)是一款基于Elasticsearch(简称ES)官方提供的RestHighLevelClient打造的ORM开发框架,在RestHighLevelClient的基础上,只做增强不做改变,为简化开发、提高效率而生。EE和Mybatis-Plus(简称MP)的用法非常相似,如果你之前使用过MP的话,应该能很快上手EE。EE的理念是:把简单、易用、方便留给用户,把复杂留给框架。

EE的主要特性如下:

  • 全自动索引托管:开发者无需关心索引的创建、更新及数据迁移等繁琐步骤,框架能自动完成。

  • 屏蔽语言差异:开发者只需要会MySQL的语法即可使用ES。

  • 代码量极少:与直接使用官方提供的RestHighLevelClient相比,相同的查询平均可以节省3-5倍的代码量。

  • 零魔法值:字段名称直接从实体中获取,无需手写。

  • 零额外学习成本: 开发者只要会国内最受欢迎的Mybatis-Plus用法,即可无缝迁移至EE。

MySQL与Easy-Es语法对比

首先我们来对MySQL、Easy-Es和RestHighLevelClient的语法做过对比,来快速学习下Easy-Es的语法。

MySQL Easy-Es es-DSL/es java api
and and must
or or should
= eq term
!= ne boolQueryBuilder.mustNot(queryBuilder)
> gt QueryBuilders.rangeQuery('es field').gt()
>= ge .rangeQuery('es field').gte()
< lt .rangeQuery('es field').lt()
<= le .rangeQuery('es field').lte()
like '%field%' like QueryBuilders.wildcardQuery(field,value)
not like '%field%' notLike must not wildcardQuery(field,value)
like '%field' likeLeft QueryBuilders.wildcardQuery(field,*value)
like 'field%' likeRight QueryBuilders.wildcardQuery(field,value*)
between between QueryBuilders.rangeQuery('es field').from(xx).to(xx)
notBetween notBetween must not QueryBuilders.rangeQuery('es field').from(xx).to(xx)
is null isNull must not QueryBuilders.existsQuery(field)
is notNull isNotNull QueryBuilders.existsQuery(field)
in in QueryBuilders.termsQuery(" xx es field", xx)
not in notIn must not QueryBuilders.termsQuery(" xx es field", xx)
group by groupBy AggregationBuilders.terms()
order by orderBy fieldSortBuilder.order(ASC/DESC)
min min AggregationBuilders.min
max max AggregationBuilders.max
avg avg AggregationBuilders.avg
sum sum AggregationBuilders.sum
order by xxx asc orderByAsc fieldSortBuilder.order(SortOrder.ASC)
order by xxx desc orderByDesc fieldSortBuilder.order(SortOrder.DESC)
- match matchQuery
- matchPhrase<
Mybatis-PlusMybatis的增强工具,在Mybatis的基础上只做增强不做改变,简化了CRUD操作,提供了代码生成器等功能,使得开发更加高效。下面是使用Mybatis-Plus的步骤: 1.添加依赖 在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3.1</version> </dependency> ``` 2.配置文件 在application.yml文件中添加以下配置: ```yaml mybatis-plus: mapper-locations: classpath*:mapper/*.xml # mapper文件的位置 type-aliases-package: com.example.demo.entity # 实体类的位置 ``` 3.编写实体类 ```java @Data public class User { private Long id; private String name; private Integer age; private String email; } ``` 4.编写Mapper接口 ```java public interface UserMapper extends BaseMapper<User> { } ``` 5.编写Mapper XML文件 ```xml <?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="com.example.demo.mapper.UserMapper"> <resultMap id="BaseResultMap" type="com.example.demo.entity.User"> <id column="id" property="id"/> <result column="name" property="name"/> <result column="age" property="age"/> <result column="email" property="email"/> </resultMap> </mapper> ``` 6.使用Mybatis-Plus进行CRUD操作 ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public User getUserById(Long id) { return userMapper.selectById(id); } @Override public List<User> getUserList() { return userMapper.selectList(null); } @Override public int addUser(User user) { return userMapper.insert(user); } @Override public int updateUser(User user) { return userMapper.updateById(user); } @Override public int deleteUserById(Long id) { return userMapper.deleteById(id); } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值