六、集成Spring Boot

6.1 环境的搭建

  • 新建一个空项目

  • 新建一个spring boot模块

  • 发现导入的默认es依赖和我们本地的es版本不一样

  • 自定义es 的版本

    <properties><java.version>1.8</java.version><!--自定义es版本依赖,保证和本地一样--><elasticsearch.version>7.6.1</elasticsearch.version>
    </properties>
    
  • 编写配置类ElasticSearchClientConfig

@Bean
public RestHighLevelClient restHighLevelClient() {RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));return client;
}

6.2 API测试

6.2.1 关于索引的API测试

创建索引

代码实现

@Autowired
@Qualifier("restHighLevelClient")
private RestHighLevelClient client;
//测试索引的创建
@Test
public void testCreateIndex() throws IOException {// 1、创建索引请求CreateIndexRequest request = new CreateIndexRequest("cvzhanshi_index");// 2、客户端执行请求 IndicesClient, 请求后获得响应CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);System.out.println(createIndexResponse);
}

判断索引是否存在

代码实现

//测试获取索引
@Test
void testExistIndex() throws IOException{GetIndexRequest request = new GetIndexRequest("cvzhanshi_index");boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);System.out.println(exists);
}

换一个不存在的索引名字

删除索引

代码实现

// 测试删除索引
@Test
void testDeleteIndex() throws IOException {DeleteIndexRequest request = new DeleteIndexRequest("cvzhanshi_index");//删除AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);System.out.println(delete.isAcknowledged());}


完整代码

@SpringBootTest
class EsApiApplicationTests {@Autowired@Qualifier("restHighLevelClient")private RestHighLevelClient client;//测试索引的创建@Testpublic void testCreateIndex() throws IOException {// 1、创建索引请求CreateIndexRequest request = new CreateIndexRequest("cvzhanshi_index");// 2、客户端执行请求 IndicesClient, 请求后获得响应CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);System.out.println(createIndexResponse);}//测试获取索引@Testvoid testExistIndex() throws IOException{GetIndexRequest request = new GetIndexRequest("cvzhanshi_index1");boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);System.out.println(exists);}// 测试删除索引@Testvoid testDeleteIndex() throws IOException {DeleteIndexRequest request = new DeleteIndexRequest("cvzhanshi_index");//删除AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);System.out.println(delete.isAcknowledged());}
}

6.2.2 关于文档的API测试

创建实体类

/*** @author cVzhanshi* @create 2021-08-14 14:19*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class User {private String name;private int age;
}

导入json依赖

<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.74</version>
</dependency>

添加文档(插入)

代码实现

//测试文档的添加
@Test
public void testAddDocument() throws IOException {//创建对象User user = new User("cvzhanshi", 20);//创建请求IndexRequest request = new IndexRequest("cvzhanshi_index");//规则 put /kuang_index/_doc/1request.id("1");//设置请求超时时间 1srequest.timeout(TimeValue.timeValueSeconds(1));// 将我们的数据放入请求  jsonrequest.source(JSON.toJSONString(user), XContentType.JSON);// 客户端发送请求 , 获取响应的结果IndexResponse indexResponse  = client.index(request, RequestOptions.DEFAULT);System.out.println(indexResponse.toString());System.out.println(indexResponse.status());}


判断文档是否存在

代码实现

//判断文档是否存在
@Test
void testIsExists() throws IOException {GetRequest getRequest = new GetRequest("cvzhanshi_index", "1");// 不获取返回的 _source 的上下文了getRequest.fetchSourceContext(new FetchSourceContext(false));getRequest.storedFields("_none_");boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);System.out.println(exists);}

获取文档信息

代码实现

//获取文档信息
@Test
void testGetDocument() throws IOException {GetRequest getRequest = new GetRequest("cvzhanshi_index", "1");// 不获取返回的 _source 的上下文了//        getRequest.fetchSourceContext(new FetchSourceContext(false));//     getRequest.storedFields("_none_");GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);System.out.println(getResponse);System.out.println(getResponse.getSourceAsString());
}

更新文档信息

代码实现

//获取文档信息
@Test
void testUpdateDocument() throws IOException {UpdateRequest request = new UpdateRequest("cvzhanshi_index","1");request.timeout("1s");User user = new User("cv战士", 21);request.doc(JSON.toJSONString(user),XContentType.JSON);UpdateResponse update = client.update(request, RequestOptions.DEFAULT);System.out.println(update.status());
}

删除文档信息

代码实现

// 删除文档记录
@Test
void testDeleteRequest() throws IOException {DeleteRequest deleteRequest = new DeleteRequest("cvzhanshi_index", "1");deleteRequest.timeout("1s");DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT);System.out.println(deleteResponse.status());
}

批量插入数据

代码实现

// 特殊的,真的项目一般都会批量插入数据!
@Test
void testBulkRequest() throws IOException {BulkRequest bulkRequest = new BulkRequest();bulkRequest.timeout("10s");List<User> userList = new ArrayList<>();userList.add(new User("cvzhanshi",20));userList.add(new User("user",21));userList.add(new User("ursula",22));userList.add(new User("wile",23));userList.add(new User("CVZHANSHI",24));for (int i = 0;i< userList.size();i++){bulkRequest.add(new IndexRequest("cvzhanshi_index").id("" + (i+1)).source(JSON.toJSONString(userList.get(i)),XContentType.JSON));}BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT);System.out.println(bulk.hasFailures());//false 返回是否失败,false表示成功}

当然批量更新,删除等操作类似

查询

语法实现

// 查询
// SearchRequest 搜索请求
// SearchSourceBuilder 条件构造
//  HighlightBuilder 构建高亮
//  TermQueryBuilder 精确查询
//  MatchAllQueryBuilder
//  xxx QueryBuilder 对应我们刚才看到的命令!
@Test
void testSearch() throws IOException {SearchRequest searchRequest = new SearchRequest("cvzhanshi_index");//构建搜索条件SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();//查询条件,我们可以使用SearchSourceBuilder工具来实现//精确匹配QueryBuilders.termQuery()TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "cvzhanshi");sourceBuilder.query(termQueryBuilder);sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));searchRequest.source(sourceBuilder);SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);System.out.println(JSON.toJSONString(searchResponse));System.out.println("+++++++++++++++++++++++++++++++++++++++++");for (SearchHit hit : searchResponse.getHits()) {System.out.println(hit.getSourceAsMap());}
}

完整代码

@SpringBootTest
class EsApiApplicationTests {@Autowired@Qualifier("restHighLevelClient")private RestHighLevelClient client;//测试文档的添加@Testvoid testAddDocument() throws IOException {//创建对象User user = new User("cvzhanshi", 20);//创建请求IndexRequest request = new IndexRequest("cvzhanshi_index");//规则 put /kuang_index/_doc/1request.id("1");//设置请求超时时间 1srequest.timeout(TimeValue.timeValueSeconds(1));// 将我们的数据放入请求  jsonrequest.source(JSON.toJSONString(user), XContentType.JSON);// 客户端发送请求 , 获取响应的结果IndexResponse indexResponse  = client.index(request, RequestOptions.DEFAULT);System.out.println(indexResponse.toString());System.out.println(indexResponse.status());}//判断文档是否存在@Testvoid testIsExists() throws IOException {GetRequest getRequest = new GetRequest("cvzhanshi_index", "1");// 不获取返回的 _source 的上下文了getRequest.fetchSourceContext(new FetchSourceContext(false));getRequest.storedFields("_none_");boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);System.out.println(exists);}//获取文档信息@Testvoid testGetDocument() throws IOException {GetRequest getRequest = new GetRequest("cvzhanshi_index", "1");// 不获取返回的 _source 的上下文了//       getRequest.fetchSourceContext(new FetchSourceContext(false));//     getRequest.storedFields("_none_");GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);System.out.println(getResponse);System.out.println(getResponse.getSourceAsString());}//更新文档信息@Testvoid testUpdateDocument() throws IOException {UpdateRequest request = new UpdateRequest("cvzhanshi_index","1");request.timeout("1s");User user = new User("cv战士", 21);request.doc(JSON.toJSONString(user),XContentType.JSON);UpdateResponse update = client.update(request, RequestOptions.DEFAULT);System.out.println(update.status());}// 删除文档记录@Testvoid testDeleteRequest() throws IOException {DeleteRequest deleteRequest = new DeleteRequest("cvzhanshi_index", "1");deleteRequest.timeout("1s");DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT);System.out.println(deleteResponse.status());}// 特殊的,真的项目一般都会批量插入数据!@Testvoid testBulkRequest() throws IOException {BulkRequest bulkRequest = new BulkRequest();bulkRequest.timeout("10s");List<User> userList = new ArrayList<>();userList.add(new User("cvzhanshi",20));userList.add(new User("user",21));userList.add(new User("ursula",22));userList.add(new User("wile",23));userList.add(new User("CVZHANSHI",24));for (int i = 0;i< userList.size();i++){bulkRequest.add(new IndexRequest("cvzhanshi_index").id("" + (i+1)).source(JSON.toJSONString(userList.get(i)),XContentType.JSON));}BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT);System.out.println(bulk.hasFailures());//false 返回是否失败,false表示成功}// 查询// SearchRequest 搜索请求// SearchSourceBuilder 条件构造//  HighlightBuilder 构建高亮//  TermQueryBuilder 精确查询//  MatchAllQueryBuilder//  xxx QueryBuilder 对应我们刚才看到的命令!@Testvoid testSearch() throws IOException {SearchRequest searchRequest = new SearchRequest("cvzhanshi_index");//构建搜索条件SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();//查询条件,我们可以使用SearchSourceBuilder工具来实现//精确匹配QueryBuilders.termQuery()TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "cvzhanshi");sourceBuilder.query(termQueryBuilder);sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));searchRequest.source(sourceBuilder);SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);System.out.println(JSON.toJSONString(searchResponse));System.out.println("+++++++++++++++++++++++++++++++++++++++++");for (SearchHit hit : searchResponse.getHits()) {System.out.println(hit.getSourceAsMap());}}
}

七、小实战-效仿京东搜索

7.1 环境搭建

  • 新建spring boot项目

  • 修改es的版本,与本地es版本对应,导入json依赖(肯定能用到)

    <properties><java.version>1.8</java.version><!--自定义es版本依赖,保证和本地一样--><elasticsearch.version>7.6.1</elasticsearch.version>
    </properties><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.74</version>
    </dependency>
    
  • 配置文件的编写

    server:port: 9090# 关闭thymeleaf缓存
    spring:thymeleaf:cache: false
    
  • 前端页面

前端页面可以关注公众号“狂神说”分享的网盘链接自行下载

ES资料地址:链接:https://pan.baidu.com/s/1PT3jLvCksOhq7kgAKzQm7g 提取码:s824

解压后

粘贴进项目中

  • 测试,创建IndexController

    /*** @author cVzhanshi* @create 2021-08-14 17:05*/
    @Controller
    public class IndexController {@GetMapping({"/","/index"})public String index(){return "index";}
    }
    

7.2 爬取数据

获取请求返回的数据,筛选出我们想要的数据

  • 导入爬虫所需要的依赖

    <!--jsoup 解析网页-->
    <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.13.1</version>
    </dependency>
    
  • 爬取数据的工具类的编写

    /*** @author cVzhanshi* @create 2021-08-15 10:36*/
    @Component
    public class HtmlParseUtil {public List<Content> parseJD(String keywords) throws IOException {//获取请求:     https://search.jd.com/Search?keyword=java&enc=utf-8&wq=java&pvid=f807c58b66dc4baab4c7ed71834c36be//前提,联网,ajax不能获得String url = "https://search.jd.com/Search?keyword=" + keywords + "&enc=utf-8";//解析网页。(Jsoup返回Document就是浏览器Document对象)//        Document document = Jsoup.parse(new URL(url), 30000);//设置绕过登录Document document = Jsoup.connect(url).userAgent("Mozilla/5.0 (Windows NT 5.1; zh-CN) AppleWebKit/535.12 (KHTML, like Gecko) Chrome/22.0.1229.79 Safari/535.12").timeout(30000).get();System.out.println(document.html());//所有你在js中可以使用的方法,这里都能用!Element element = document.getElementById("J_goodsList");//获取所有的Li元素Elements elements = element.getElementsByTag("li");System.out.println(elements);List<Content> contents = new ArrayList<>();//获取元素中的内容,这el就是每一 个Li标签了!for (Element el : elements) {//由于图片是延迟加载//data-lazy-imgString img = el.getElementsByTag("img").eq(0).attr("data-lazy-img");String price = el.getElementsByClass("p-price").eq(0).text();String title = el.getElementsByClass("p-name").eq(0).text();contents.add(new Content(img,price,title));}return contents;}
    }
    
  • 测试工具类

7.3 业务的编写

  • 编写es的配置类

    /*** @author cVzhanshi* @create 2021-08-14 11:43*/
    @Configuration
    public class ElasticSearchClientConfig {@Beanpublic RestHighLevelClient restHighLevelClient() {RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));return client;}
    }
    
  • 编写service层的ContentService

    /*** @author cVzhanshi* @create 2021-08-15 11:23*/
    //业务的编写
    @Service
    public class ContentService {@Autowiredprivate RestHighLevelClient restHighLevelClient;public Boolean parseContent(String keywords) throws IOException {List<Content> contents = new HtmlParseUtil().parseJD(keywords);BulkRequest bulkRequest = new BulkRequest();bulkRequest.timeout("2m");for (int i = 0; i < contents.size(); i++) {bulkRequest.add(new IndexRequest("jd_goods").source(JSON.toJSONString(contents.get(i)), XContentType.JSON));}BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);return !bulkResponse.hasFailures();}public List<Map<String, Object>> searchPage(String keyword, int pageNo, int pageSize) throws IOException {if (pageNo <= 1) {pageNo = 1;}//条件搜索SearchRequest searchRequest = new SearchRequest("jd_goods");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();//分页sourceBuilder.from(pageNo);sourceBuilder.size(pageSize);//精准匹配TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title", keyword);sourceBuilder.query(termQueryBuilder);sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));//执行搜索searchRequest.source(sourceBuilder);SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);//解析结果ArrayList<Map<String, Object>> list = new ArrayList<>();for (SearchHit documentFields : searchResponse.getHits().getHits()) {list.add(documentFields.getSourceAsMap());}System.out.println(list);return list;}// 2.获取这些数据实现搜索高亮功能public List<Map<String, Object>> searchPageHighlightBuilder(String keyword, int pageNo, int pageSize) throws IOException {if (pageNo <= 1) {pageNo = 1;}//条件搜索SearchRequest searchRequest = new SearchRequest("jd_goods");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();//分页sourceBuilder.from(pageNo);sourceBuilder.size(pageSize);//精准匹配TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title", keyword);sourceBuilder.query(termQueryBuilder);sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));//高亮HighlightBuilder highlightBuilder = new HighlightBuilder();highlightBuilder.field("title");highlightBuilder.requireFieldMatch(false); //多个高亮显示highlightBuilder.preTags("<span style='color:red'>");highlightBuilder.postTags("</span>");sourceBuilder.highlighter(highlightBuilder);//执行搜索searchRequest.source(sourceBuilder);SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);//解析结果ArrayList<Map<String, Object>> list = new ArrayList<>();for (SearchHit hit : searchResponse.getHits().getHits()) {Map<String, HighlightField> highlightFields = hit.getHighlightFields();HighlightField title = highlightFields.get("title");Map<String, Object> sourceAsMap = hit.getSourceAsMap(); //原来的结果!//解析高亮的字段,将原来的字段换为我们高亮的字段即可!if (title != null) {Text[] fragments = title.fragments();String n_title = "";for (Text text : fragments) {n_title += text;sourceAsMap.put("title", n_title); //高亮字段替换掉原来的内容即可!}}list.add(sourceAsMap);}return list;}
    }
    
  • 编写controller层的ContentController

    /*** @author cVzhanshi* @create 2021-08-15 11:25*/
    @RestController
    public class ContentController {@Autowiredprivate ContentService contentService;//爬取数据@GetMapping("/parse/{keywords}")public Boolean parse(@PathVariable("keywords") String keywords) throws Exception {return contentService.parseContent(keywords);}//搜索@GetMapping("/search/{keyword}/{pageNo}/{pageSize}")public List<Map<String, Object>> search(@PathVariable("keyword") String keyword,@PathVariable("pageNo") int pageNo,@PathVariable("pageSize") int pageSize) throws IOException {//return contentService.searchPage(keyword, pageNo, pageSize);return contentService.searchPageHighlightBuilder(keyword, pageNo, pageSize);}
    }
    
  • 先进行数据的爬取,存入到es中,浏览器访问localhost:9090/parse/java

  • 因为要使用vue在前端接收数据,所以我们学要vue的js

  • 找个空的文件夹运行命令

    npm install vue
    

    npm install axios
    

  • 在生成的文件中找到两个js,复制到项目中


  • 改写index.html,使用vue接收数据

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org"><head><meta charset="utf-8"/><title>cv战士Java-ES仿京东实战</title><link rel="stylesheet" th:href="@{/css/style.css}"/><!--<script th:src="@{/js/jquery.min.js}"></script>--></head><body class="pg"><div class="page" id="app"><div id="mallPage" class=" mallist tmall- page-not-market "><!-- 头部搜索 --><div id="header" class=" header-list-app"><div class="headerLayout"><div class="headerCon "><!-- Logo--><h1 id="mallLogo"><img th:src="@{/images/jdlogo.png}" alt=""></h1><div class="header-extra"><!--搜索--><div id="mallSearch" class="mall-search"><form name="searchTop" class="mallSearch-form clearfix"><fieldset><legend>天猫搜索</legend><div class="mallSearch-input clearfix"><div class="s-combobox" id="s-combobox-685"><div class="s-combobox-input-wrap"><input v-model="keyword" type="text" autocomplete="off" value="dd"id="mq"class="s-combobox-input" aria-haspopup="true"></div></div><button type="submit" @click.prevent="searchKey" id="searchbtn">搜索</button></div></fieldset></form><ul class="relKeyTop"><li><a>cv战士Java</a></li><li><a>cv战士前端</a></li><li><a>cv战士Linux</a></li><li><a>cv战士大数据</a></li><li><a>cv战士理财</a></li></ul></div></div></div></div></div><!-- 商品详情页面 --><div id="content"><div class="main"><!-- 品牌分类 --><form class="navAttrsForm"><div class="attrs j_NavAttrs" style="display:block"><div class="brandAttr j_nav_brand"><div class="j_Brand attr"><div class="attrKey">品牌</div><div class="attrValues"><ul class="av-collapse row-2"><li><a href="#"> cv战士 </a></li><li><a href="#"> Java </a></li></ul></div></div></div></div></form><!-- 排序规则 --><div class="filter clearfix"><a class="fSort fSort-cur">综合<i class="f-ico-arrow-d"></i></a><a class="fSort">人气<i class="f-ico-arrow-d"></i></a><a class="fSort">新品<i class="f-ico-arrow-d"></i></a><a class="fSort">销量<i class="f-ico-arrow-d"></i></a><a class="fSort">价格<i class="f-ico-triangle-mt"></i><i class="f-ico-triangle-mb"></i></a></div><!-- 商品详情 --><div class="view grid-nosku"><div class="product" v-for="result in results"><div class="product-iWrap"><!--商品封面--><div class="productImg-wrap"><a class="productImg"><img :src="result.img"></a></div><!--价格--><p class="productPrice"><em>{{result.price}}</em></p><!--标题--><p class="productTitle"><a v-html="result.title"></a></p><!-- 店铺名 --><div class="productShop"><span>店铺: cv战士Java </span></div><!-- 成交信息 --><p class="productStatus"><span>月成交<em>999笔</em></span><span>评价 <a>3</a></span></p></div></div></div></div></div></div></div><!--前端使用Vue,实现前后端分离--><script th:src="@{/js/axios.min.js}"></script><script th:src="@{/js/vue.min.js}"></script><script>new Vue({el: '#app',data: {keyword: "", //搜索的关键字results: [] //搜索的结果},methods: {searchKey() {let keyword = this.keyword;console.log(keyword);//对接后端的接口axios.get('search/' + keyword + "/1/20").then(response => {console.log(response);this.results = response.data;//绑定数据})}}})</script></body>
    </html>
    

7.5 测试

启动项目,直接访问localhost:9090/

进行搜索,搜索的前提是,之前有把关键的数据爬取下来放在es中


分享代码地址

Gitee:https://gitee.com/cvzhanshi-ursula/es-api.git

GitHub:https://github.com/cvzhanshi-ursula/es-api

ElasticSearch快速入门(三)=> 集成Spring Boot + 效仿京东搜索小实战相关推荐

  1. ElasticSearch快速入门三(curl命令讲解)

    API测试工具_微博开放平台:https://open.weibo.com/tools/console# 感兴趣是可以使用这个工具玩一下restful接口调用,可以更形象的了解restful 下面我们 ...

  2. Spring Boot(4)---入门:安装Spring Boot

    Spring Boot入门:安装Spring Boot TagsSpring Boot, Spring Boot中文官方文档 安装Spring Boot Spring Boot可以与"经典& ...

  3. ELK之ElasticSearch快速入门

    ElasticSearch快速入门 一.简介 二.下载 三.启动 4.基本概念 5. 一.简介 官网:https://www.elastic.co/ ElasticSearch是Elastic Sta ...

  4. php类的测试用例,快速入门:集成 PHPUnit 编写测试用例

    快速入门:集成 PHPUnit 编写测试用例 由 学院君 创建于3年前, 最后更新于 11个月前 版本号 #2 14719 views 4 likes 0 collects 简介 Laravel 植根 ...

  5. Spring Boot快速开发利器:Spring Boot CLI

    Spring Boot CLI(Command Line Interface)是一个命令行工具,您可以用它来快速构建Spring原型应用.通过Spring Boot CLI,我们可以通过编写Groov ...

  6. sql语言和php,SQL语言快速入门(三)_php

    我们日常使用SQL语言的工作过程中,使用最多的还是从已经建立好的数据库中查询信息.下面,我们就来详细介绍一下如何使用SQL语言实现各种数据库查询操作. SELECT-FROM 为方便讲解,我们在数据库 ...

  7. 19年8月 字母哥 第三章 spring boot 配置原理实战 用热点公司网不行

    第三章 spring boot 配置原理实战 3.1.结合配置加载讲解bean自动装配原理 3.2.详解YAML语法及占位符语法 3.3.获取自定义配置的两种实现方法 3.4.配置文件注入值数据校验 ...

  8. Spring精华问答 | 如何集成Spring Boot?

    Spring框架是一个开源的Java平台,它提供了非常容易,非常迅速地开发健壮的Java应用程序的全面的基础设施支持.今天就让我们一起来看看关于Spring的精华问答吧. 1 Q:如何在自定义端口上运 ...

  9. boot spring 获取请求端口浩_Spring精华问答 | 如何集成Spring Boot?

    Spring框架是一个开源的Java平台,它提供了非常容易,非常迅速地开发健壮的Java应用程序的全面的基础设施支持.今天就让我们一起来看看关于Spring的精华问答吧. 1 Q:如何在自定义端口上运 ...

最新文章

  1. 四种DCOM错误的区别,0x80080005 0x800706be 0x80010105 0x
  2. 使用Powershell管理Linux 下的 SQL Server
  3. 如果刘华强是个码农...
  4. LeetCode Add Binary(二进制加法)
  5. JVM 的内存结构和内存分配
  6. fast_recovery_area无剩余空间(ORA-19815)
  7. SQL SERVER 一个SQL语句的执行顺序
  8. linux替换windows换行符_vim编辑器的查找与替换
  9. 软件测试实用技术与常用模板:内容提要
  10. 设备树与驱动的关系_9 Linux设备树的原理与应用实例(一)—— 什么是设备树...
  11. 抽离css以及公共js
  12. 孝敬老人用 盐城 淮剧视频 淮剧 王樵楼磨豆腐
  13. 开发老铁们,就参考这个图灵畅销新书书单加购!
  14. 2.4G无线模块(NRF24L01)学习(2)——单片机互相控制LED灯
  15. cba篮球暂停次数和时间_CBA在比赛时,为什么有“官方暂停”?
  16. 软件工程第五次作业-项目选题
  17. 程序员面试需要带身份证和毕业证原件吗
  18. DM数据库安装、踩雷、解决办法
  19. AVS2参考软件的运行
  20. docker,containerd,runc,docker-shim

热门文章

  1. 值得收藏的一些HTML、JavaScript、ASP代码
  2. mysql 数据类型 java_[mysql]MySql数据类型和java类型对照表
  3. novell如何复制服务器文档,novell服务器常见问题及配置.doc
  4. C语言版-数据结构-期末课程设计-大作业(航空客运订票系统)附源码+实验文档
  5. 如何快速的学习任何一门编程语言
  6. 附图分析运放7大经典电路
  7. 将ipynb文件转为.py文件
  8. 大学生抗疫逆行者网页作业 感动人物HTML网页代码成品 最美逆行者dreamweaver网页模板 致敬疫情感动人物网页设计制作
  9. 淘宝新手设计快速提升一(思想片)
  10. 泛函分析 02.01 赋范空间-基本概念