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

购买游戏软件做网站潜江市建设工程合同备案网站

购买游戏软件做网站,潜江市建设工程合同备案网站,下载站用什么网站系统,衡水seo培训四、数据层解决方案 1.SQL 现有数据层解决方案技术选型:DruidMyBatis-plusMySQL 数据源:DruidDataSource 持久化技术:MyBatis-plus/MyBatis 数据库:MySql 内置数据源: SpringBoot提供了3种内嵌的数据源对象供开发者选…

四、数据层解决方案

1.SQL

现有数据层解决方案技术选型:Druid+MyBatis-plus+MySQL
数据源:DruidDataSource
持久化技术:MyBatis-plus/MyBatis
数据库:MySql
内置数据源:
SpringBoot提供了3种内嵌的数据源对象供开发者选择:
HikariCP:默认内置数据源对象;
Tomcat提供DataSource:HikariCP不可用的情况下,且在web环境中,将使用tomcat服务器配置的数据源对象;
Commons DBCP:Hikari不可用,tomcat数据源也不可用,将使用dbcp数据源。
在这里插入图片描述
使用方式:先使用默认配置,再使用个性化配置。
通用配置无法设置具体的数据源配置信息,仅提供基本的连接相关配置,如需配置,在下一级配置中设置具体设定。
在这里插入图片描述
JdbcTemplate:Spring提供的默认的持久化技术(几乎没人用)
操作数据库的模板技术。
pom.xml:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
@Autowiredprivate JdbcTemplate jdbcTemplate;@Testvoid testJdbcTemplate(){String sql="select * from tbl_book";RowMapper<Book> rm=new RowMapper<Book>() {@Overridepublic Book mapRow(ResultSet rs, int rowNum) throws SQLException {Book temp=new Book();//查出来的放到结果集中,从结果集中得到,在set到对象中temp.setId(rs.getInt("id"));temp.setName(rs.getString("name"));temp.setType(rs.getString("type"));temp.setDescription(rs.getString("description"));return temp;}};List<Book> list = jdbcTemplate.query(sql, rm);System.out.println(list);}@Testvoid testJdbcTemplateSave(){String sql="insert into tbl_book values(null,'springboot','springboot','springboot')";jdbcTemplate.update(sql);}

H2数据库:
SpringBoot提供了3种内嵌数据库供开发者选择,提高开发测试效率:
H2
HSQL
Derby
伴随着内存启动而启动的数据库,比较小巧。
pom.xml中:

<!--演示H2数据库--><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency>

配置文件中:
在这里插入图片描述
开启服务后,在浏览器中就可以访问:
在这里插入图片描述
可以和持久层框架Mybatis-plus、JdbcTemplate搭配使用。

2.NoSQL

(1)Redis

市面上常见的NoSQL解决方案:
Redis
MongoDB
ES
上述技术通常在Linux系统中安装部署。
在Windows安装,方便整合(整合都是一样的)。
Redis是一款key-value存储结构的内存级NoSQL数据库:
支持多种数据存储格式
支持持久化
支持集群
Redis的安装与启动(Windows版)
Windows解压安装或一键式安装
服务端启动命令

redis-server.exe redis.windows.conf

客户端启动命令

redis-cli.exe

具体操作:先打开服务器,再用客户端去连接。
在这里插入图片描述
在这里插入图片描述
SpringBoot整合Redis:
导入redis对应的starter,在创建工程的时候勾选。

配置Redis(采用默认配置)
在这里插入图片描述
提供操作Redis接口对象RedisTemplate:

@SpringBootTest
class Springboot16RedisApplicationTests {@Resourceprivate RedisTemplate redisTemplate;@Testvoid set() {ValueOperations ops = redisTemplate.opsForValue();ops.set("age",41);}@Testvoid get(){ValueOperations ops = redisTemplate.opsForValue();Object age = ops.get("age");System.out.println(age);}@Testvoid hset() {HashOperations ops = redisTemplate.opsForHash();ops.put("info","a","aa");}@Testvoid hget(){HashOperations ops = redisTemplate.opsForHash();Object val = ops.get("info", "a");System.out.println(val);}
}

客户端:RedisTemplate以对象作为key和value,内部对数据进行序列化。
StringRedisTemplate以字符串作为key和value,与Redis客户端操作等效。

@SpringBootTest
public class StringRedisTemplateTest {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Testvoid get(){ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();String name = ops.get("name");System.out.println(name);}
}

客户端使用jedis,加坐标,改配置文件。
在这里插入图片描述
在这里插入图片描述
lettcus和jedis的区别:
jedis连接Redis服务器是直连模式,当多线程模式下使用jedis会存在线程安全问题,解决方案可以通过配置连接池使每个连接专用,这样整体性能就会大受影响。
lettcus基于Netty框架进行与Redis服务器连接,底层设计中采用StatefulRedisConnection。StatefulRedisConnection自身是线程安全的,可以保障并发访问安全问题,所以一个连接可以被多线程复用。当然lettcus也支持多连接实例一起工作。

(2)MongoDB

需求:既能存储结构化数据,又高性能。数据有着很高的修改需求
MongoDB是一个开源、高性能、无模式的文档型数据库。NoSQL数据库产品的一种,是最像关系型数据库的非关系型数据库。
启动mongoDB服务:
在这里插入图片描述
在客户端连接MongoDB服务:

mongo --host=127.0.0.1 --port=27017

在这里插入图片描述
在这里插入图片描述
或者使用可视化客户端:
在这里插入图片描述
基础CRUD操作:
在这里插入图片描述
在这里插入图片描述
SpringBoot整合MongoDB:
1.导入Mongodb对应的starter:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

2.配置mongodb访问uri:
在这里插入图片描述
3.提供操作Mongodb接口对象MongoTemplate

@SpringBootTest
class Springboot17MongdbApplicationTests {@Autowiredprivate MongoTemplate mongoTemplate;@Testvoid contextLoads() {Book book=new Book();book.setId(1);book.setName("springboot");book.setType("springboot");book.setDescription("springboot");mongoTemplate.save(book);}/*** 类型转换的问题  把数据库中不是int的删了*/@Testvoid find(){List<Book> all = mongoTemplate.findAll(Book.class);System.out.println(all);}}

(3)ES Elasticsearch

相关概念:
Elasticsearch是一个分布式全文搜索引擎。(分布式:架构可以做成分布式的)
要想做全文搜索:
1.通过所提供的数据进行分词,将关联数据保存起来。就有了一个一个的id对应一个一个的简要数据。
2.分词查出来先匹配一个一个的id,id再得到数据。(实际上查询的时候,是将输入这个id的数据展示出来)。
这种方式大幅度的提高了查询速度。
传统的索引:根据id查数据。
ES的索引(倒排索引):根据关键字(数据)查id,再根据id查数据。
一条:关键字—>1—>数据 对应的是一个文档,每一条都需要提前建立起来。当使用关键字后,就能找到对应的数据了。

基础操作:
打开ES服务:双击这个批处理文件:
在这里插入图片描述
启动后,可以在浏览器直接创建。
创建/查询/删除索引:
PUT:http://localhost:9200/books
GET:http://localhost:9200/books
DELETE:http://localhost:9200/books

在这里插入图片描述
目前创建的这个索引是不支持分词的。要支持分词添加IK插件。再重启服务。
在这里插入图片描述
创建一个有分词功能的索引:
在这里插入图片描述
查看这个索引:
在这里插入图片描述
ES文档操作:
添加一条文档,相当于给数据库中添加一条数据,不需要指定表结构。文档结构是无模式的。

使用_doc添加一个文档信息,id是自动生成的。
在这里插入图片描述
使用_create添加文档信息,后面需要加id号。
在这里插入图片描述
_doc后也可以加id号。
在这里插入图片描述查询文档:查询id为1的文档
在这里插入图片描述
查询所有文档:
在这里插入图片描述
使用条件查询:
在这里插入图片描述
在这里插入图片描述
删除文档:
删除一个已经存在的:
在这里插入图片描述
删除一个不存在的:
在这里插入图片描述
修改一个文档:
在这里插入图片描述
查询一下刚才修改的文档,发现只有name,是全覆盖。
在这里插入图片描述
如果不想全部修改,只想修改某一条属性信息:使用文档属性进行修改的。就不会覆盖其他的属性。
在这里插入图片描述
再次查询一下,只有修改的变了。
在这里插入图片描述
ElasticSearch(ES)总结:
创建文档:有三种方式。

POST  http://localhost:9200/books/_doc  #使用系统生成id
POST  http://localhost:9200/books/_create/1  #使用指定id
POST  http://localhost:9200/books/_doc/1  #使用指定id,不存在创建,存在更新(版本递增)

查询文档:

GET  http://localhost:9200/books/_doc/1  #查询单个文档
GET  http://localhost:9200/books/_search  #查询全部文档

条件查询:

GET http://localhost:9200/books/_search?q=name:springboot

删除文档:

DELETE http://localhost:9200/books/_doc/1

修改文档(全量修改)

PUT  http://localhost:9200/books/_doc/1

修改文档(部分修改):对文档中的某个属性,不是对整个文档进行操作(其余都是对一整个文档进行操作的)。

POST  http://localhost:9200/books/_update/1

SpringBoot整合ES客户端:
直接整合高级别的客户端:
先导入starter

<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>

再写配置文件:配置文件不用写,采用的是硬编码的方式。
在SpringBoot里创建ES客户端:

@Testvoid testCreateIndex() throws IOException {//创建客户端HttpHost host=HttpHost.create("http://localhost:9200");RestClientBuilder builder=RestClient.builder(host);client= new RestHighLevelClient(builder);//使用客户端发送了一个请求,创建了一个名称为books的索引CreateIndexRequest request=new CreateIndexRequest("books");client.indices().create(request, RequestOptions.DEFAULT);//关闭客户端client.close();}

在SpringBoot中创建索引:

@Testvoid testCreateIndexByIk() throws IOException {//创建客户端HttpHost host=HttpHost.create("http://localhost:9200");RestClientBuilder builder=RestClient.builder(host);client= new RestHighLevelClient(builder);//使用客户端发送了一个请求,创建了一个名称为books的索引CreateIndexRequest request=new CreateIndexRequest("books");String json="{\n" +"    \"mappings\":{\n" +"        \"properties\":{\n" +"            \"id\":{\n" +"                \"type\":\"keyword\"\n" +"            },\n" +"            \"name\":{\n" +"                \"type\":\"text\",\n" +"                \"analyzer\":\"ik_max_word\",\n" +"                \"copy_to\":\"all\"\n" +"            },\n" +"            \"type\":{\n" +"                \"type\":\"keyword\"\n" +"            },\n" +"            \"description\":{\n" +"                \"type\":\"text\",\n" +"                \"analyzer\":\"ik_max_word\",\n" +"                \"copy_to\":\"all\"\n" +"            },\n" +"            \"all\":{\n" +"                \"type\":\"text\",\n" +"                \"analyzer\":\"ik_max_word\"\n" +"            }\n" +"        }\n" +"    }\n" +"}";//设置请求中的参数request.source(json, XContentType.JSON);client.indices().create(request, RequestOptions.DEFAULT);//关闭客户端client.close();}

添加单个文档:

//添加文档@Testvoid testCreateDoc() throws IOException {//创建客户端HttpHost host=HttpHost.create("http://localhost:9200");RestClientBuilder builder=RestClient.builder(host);client= new RestHighLevelClient(builder);Book book = bookDao.selectById(1);IndexRequest request=new IndexRequest("books").id(book.getId().toString());String json= JSON.toJSONString(book);request.source(json,XContentType.JSON);client.index(request,RequestOptions.DEFAULT);//关闭客户端client.close();}

添加多个文档:

//添加全部文档@Testvoid testCreateDocAll() throws IOException {//创建客户端HttpHost host=HttpHost.create("http://localhost:9200");RestClientBuilder builder=RestClient.builder(host);client= new RestHighLevelClient(builder);//把所有东西都查出来,造一个批处理请求的容器List<Book> bookList = bookDao.selectList(null);BulkRequest bulk=new BulkRequest();for (Book book : bookList) {IndexRequest request=new IndexRequest("books").id(book.getId().toString());String json= JSON.toJSONString(book);request.source(json,XContentType.JSON);bulk.add(request);}client.bulk(bulk,RequestOptions.DEFAULT);//关闭客户端client.close();}

查询文档:

//按id查询@Testvoid testGet() throws IOException {//创建客户端HttpHost host=HttpHost.create("http://localhost:9200");RestClientBuilder builder=RestClient.builder(host);client= new RestHighLevelClient(builder);GetRequest request=new GetRequest("books","1");GetResponse response = client.get(request, RequestOptions.DEFAULT);String json = response.getSourceAsString();System.out.println(json);//关闭客户端client.close();}//按条件查询@Testvoid testSearch() throws IOException {//创建客户端HttpHost host=HttpHost.create("http://localhost:9200");RestClientBuilder builder=RestClient.builder(host);client= new RestHighLevelClient(builder);//查books索引SearchRequest request=new SearchRequest("books");//设置条件  如果还有条件继续往里排就行SearchSourceBuilder builder1=new SearchSourceBuilder();builder1.query(QueryBuilders.termQuery("all","1"));request.source(builder1);SearchResponse response = client.search(request, RequestOptions.DEFAULT);//查询到的结果如何显示出来SearchHits hits = response.getHits();for (SearchHit hit : hits) {String source = hit.getSourceAsString();
//            System.out.println(source);Book book = JSON.parseObject(source, Book.class);System.out.println(book);}//关闭客户端client.close();}
http://www.yayakq.cn/news/77724/

相关文章:

  • 30天网站建设 视频教程网站排名怎样做有效
  • 罗湖区网站建设wordpress sticky
  • 专业网站优化seo网站建设税率是多少
  • 济南智能网站建设服务wordpress 正版插件
  • 瑞安建设公司网站如何看一个网站是否做推广
  • 网站怎么放在服务器上大网站cn域名
  • 建站排行榜网站建设一般需要多少费用
  • 东莞外贸网站设计一个不懂技术的人如何做网站
  • 网站权重排名wordpress付款后可见
  • app介绍网站模板免费下载响应式网页设计的理念
  • 介绍一学一做视频网站吗库存网站建设公司
  • 设计招聘网站企业网站托管平台有哪些
  • 作弊网站网站制作公司有没有版权
  • 商务网站的类型一共有几大类二级域名怎么做网站备案
  • 怎么做投票 网站关键词优化师
  • 网站建设分工的通知金融app开发
  • 电子商务网站建设与管理课后心得html页面生成器
  • php做调查问卷网站参加网站建设项目人员保障体系
  • 白沟做网站做影视网站需要多大硬盘
  • 网站分站怎么做如何做seo优化
  • flash网站源文件下载做毕业设计资料网站
  • 佛山商城网站建设网站建设需要用到什么
  • 网站建设用什么系统好网站开发公司电话
  • 西安企业网站设计制作电子商务网站建设的策划书
  • 做网站的有哪些公司哪里建设网站比较好
  • wordpress 4.5 多站点团购网站怎么做
  • 网站地图模版深圳宝安建设工程交易中心
  • 淄博网站设计方案关于营销的最新的新闻
  • 如何实现网站开发手机验证码大学网站建设
  • 建设通网站上的业绩能否删除掉服装定制app排行