数据层解决方案---springboot三种内置数据源、持久化解决方案

目录

一、与SQL有关的解决方案

1.关于数据源

    第一部分.关于springboot中的数据源

    第二部分.Druid有关的配置

2.内置持久化解决方案----jdbcTemplate

3.Springboot内置数据库

   演示H2数据库

总结:

二、与NoSQL有关的解决方案

 1.关于Redis

怎么启动Redis?

怎么使用?

怎么退出?

2.SpringBoot整合Redis

   整合前提

整合开始

SpringBoot读取Redis的客户端

SpringBoot操作Redis客户端实现技术切换(jedis)

Redis中,lettcus(默认)与jedis的区别

2.关于MongoDB

   基本介绍

启动MongoDB

运行MongoDB客户端

如果安装MongoDB时候有缺陷,参考下列解决方案:

MongoDB的基本操作

SpringBoot整合MongoDB

3.SpringBoot整合ES

   基本介绍

安装ES与启动ES

ES基本操作

   创建索引

分词操作

添加文档操作

查询文档操作 

删除文档操作

SpringBoot整合ES 


一、与SQL有关的解决方案

数据层解决方案---springboot三种内置数据源、持久化解决方案_第1张图片

       
            com.alibaba
            druid-spring-boot-starter
            1.2.8
        
        
            com.baomidou
            mybatis-plus-boot-starter
            3.5.1
        
        
            mysql
            mysql-connector-java
        
        

     上面的三组maven坐标就是我们写代码时经常使用的,分别对应数据源、持久化技术、数据库  

1.关于数据源

    第一部分.关于springboot中的数据源

若我们不提供数据源(比如删除我们上面的Druid的坐标)的话,就默认使用这三种中的一种(HikariCP默认)

数据层解决方案---springboot三种内置数据源、持久化解决方案_第2张图片

数据层解决方案---springboot三种内置数据源、持久化解决方案_第3张图片       

 将数据源换成HikariCP(记得吧Druid的maven坐标删除)(注意URL的位置)(并不是Druid数最好的)

      下面这两种配置,哪一种都可以

数据层解决方案---springboot三种内置数据源、持久化解决方案_第4张图片

 数据层解决方案---springboot三种内置数据源、持久化解决方案_第5张图片

    第二部分.Druid有关的配置

         格式一是标准格式

         比较推荐 格式二,格式二是Druid专属配置

数据层解决方案---springboot三种内置数据源、持久化解决方案_第6张图片

2.内置持久化解决方案----jdbcTemplate

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Test
    void JDBCTEST(){
//        jdbcTemplate.update();//增删改
//        jdbcTemplate.query(); //查询
//        jdbcTemplate.queryForObject();//查询单个对象

/*      但是我们一般不使用这种格式
        String sql ="select * from t_book  ";
        List> maps = jdbcTemplate.queryForList(sql);
        System.out.println(maps);*/

        RowMapper rm = new RowMapper() {
            @Override
            public Book mapRow(ResultSet resultSet, int i) throws SQLException {
//              ResultSet resultSet 其实就是结果集
               Book temp = new Book();
               temp.setId(resultSet.getInt("id"));
               temp.setType(resultSet.getString("type"));
               temp.setStatue(resultSet.getString("statue"));
               temp.setBookName(resultSet.getString("bookName"));
                return temp;
            }
        };

        String sql ="select * from t_book  ";
        List list = jdbcTemplate.query(sql,rm);
        System.out.println(list);

    }
        
            org.springframework.boot
            spring-boot-starter-jdbc
        
        
            mysql
            mysql-connector-java
        

   关于jdbcTemplate的其他设置

数据层解决方案---springboot三种内置数据源、持久化解决方案_第7张图片

3.Springboot内置数据库

  共同特点:都是java语言写的,都可以在内存中启动,都足够轻巧,测试方便 

数据层解决方案---springboot三种内置数据源、持久化解决方案_第8张图片

   演示H2数据库

        
        
            com.h2database
            h2
        
        
            org.springframework.boot
            spring-boot-starter-data-jpa
        

     切记是web工程

数据层解决方案---springboot三种内置数据源、持久化解决方案_第9张图片

   之后运行项目,在网页进行访问

        当我们连接之后,我们发现连接异常(这是因为首次使用的原因,此时我们只需要在配置文件中配置相应的数据源就好了,当我们启动成功后,这些配置员可以删除,也可以留着)数据层解决方案---springboot三种内置数据源、持久化解决方案_第10张图片

   此时我们修改一下配置文件:

#h2***************************
server:
  port: 8080
spring:
  h2:
    console:
      path: /h2
      enabled: true


  datasource:
    url: jdbc:h2:~/test
    hikari:
       driver-class-name: org.h2.Driver
       username: sa
       password: 123456


重新启动项目,输入密码

数据层解决方案---springboot三种内置数据源、持久化解决方案_第11张图片

   此时我们已经启动成功了,DataSource的那一段配置我们可以删除,也可以留着

    添加一个表

数据层解决方案---springboot三种内置数据源、持久化解决方案_第12张图片

注意!!!!!!!!!!!!!!!!!!

    H2内置数据库这仅仅用于开发阶段,线上项目请务必关闭控制台功能

   数据层解决方案---springboot三种内置数据源、持久化解决方案_第13张图片

总结:

数据层解决方案---springboot三种内置数据源、持久化解决方案_第14张图片

二、与NoSQL有关的解决方案

        也是做数据存储的

 数据层解决方案---springboot三种内置数据源、持久化解决方案_第15张图片

 1.关于Redis

       是一款key-value存储结构的内存级别的NoSQL数据库

       支持多种数据存储格式

       支持持久化

        支持集群

怎么启动Redis?

     第一次启动采用下图的步骤:

数据层解决方案---springboot三种内置数据源、持久化解决方案_第16张图片

    不是第一次启动,采用下图的步骤:直接启动

数据层解决方案---springboot三种内置数据源、持久化解决方案_第17张图片

怎么使用?

  基本的存储结构:key--value

   重新创建一个cmd(前面那个不关)

   存放值和取值

数据层解决方案---springboot三种内置数据源、持久化解决方案_第18张图片

  哈希存储结构

数据层解决方案---springboot三种内置数据源、持久化解决方案_第19张图片

怎么退出?

         Ctrl+C

2.SpringBoot整合Redis

   整合前提

      创建一个新项目,勾选下列选项

数据层解决方案---springboot三种内置数据源、持久化解决方案_第20张图片

        
            org.springframework.boot
            spring-boot-starter-data-redis
        

在application.yml配置文件中配置下列信息:(下列的配置就是默认配置,如果不配的话,也是下列的值) 

spring:
  redis:
    host: localhost
    port: 6379

整合开始

    整合的时候,一定要确保Redis是开启的状态,否则会出现异常(因为我们从cmd开启的Redis和idea运行的Redis其实是一个Redis)

数据层解决方案---springboot三种内置数据源、持久化解决方案_第21张图片

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;

@SpringBootTest
class Springboot16RedisApplicationTests {
//  用这个属性就能操作Redis
    @Autowired
    private RedisTemplate redisTemplate;

//     下面测试类运行的时候,一定要确保Redis是开启的状态
    @Test
    void set() {
     ValueOperations valueOperations = redisTemplate.opsForValue();//不仅仅有一个操作种类,有很多的操作种类
     valueOperations.set("age","41");  //键值对的方式
    }

    @Test
    void get() {
        ValueOperations valueOperations = redisTemplate.opsForValue();
       Object age = valueOperations.get("age");   //利用键值对的方式给取出来
        System.out.println(age);
    }

//    下面两个是哈希的结构
    @Test
    void hSet() {
       HashOperations  ho = redisTemplate.opsForHash();//不仅仅有一个操作种类,有很多的操作种类
        ho.put("info","a","aa");  //键值对的方式
    }

    @Test
    void hGet() {
      HashOperations ho = redisTemplate.opsForHash();
      Object p =  ho.get("info","a");
      System.out.println(p);
    }

}

数据层解决方案---springboot三种内置数据源、持久化解决方案_第22张图片

SpringBoot读取Redis的客户端

       细心的同学可以发现,我们上面的程序中,在客户端界面获取idea中添加的内容,最终结果是null,相同的,在idea中获取客户端中添加的内容也是null,这是为什么呢?

   其中的原因就和下面这个属性的类型有关系,这个属性是以对象为操作的基本单元,我们只需要把这个对象的类型修改一下就好了 

    @Autowired
    private RedisTemplate redisTemplate; // 以对象为操作的基本单元

 修改后的代码如下图:

import org.springframework.data.redis.core.ValueOperations;

@SpringBootTest
public class StringRedisTemplateTest {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;  //以字符串为操作的基本单元,而在客户端界面的操作都是以字符串为操作的基本单元

    @Test
    void get(){
        ValueOperations ops = stringRedisTemplate.opsForValue();
        String name = ops.get("name");
        System.out.println(name);
    }


}

因为这个属性是以字符串为操作的基本单元,而在客户端界面的操作都是以字符串为操作的基本单元,顾这个属性的类型就可以实现客户端添加与读取内容和idea添加与读取的内容相互联通。

    @Autowired
    private StringRedisTemplate stringRedisTemplate;  //以字符串为操作的基本单元,而在客户端界面的操作都是以字符串为操作的基本单元

SpringBoot操作Redis客户端实现技术切换(jedis)

   首先我们看一下默认配置(下面图的配置,有的idea版本是client-type,有的是client-name,都可以尝试一下)

数据层解决方案---springboot三种内置数据源、持久化解决方案_第23张图片

   我们默认使用的不是jedis技术,但是我们可以在配置文件中将技术切换成jedis技术

首先需要导入jedis技术的maven坐标

        
            redis.clients
            jedis
        

application.yml配置文件中进行配置

spring:
  redis:
    host: localhost
    port: 6379
    client-name: jedis

运行我们之前的代码:

@SpringBootTest
public class StringRedisTemplateTest {
    @Autowired
    private RedisTemplate redisTemplate; // 以对象为操作的基本单元
    @Autowired
    private StringRedisTemplate stringRedisTemplate;  //以字符串为操作的基本单元,而在客户端界面的操作都是以字符串为操作的基本单元

    @Test
    void get(){
        ValueOperations ops = stringRedisTemplate.opsForValue();
        String name = ops.get("name");
        System.out.println(name);
    }


}

数据层解决方案---springboot三种内置数据源、持久化解决方案_第24张图片

Redis中,lettcus(默认)与jedis的区别

数据层解决方案---springboot三种内置数据源、持久化解决方案_第25张图片

2.关于MongoDB

   基本介绍

    MongoDB是一个开源、高性能、无模式的文档型数据库。NoSQL数据库产品中的一种,是最  像关系型数据库的非关系型数据库

           可以应用于 数据变化比较快的场景

数据层解决方案---springboot三种内置数据源、持久化解决方案_第26张图片

数据层解决方案---springboot三种内置数据源、持久化解决方案_第27张图片

启动MongoDB

数据层解决方案---springboot三种内置数据源、持久化解决方案_第28张图片

数据层解决方案---springboot三种内置数据源、持久化解决方案_第29张图片

在cmd中输入下列的命令

数据层解决方案---springboot三种内置数据源、持久化解决方案_第30张图片

 启动端口:27017 

数据层解决方案---springboot三种内置数据源、持久化解决方案_第31张图片

此时服务端已经启动起来了

运行MongoDB客户端

  在bin目录下打开cmd,并且输入下列命令,此时连接到服务器上面去了

数据层解决方案---springboot三种内置数据源、持久化解决方案_第32张图片

 安装robo3t软件,并进行连接

数据层解决方案---springboot三种内置数据源、持久化解决方案_第33张图片

数据层解决方案---springboot三种内置数据源、持久化解决方案_第34张图片

数据层解决方案---springboot三种内置数据源、持久化解决方案_第35张图片

 接下来就可以操作对应的库了

数据层解决方案---springboot三种内置数据源、持久化解决方案_第36张图片

如果安装MongoDB时候有缺陷,参考下列解决方案:

数据层解决方案---springboot三种内置数据源、持久化解决方案_第37张图片

MongoDB的基本操作

    

  右键点击“local”,选择创建数据库 

数据层解决方案---springboot三种内置数据源、持久化解决方案_第38张图片

右键点击“company”,选择创建集合“create Collection”,并命名为“book”(在这里不叫做表,叫做集合)

数据层解决方案---springboot三种内置数据源、持久化解决方案_第39张图片

点击我们新创建的集合“book”后,发现右侧界面分成了两部分,上半部分是命令区,下半部分是结果区 

数据层解决方案---springboot三种内置数据源、持久化解决方案_第40张图片

添加数据(文档)

数据层解决方案---springboot三种内置数据源、持久化解决方案_第41张图片

 数据层解决方案---springboot三种内置数据源、持久化解决方案_第42张图片

查询表中的内容(下面就是刚添加的内容)(id类似于主键)

数据层解决方案---springboot三种内置数据源、持久化解决方案_第43张图片

 数据层解决方案---springboot三种内置数据源、持久化解决方案_第44张图片

带条件的查询 

数据层解决方案---springboot三种内置数据源、持久化解决方案_第45张图片

删除操作

数据层解决方案---springboot三种内置数据源、持久化解决方案_第46张图片

修改操作(第一个参数是条件,第二个参数是将什么修改成什么)(此时的修改只会修改第一个name=springboot的,如果还有name=springboot的并不会修改) 

数据层解决方案---springboot三种内置数据源、持久化解决方案_第47张图片

其他操作

数据层解决方案---springboot三种内置数据源、持久化解决方案_第48张图片

SpringBoot整合MongoDB

  创建项目,选择下列的模板

数据层解决方案---springboot三种内置数据源、持久化解决方案_第49张图片

如果不选择这个模板的话,就添加下列maven坐标

        
            org.springframework.boot
            spring-boot-starter-data-mongodb
        

连接MongoDB

spring:
  data:
    mongodb:
#        下面的company要和 我们软件Robo中的库对一下
      uri: mongodb://localhost/company

代码:(读写MongoDB)

@SpringBootTest
class Springboot17MongodbApplicationTests {

    @Autowired
    private MongoTemplate mongoTemplate;

    @Test
    void save() {
        Book book = new Book();
        book.setId(111);
        book.setType("数学");
        book.setDescription("优秀");
        mongoTemplate.save(book);
    }
    @Test
    void find(){
      List all =  mongoTemplate.findAll(Book.class);
        System.out.println(all);
    }

}

3.SpringBoot整合ES

   基本介绍

    Elasticsearch是一个分布式全文搜索引擎,简称ES

      全文搜索基本过程

    由数据中关键字得到“id”,再有“id”得到部分数据(倒排索引)

   比如,当我们搜索“Spring”关键字之后,我们发现数据库中第一二三四五条都有“Spring”字眼,即加载了一二三四五条数据的id,但是光有数据的id还不能看内容,故还会加载其对应的部分数据,而不是全部的数据。(某一个关键字对应一个或多个id,每个id对应一个简化版的数据,并用一种数据展示出来)若我们再点击这个部分数据展示出整体的数据,就不是ES的工作了(应该是数据库技术)。

数据层解决方案---springboot三种内置数据源、持久化解决方案_第50张图片

文档

下面的每一条数据,都是一个文档(不是一行,是一条数据)

 

 使用文档

当输入关键字之后,可以得到某个数据

安装ES与启动ES

数据层解决方案---springboot三种内置数据源、持久化解决方案_第51张图片

  我们发现ES有一个自带的JDK,版本是17,版本较高 

数据层解决方案---springboot三种内置数据源、持久化解决方案_第52张图片

在bin目录下,找到下面这个“bat”结尾的文件,进行双击(第一次的运行时间比较长)

  运行完成之后搜索9200端口(这个白色框的搜索是Ctrl+f)

数据层解决方案---springboot三种内置数据源、持久化解决方案_第53张图片

下面这个端口就是对外提供服务的端口

数据层解决方案---springboot三种内置数据源、持久化解决方案_第54张图片

 之后在浏览器中输入localhost:9200

 如果出现一下的JSON串,就表示安装成功了

数据层解决方案---springboot三种内置数据源、持久化解决方案_第55张图片

ES基本操作

   创建索引

    使用Put请求,注意,相同的索引只有一个(如果再添加一个books索引,就会失败) 

数据层解决方案---springboot三种内置数据源、持久化解决方案_第56张图片

查询指定索引

数据层解决方案---springboot三种内置数据源、持久化解决方案_第57张图片

分词操作

之后下载插件ik,

并且放到下面的文件夹下,之后再重新运行一下ES 

数据层解决方案---springboot三种内置数据源、持久化解决方案_第58张图片

数据层解决方案---springboot三种内置数据源、持久化解决方案_第59张图片

添加文档操作

方法一:

数据层解决方案---springboot三种内置数据源、持久化解决方案_第60张图片

数据层解决方案---springboot三种内置数据源、持久化解决方案_第61张图片

 方法二:

数据层解决方案---springboot三种内置数据源、持久化解决方案_第62张图片

 方法三:

数据层解决方案---springboot三种内置数据源、持久化解决方案_第63张图片

查询文档操作 

查询单条

数据层解决方案---springboot三种内置数据源、持久化解决方案_第64张图片

 查询全部

数据层解决方案---springboot三种内置数据源、持久化解决方案_第65张图片

 条件查询

数据层解决方案---springboot三种内置数据源、持久化解决方案_第66张图片

 数据层解决方案---springboot三种内置数据源、持久化解决方案_第67张图片

删除文档操作

数据层解决方案---springboot三种内置数据源、持久化解决方案_第68张图片

 数据层解决方案---springboot三种内置数据源、持久化解决方案_第69张图片

 修改文档操作

数据层解决方案---springboot三种内置数据源、持久化解决方案_第70张图片

SpringBoot整合ES 

低版本导入坐标

 
            org.springframework.boot
            spring-boot-starter-data-elasticsearch
        
        
            mysql
            mysql-connector-java
        
        
            com.baomidou
            mybatis-plus-boot-starter
            3.5.1
        
        
            com.alibaba
            druid-spring-boot-starter
            1.2.8
        
        
            org.projectlombok
            lombok
        

#第二种方法:Druid专用配置  推荐
spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/user_db?serverTimezone=GMT
      username: root
      password: admin
  elasticsearch:
    rest:
      uris: http://localhost:9200
#开启MP运行日志
mybatis-plus:
  configuration:
    #    标准输出 打印到控制台上   以后我们就不用sout输出了,  这个东西会帮我们输出
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

代码:

    @Test
    void contextLoads() {
        bookDao.selectById(10086);
    }

    @Autowired
    private ElasticsearchRestTemplate template;
    @Test
    void fn(){
   //template调用各种方法
    }

高版本导入坐标

上面的第一组坐标是低版本的,我们一般使用下面这个高版本的坐标 

     
            org.elasticsearch.client
            elasticsearch-rest-high-level-client
        

此时在yml文件配置中,已经没有高版本的整合了,只能下面我们自己写 

#第二种方法:Druid专用配置  推荐
spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/user_db?serverTimezone=GMT
      username: root
      password: admin
#  elasticsearch:
#    rest:
#      uris: http://localhost:9200
#开启MP运行日志
mybatis-plus:
  configuration:
    #    标准输出 打印到控制台上   以后我们就不用sout输出了,  这个东西会帮我们输出
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

开启客户端

   下面其实是我们自己维护的,不是springboot提供的

    private RestHighLevelClient client;
    @Test
    void testCreateClient(){
        HttpHost host = HttpHost.create("http://localhost:9200");
        RestClientBuilder builder = RestClient.builder(host);
        client = new RestHighLevelClient(builder);
    }

关闭客户端

client.close();

数据层解决方案---springboot三种内置数据源、持久化解决方案_第71张图片

你可能感兴趣的:(springboot,linq,sql,p2p,spring,boot)