当前位置: 首页 > news >正文

礼品做便宜的网站网络营销品牌案例

礼品做便宜的网站,网络营销品牌案例,亚马逊雨林电影,南昌网站建设目录 问题背景 解决方案 编写es的mapper 动态dsl编写 使用mapper获取动态dsl 远程调用restful api查询 问题背景 在大数据量的业务系统中,一般都会引入Elasticsearch来作为搜索引擎,而搜索的条件又是多种多样的。回顾下,如果是mysql等…

目录

问题背景

解决方案

编写es的mapper

动态dsl编写

使用mapper获取动态dsl

远程调用restful api查询


问题背景

在大数据量的业务系统中,一般都会引入Elasticsearch来作为搜索引擎,而搜索的条件又是多种多样的。回顾下,如果是mysql等这种关系型数据库来作为存储介质呢?我们是不是可以通过mybatis的动态sql解析功能就能轻轻松松的搞定。

或许你也许会问,es不是提供了java版本的sdk么,通过sdk可以动态的构建dsl语句的,确实如此,不过这样的可读性远远没有将dsl放在xml中,可以看下在java代码中操作es的代码案例

public static void main(String[] args) throws IOException {// 初始化RestHighLevelClientRestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "http"));RestHighLevelClient client = new RestHighLevelClient(builder);// 创建查询条件SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();searchSourceBuilder.query(QueryBuilders.matchQuery("fieldname", "value")); // 动态查询字段名和值// 创建搜索请求SearchRequest searchRequest = new SearchRequest("indexname"); // 指定索引名searchRequest.source(searchSourceBuilder);// 执行搜索SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);// 处理搜索结果SearchHits hits = searchResponse.getHits();for (SearchHit hit : hits) {System.out.println(hit.getSourceAsString());}// 关闭客户端client.close();}

mybatis的执行流程中,就是通过SqlSessionFactory创建SqlSession,有了SqlSession可以开始执行sql,执行sql的时候,会将动态的sql转成一个MappedStatement,通过这个可以创建BoundSql,我们是不是可以利用mybatis执行mysql的一部分功能,拿到BoundSql,然后通过http的方式直接远程调用es查询?

答案是可行的

解决方案

编写es的mapper

package com.tml.mouseDemo.mapper;import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;@Mapper
public interface ESMapper {String queryOrderById(@Param("name") String name, @Param("id") String id);
}

动态dsl编写

<?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.tml.mouseDemo.mapper.ESMapper"><select id="queryOrderById" resultType="string">{"query":{"bool":["term":{"id":"${id}"}<if test="name!=null">,"term":{"name":"${name}"}</if>]}}</select>
</mapper>

dsl的语法就不多介绍了,在这个xml文件中,可以使用mybatis的<if> <when> <choose> <foreach>等诸多标签,通过这些个标签的组合,你可以编写多条件检索的复杂dsl

使用mapper获取动态dsl

    @Testpublic void testEs() {Map<String, String> map = new HashMap<>();map.put("name", "tml");map.put("id", "hello world");BoundSql bSql = sessionFactory.getConfiguration().getMappedStatement("queryOrderById").getBoundSql(map);log.info("bSql:{}", bSql.getSql());
}

其中,sessionFactory是通过spring的自动注入的

@Autowired
private SqlSessionFactory sessionFactory;

远程调用restful api查询

拿到dsl以后,就可以通过http远程调用restful api拿到结果了,通过httpClient或者是RestTemplate实现都行,这里就不赘述了。

http://www.tj-hxxt.cn/news/57874.html

相关文章:

  • wordpress换域名不能访问企业网站seo诊断工具
  • 网站客服的调研工作怎么做网络宣传方式
  • 网站icp不备案有关系吗中国十大网站有哪些
  • 360建筑网app下载欧美seo查询
  • 网站开发需要多少钱app重庆关键词自动排名
  • 石家庄建设网站公司中国最新新闻
  • 免费漫画网站网站seo优化公司
  • seo模拟点击软件源码郑州seo线上推广系统
  • 怎样防止别人利用自己的电脑做网站服务器企业培训考试
  • 做网站顺序关键词推广操作
  • 萍乡网站开发公司谷歌推广哪家好
  • 四川采集app山东seo首页关键词优化
  • 定陶住房和城乡建设局网站谷歌paypal下载
  • 备案号查询系统廊坊快速排名优化
  • 做牛排的网站网站结构
  • 专业网站定制平台b站官方推广
  • 怎么把网站放到服务器长沙网站关键词推广
  • 可以做仿真实验的网站长沙网站seo诊断
  • 上线了相同网站seo合作
  • 做企业网站设计灰色行业关键词推广
  • 做网站找个人市场调研报告怎么做
  • 网站开发预算表竞价排名服务
  • 做汽车特卖会的网站企业宣传片文案
  • 天津企业网站设计哪家好常德seo招聘
  • 网站公司排行榜十大放黄不登录不收费
  • 深圳网站建设公司乐云seo企业网站推广方案设计毕业设计
  • 多语言网站电商培训机构排名
  • 怎么建立一个网站让外国人浏览品牌广告语
  • 深圳包装设计公司排名前十强seo优化网站百度技术
  • 企业网站建设 详细方案国际财经新闻