Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >数据接口工程对接BI可视化大屏(五)数据接口发布

数据接口工程对接BI可视化大屏(五)数据接口发布

作者头像
Maynor
发布于 2023-09-11 06:22:11
发布于 2023-09-11 06:22:11
34000
代码可运行
举报
运行总次数:0
代码可运行

第5章 数据接口发布

这里基于MVC开发范式完成数据接口程序的搭建。

5.1 编写Service

可视化大屏共需要8个数据接口,根据数据接口的返回值类型编写Service层的相关方法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface DataInterfaceService
 {
 //查询Mysql中某天分钟级别的下单和退单数
 JSONObject queryOrderStatsByDate(String dt);
//从redis中查询各手机的访问量
 JSONObject queryVisitStatsTop5();
//从ck中查询各手机当日的销售额
 JSONObject querySalesAmountToday();
//从ck统计每个手机品牌在昨日和今日的总销售额
 JSONObject querySalesAmount();
//从ES中查询各来源数
 JSONObject querySourceData();
//从ES中查询行业信息
 JSONObject queryIndustryStats();
//从hbase中查询各省份今日的订单数和销售额
 JSONObject queryProvinceStatToday();
//从hbase中查询各省份的目标完成进度
 JSONObject queryProviceCompletion(String city);
 }

5.2 从MySQL中返回数据

数据结构

案例一:查询MySQL中某天分钟级别的下单和退单数。效果图如下:

读取MySQL可以使用JDBC来读取,这里使用Mybatis简化JDBC操作。

5.2.*1 封装Bean

@Data @NoArgsConstructor @AllArgsConstructor public class OrderStats { private String dt; private Integer orderCount; private Integer refundCount; }

封装日期,下单数和退单数三个字段。

5.2.*2 编写Mapper

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@DS(“mysql”)
 @Mapper
 public interface MysqlMapper
 {
 //查询当天每分钟的退单数和订单数
 @Select("SELECT " +
 " DATE_FORMAT(dt,‘%H:%I’) dt, " +
 " SUM(orderCount) orderCount, " +
 " SUM(refundCount) refundCount " +
 "FROM di " +
 "WHERE DATE(dt)=#{date} " +
 "GROUP BY DATE_FORMAT(dt,‘%H:%I’) ")
 List queryOrderStatsByDate(@Param(“date”) String dt);
 }

使用@DS注解指定Mapper连接的数据源。编写方法,通过日期查询当天的每分钟的下单数和退单数。

使用@Mapper注解标注类可以让Spring容器启动时,使用Mybatis的动态代理技术在容器中为接口创建一个实例。

5.2.3 编写ServiceImpl

根据可视化图表中接口需要返回的数据格式,编写Service的方法实现。

通常{ }格式可以使用Map或JSONObject对象封装。而[ ]格式可以使用List或JSONArray对象封装。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Service
 public class DataInterfaceServiceImpl implements DataInterfaceService
 {
@Autowired
private MysqlMapper mysqlMapper;
@Override
public JSONObject queryOrderStatsByDate(String dt) {if (null == dt){
​ dt = LocalDate.now().toString();}
​ List data = mysqlMapper.queryOrderStatsByDate(dt);
​ System.out.println(data);
​ List ocs = data.stream().map(d -> d.getOrderCount()).collect(Collectors.toList());
​ List rcs = data.stream().map(d -> d.getRefundCount()).collect(Collectors.toList());
​ List dts = data.stream().map(d -> d.getDt()).collect(Collectors.toList());
​ JSONObject oJO = new JSONObject();
​ oJO.put(“name”,“新增订单数”);
​ oJO.put(“data”,ocs);
​ JSONObject rJO = new JSONObject();
​ rJO.put(“name”,“退单数”);
​ rJO.put(“data”,rcs);
​ List series = new ArrayList<>(2);
​ series.add(oJO);
​ series.add(rJO);
​ JSONObject dataJO = new JSONObject();
​ dataJO.put(“categories”,dts);
​ dataJO.put(“series”,series);
​ JSONObject result = new JSONObject();
​ result.put(“status”,0);
​ result.put(“msg”,“”);
​ result.put(“data”,dataJO);return result ;
}
}
5.2.4 编写Controller
使用@RestController注解可以标识当前类为控制器,并且可以将处理方法的返回值作为数据写入响应体返回。
@RestController
 public class DataInterfaceController
 {
 @Autowired
 private DataInterfaceService dIService;
@RequestMapping(value =/orderStats”)
 public Object queryOrderStats(String date){
 return dIService.queryOrderStatsByDate(date);
 }
}

5.2.5 测试

5.3 从Redis中返回数据

源数据结构: key=hotphone, valueType=zset。member为手机品牌,score为热度值。

案例二:在Redis中查询实时访问量前5的热点手机品牌。效果图:

5.3.1 封装Bean

此案例需要的数据字段个数较少,可以不封装Bean。

5.3.2 编写Mapper

Redis为NoSQL数据库,可以使用Spring提供的RedisTemplate客户端进行操作,因此也无需封装Mapper。

5.3.3 编写ServiceImpl

根据可视化图表中接口需要返回的数据格式,编写Service的方法实现。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Service
 public class DataInterfaceServiceImpl implements DataInterfaceService
 {
@Autowired
private RedisTemplate<String,String> redisTemplate;
@Override
public JSONObject queryVisitStatsTop5() {
​ Set<ZSetOperations.TypedTuple> typedTuples = redisTemplate.opsForZSet().reverseRangeWithScores(redisDataKey, 0, 4);
​ List scores = new ArrayList<>();
​ List brands = new ArrayList<>();
​ List series = new ArrayList<>(1);for (ZSetOperations.TypedTuple t : typedTuples) {
​ scores.add(t.getScore());
​ brands.add(t.getValue());}
​ JSONObject result = getJsonObject(scores, brands, series);return result;
}
}

5.3.4 编写Controller

使用@RestController注解可以标识当前类为控制器,并且可以将处理方法的返回值作为数据写入响应体返回。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RestController
 public class DataInterfaceController
 {
 @Autowired
 private DataInterfaceService dIService;
@RequestMapping(value =/phoneVistTop5”)
public Object queryPhoneVistTop5(){return dIService.queryVisitStatsTop5();
}
}

5.3.5 测试

5.4 从Clickhouse中返回数据

源数据结构:

案例三:从ck中查询各手机当日的销售额。效果图:

案例四:从ck中计算每个手机品牌昨天和今天的总销售额。效果图:

读取Clickhouse可以使用JDBC来读取,这里使用Mybatis简化JDBC操作。

5.4.1 封装Bean

//案例三

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PhoneSales
{
private String brand;
private Double salesAmount;
}
//案例四
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PhoneSalesCompare
{
private String brand;
private Double todaySalesAmount;
private Double yestodaySalesAmount;
}

5.4.2 编写Mapper

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Mapper
@DS(“ck”)
public interface CKMapper
{
//案例三
@Select(“select brand,sum(saleAmount) salesAmount from di where dt = #{dt} group by brand”)
List queryPhoneSalesToday(String dt);
//案例四
@Select("select " +" ifNull(t1.brand,t2.brand) brand, " +" ifNull(todayAmount,0.0) todaySalesAmount, " +" ifNull(yestodayAmount,0.0) yestodaySalesAmount " +"from " +"(select brand,sum(saleAmount) todayAmount from di where toDate(dt) = today() group by brand) t1 " +"full join " +"(select brand,sum(saleAmount) yestodayAmount from di where toDate(dt) = yesterday() group by brand) t2 " +"on t1.brand = t2.brand ")
List queryPhoneSales();
}

5.4.3 编写ServiceImpl

根据可视化图表中接口需要返回的数据格式,编写Service的方法实现。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Service
 public class DataInterfaceServiceImpl implements DataInterfaceService
 {
@Autowired
private CKMapper ckMapper;

//案例三

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Override
public JSONObject querySalesAmountToday() {
​ List datas = ckMapper.queryPhoneSalesToday(LocalDate.now().toString());
​ List scores = new ArrayList<>();
​ List brands = new ArrayList<>();
​ List series = new ArrayList<>(1);for (PhoneSales data : datas) {
​ scores.add(data.getSalesAmount());
​ brands.add(data.getBrand());}
​ JSONObject result = getJsonObject(scores, brands, series);return result;
}

//案例四

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Override
public JSONObject querySalesAmount() {
​ List data = ckMapper.queryPhoneSales();
​ List today = new ArrayList<>();
​ List yesterday = new ArrayList<>();
​ List brands = new ArrayList<>();
​ List series = new ArrayList<>(2);for (PhoneSalesCompare d : data) {
​ today.add(d.getTodaySalesAmount());
​ yesterday.add(d.getYestodaySalesAmount());
​ brands.add(d.getBrand());}
​ JSONObject todayJO = new JSONObject();
​ JSONObject yesterdayJO = new JSONObject();
​ JSONObject result = new JSONObject();
​ JSONObject dataJO = new JSONObject();
​ todayJO.put(“name”,“今天”);
​ todayJO.put(“data”,today);
​ yesterdayJO.put(“name”,“昨天”);
​ yesterdayJO.put(“data”,yesterday);
​ series.add(todayJO);
​ series.add(yesterdayJO);
​ dataJO.put(“categories”,brands);
​ dataJO.put(“series”,series);
​ result.put(“status”,0);
​ result.put(“msg”,“”);
​ result.put(“data”,dataJO);return result;
}
}

5.4.4 编写Controller

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RestController
 public class DataInterfaceController
 {
 @Autowired
 private DataInterfaceService dIService;

//案例三
@RequestMapping(value =/phoneSalesAmount”)
public Object queryPhoneSalesAmountToday(){return dIService.querySalesAmountToday();
}
//案例四
@RequestMapping(value =/phoneSalesAmountCompare”)
public Object queryPhoneSalesAmount(){return dIService.querySalesAmount();
}
 }

5.4.5 测试

案例三:

案例四:

5.5 从ES中返回数据

源数据结构:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{ “mappings”:
{ “_doc”:
{ “properties”:
{
“_class”:
{ “type”: “keyword”, “index”: false, “doc_values”: false },
“id”: { “type”: “long” },
“name”: { “type”: “keyword” },
“profession”: { “type”: “keyword” },
“sex”: { “type”: “keyword” },
“source”: { “type”: “keyword” }
}
}
}
}

案例五:查询ES中手机购买用户的访问渠道统计信息。效果图:

案例六:查询ES中手机购买用户的行业背景及性别比例。效果图:

ES是NoSql数据库,这里使用SpringData中提供的ElasticsearchRestTemplate客户端访问数据库。

5.5.1 封装Bean

封装Bean映射ES目标index中的数据模型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = “di”)
public class Customer
{
@Id
private Integer id;
@Field(type = FieldType.Keyword)
private String name;
@Field(type = FieldType.Keyword)
private String sex;
@Field(type = FieldType.Keyword)
private String source;
@Field(type = FieldType.Keyword)
private String profession;
}

5.5.2 编写Dao及Impl

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface ESDao
{
 SearchHits queryFromES(AbstractAggregationBuilder aggregationBuilder,Class t);
}
在ESDao中编写通用的聚合查询方法。并提供实现如下:
@Repository
 public class ESDaoImpl implements ESDao
 {
 @Autowired
 private ElasticsearchRestTemplate et;
 @Override
 public SearchHits queryFromES(AbstractAggregationBuilder aggregationBuilder, Class t) {
 Query query = new NativeSearchQueryBuilder()
 .addAggregation(aggregationBuilder)
 .build();
​ SearchHits searchHits = et.search(query, t);return searchHits;
 }
 }

5.5.3 编写ServiceImpl

根据可视化图表中接口需要返回的数据格式,编写Service的方法实现。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Service
 public class DataInterfaceServiceImpl implements DataInterfaceService
 {
@Autowired
private ESDao esDao;
//案例五
@Override
public JSONObject querySourceData() {
​ TermsAggregationBuilder aggregation = AggregationBuilders.terms(“sc”).field(“source”);
​ SearchHits searchHits = esDao.queryFromES(aggregation, Customer.class);
​ Aggregations aggregations = searchHits.getAggregations();
​ Terms tagg= aggregations.get(“sc”);
​ List<? extends Terms.Bucket> elasticBucket = tagg.getBuckets();
​ List data = new ArrayList<>();
​ elasticBucket.forEach(el -> {
​ data.add(new SourceInfo(el.getKeyAsString(),el.getDocCount()));});
​ JSONObject jsonObject = new JSONObject();
​ jsonObject.put(“status”,0);
​ jsonObject.put(“msg”,“”);
​ jsonObject.put(“data”,data);return jsonObject;
}
//案例六
@Override
public JSONObject queryIndustryStats() {
​ TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders
​ .terms(“pc”).field(“profession”).size(10).subAggregation(AggregationBuilders.terms(“sc”).field(“sex”).size(2));
​ SearchHits searchHits = esDao.queryFromES(termsAggregationBuilder, Customer.class);
​ Aggregations aggregations = searchHits.getAggregations();
​ List categeryList = new ArrayList<>();
​ List maleList = new ArrayList<>();
​ List femaleList = new ArrayList<>();
​ Terms byCompanyAggregation = aggregations.get(“pc”);
​ List<? extends Terms.Bucket> elasticBucket = byCompanyAggregation.getBuckets();
​ elasticBucket.forEach(el -> {
​ categeryList.add(el.getKeyAsString());
​ Terms sexAggregation = el.getAggregations().get(“sc”);
​ List<? extends Terms.Bucket> buckets = sexAggregation.getBuckets();
​ buckets.forEach(d -> {if (“男”.equals(d.getKeyAsString())) {
​ double malePercent = d.getDocCount() * 100 / el.getDocCount() ;
​ maleList.add((int)malePercent);
​ femaleList.add(100 - (int)malePercent);}});});
​ List series = Arrays.asList(new IndustryInfo(“男”,%, maleList),new IndustryInfo(“女”,%, femaleList));
​ JSONObject dataJO = new JSONObject();
​ dataJO.put(“categories”,categeryList);
​ dataJO.put(“series”,series);
​ dataJO.put(“yUnit”,%);
​ JSONObject resultJO = new JSONObject();
​ resultJO.put(“status”,0);
​ resultJO.put(“msg”,“”);
​ resultJO.put(“data”,dataJO);return resultJO;
}
}

5.5.4 编写Controller

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RestController
 public class DataInterfaceController
 {
 @Autowired
 private DataInterfaceService dIService;
//案例五
@RequestMapping(value =/sourceInfo”)
public Object querySourceInfo(){return dIService.querySourceData();
}
//案例六
@RequestMapping(value =/sexcompare”)
public Object querySexcompare(){return dIService.queryIndustryStats();
}
 }
5.5.5 测试

案例五:

案例六:

5.6 从HBase中返回数据

源数据结构:

案例七:查询各省份今日的订单数和销售额。效果图:

案例八:查询各省份今日的千万销售额目标完成进度。效果图:

HBase是一个NoSQL数据库,这里使用Phoenix编写SQL查询HBase。Phoenix支持JDBC操作,这里使用Mybatis简化JDBC操作。

5.6.1 封装Bean

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProvinceStat
{
private String name;
private Double value;
private Integer sizeValue;
private String url = “sugar.baidu.com”;
}

5.6.2 编写Mapper

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Mapper
@DS(“hbase”)
public interface HBaseMapper
{
//案例七
@Select("select province name , sum(ordercount) sizeValue , sum(saleamount) “value” " +" from di " +" where substr(to_char(saletime),1,10) = #{date} " +" group by province")
List queryProvinceStatToday(String date);
//案例八
@Select("select sum(saleamount) " +" from di " +" where substr(to_char(saletime),1,10) = #{date}" +" and province = #{name}")
Double queryCompletionByProvinceName(@Param(“name”) String name,@Param(“date”) String date);
}
5.6.3 编写ServiceImpl
根据可视化图表中接口需要返回的数据格式,编写Service的方法实现。
@Service
 public class DataInterfaceServiceImpl implements DataInterfaceService
 {
@Autowired
private HBaseMapper hBaseMapper;
//案例七
@Override
public JSONObject queryProvinceStatToday() {
​ List mapData = hBaseMapper.queryProvinceStatToday(LocalDate.now().toString());
​ JSONObject dataJO = new JSONObject();
​ dataJO.put(“mapData”,mapData);
​ dataJO.put(“valueName”,“销售额”);
​ dataJO.put(“sizeValueName”,“下单数”);
​ JSONObject result = new JSONObject();
​ result.put(“status”,0);
​ result.put(“msg”,“”);
​ result.put(“data”,dataJO);return result;
}
//案例八
@Override
public JSONObject queryProviceCompletion(String city) {
​ Double amount = hBaseMapper.queryCompletionByProvinceName(city, LocalDate.now().toString());
​ double completion = 0;if (amount==null){
​ completion = 0;}else if (amount >= 1000000){
​ completion = 100;}else{
​ completion = amount / 10000000 * 100;}
​ JSONObject result = new JSONObject();
​ result.put(“status”,0);
​ result.put(“msg”,“”);
​ result.put(“data”,completion);return result;
}
}

5.6.4 编写Controller

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RestController
 public class DataInterfaceController
 {
 @Autowired
 private DataInterfaceService dIService;
//案例七
@RequestMapping(value =/provinceStatsToday”)
public Object queryProvinceStatsToday(){return dIService.queryProvinceStatToday();
}
//案例八
@RequestMapping(value =/provinceCompletionToday”)
public Object queryProviceCompletion(String city){return dIService.queryProviceCompletion(city);
}
 }

5.6.5 测试

案例七:

案例八:

5.7 发布数据接口

将程序打包后部署到拥有公网IP的机器,或者也可以在window本地启动应用程序。

之后使用内网穿透工具,将项目的访问端口暴露到公网。

5.8 对接SugarBI

在SugarBI管理界面中点击编辑按钮:

点击对应图例,在后侧菜单栏中进行编辑,选择数据接收方式为API拉取,并填写之前控制器中对应方法绑定的API,调整数据刷新时间。

点击调试按钮,可以对数据格式是否符合要求进行验证:

之后点击保存后可以将BI看板分享或者发布。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ES进阶 -- Java客户端
1. java集成es快速入门 参照 //快速入门 @Test void testmatchall() throws IOException { //1.准备request SearchRequest request = new SearchRequest("hotel"); //2. 准备dsl request.source().query(QueryBuilders.matchAllQuery());
用户10521079
2023/05/04
1.6K0
ES进阶 -- Java客户端
数据接口工程对接BI可视化大屏(六)接收前台数据
在工作中也会遇到需要接收前台发送数据,进行存储的情况。这里以接收日志服务器的日志数据保存到kafka为例。
Maynor
2023/09/12
2030
数据接口工程对接BI可视化大屏(六)接收前台数据
elasticsearch实践之代码结构设计
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/linzhiqiang0316/article/details/81192994
林老师带你学编程
2019/05/26
1.2K0
ElasticSearch分布式搜索引擎——从入门到精通
elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容
不吃紫菜
2023/02/13
3.6K0
ElasticSearch分布式搜索引擎——从入门到精通
8_搭建商城搜索微服务[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/152834.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/12
6980
8_搭建商城搜索微服务[通俗易懂]
SpringBoot+Mybatis实现分页查询[通俗易懂]
分页查询是在web开发中常用的一种技术,当某个页面查询返回的数据量较大时,为了提高性能和用户体验不能将所有数据一次性返回给过前端,这时候就需要用到分页查询了
全栈程序员站长
2022/08/22
3.8K0
SpringBoot+Mybatis实现分页查询[通俗易懂]
elasticsearch[四]-数据聚合排序查询、搜索框自动补全、数据同步、集群
**聚合(aggregations)**可以让我们极其方便的实现对数据的统计、分析、运算。例如:
汀丶人工智能
2024/01/17
5810
elasticsearch[四]-数据聚合排序查询、搜索框自动补全、数据同步、集群
ElasticSearch高级操作
term查询,查询text类型字段时,只有其中的单词相匹配都会查到,text字段会对数据进行分词
小炜同学
2022/09/23
8240
③【MyBatis】操作数据库,进行增删改查,MyBatisX插件简化开发
设置Mapper映射文件,其名字与Mapper接口一致,与Mapper接口放在同一目录下:
.29.
2024/03/14
3000
③【MyBatis】操作数据库,进行增删改查,MyBatisX插件简化开发
ElasticSearch全文搜索引擎 -Spring Boot操作ES(SpringData概述、Spring Data Elasticsearch、基本操作、ElasticSearch操作文档)
Spring Data是spring提供的一套连接各种第三方数据源的框架集,它支持连接很多第三方数据源,例如:
鱼找水需要时间
2023/02/16
2.6K0
ElasticSearch全文搜索引擎 -Spring Boot操作ES(SpringData概述、Spring Data Elasticsearch、基本操作、ElasticSearch操作文档)
商城项目-生成分类和品牌过滤
先来看分类和品牌。在我们的数据库中已经有所有的分类和品牌信息。在这个位置,是不是把所有的分类和品牌信息都展示出来呢?
cwl_java
2020/02/11
5960
商城项目-生成规格参数过滤
如果用户尚未选择商品分类,或者聚合得到的分类数大于1,那么就没必要进行规格参数的聚合。因为不同分类的商品,其规格是不同的。
cwl_java
2020/02/11
9040
ES实战系列01:基于SpringBoot和RestHighLevelClient 快速搭建博客搜索系统
通过4个博客检索场景,巩固之前所学的全文搜索 Full Text Queries 和 基于词项的 Term lever Queries,同时通过组合查询的Bool query 完成复杂检索,并应用相关度知识对相关性评分进行控制。
方才编程_公众号同名
2020/11/13
1.6K0
ES实战系列01:基于SpringBoot和RestHighLevelClient 快速搭建博客搜索系统
Solr的原理及在项目中的使用实例.
前面已经讲过 如果安装及配置Solr服务器了, 那么现在我们就来正式在代码中使用Solr. 1,这里Solr主要是怎么使用的呢?  当我们在前台页面搜索商品名称关键词时, 我们这时是在Solr库中去查
一枝花算不算浪漫
2018/05/18
1.2K0
谷粒商城-高级篇(检索服务)
将资料中的前端页面放到 search 服务模块下的 resource/templates 下;
OY
2022/03/20
1.3K0
谷粒商城-高级篇(检索服务)
Java Web(二)MyBatis
​ MyBatis 免除了几乎所有的 JDBC 代码​ 以及设置参数和获取结果集的工作
浅辄
2022/11/23
4870
SpringDataElasticsearch的原生操作综合模板
自定义方法无法对应需求需求,SpringDataElasticsearch也支持原生查询,这个时候还是使用ElasticsearchTemplate
用户9006224
2022/12/21
3070
检索业务:构建结果数据与分析
一个风轻云淡
2023/10/15
2420
检索业务:构建结果数据与分析
快速学习ES6-Spring Data Elasticsearch
而是学习Spring提供的套件:Spring Data Elasticsearch。
cwl_java
2020/02/11
1.9K0
springboot集成elasticsearch
  在基础阶段学习ES一般是首先是 安装ES后借助 Kibana 来进行CURD 了解ES的使用;
小勇DW3
2019/05/10
8680
springboot集成elasticsearch
推荐阅读
相关推荐
ES进阶 -- Java客户端
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验