当前位置:   article > 正文

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

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有关的解决方案

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>druid-spring-boot-starter</artifactId>
  4. <version>1.2.8</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.baomidou</groupId>
  8. <artifactId>mybatis-plus-boot-starter</artifactId>
  9. <version>3.5.1</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>mysql</groupId>
  13. <artifactId>mysql-connector-java</artifactId>
  14. </dependency>
  15. <dependency>

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

1.关于数据源

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

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

       

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

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

 

    第二部分.Druid有关的配置

         格式一是标准格式

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

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

  1. @Autowired
  2. private JdbcTemplate jdbcTemplate;
  3. @Test
  4. void JDBCTEST(){
  5. // jdbcTemplate.update();//增删改
  6. // jdbcTemplate.query(); //查询
  7. // jdbcTemplate.queryForObject();//查询单个对象
  8. /* 但是我们一般不使用这种格式
  9. String sql ="select * from t_book ";
  10. List<Map<String,Object>> maps = jdbcTemplate.queryForList(sql);
  11. System.out.println(maps);*/
  12. RowMapper<Book> rm = new RowMapper<Book>() {
  13. @Override
  14. public Book mapRow(ResultSet resultSet, int i) throws SQLException {
  15. // ResultSet resultSet 其实就是结果集
  16. Book temp = new Book();
  17. temp.setId(resultSet.getInt("id"));
  18. temp.setType(resultSet.getString("type"));
  19. temp.setStatue(resultSet.getString("statue"));
  20. temp.setBookName(resultSet.getString("bookName"));
  21. return temp;
  22. }
  23. };
  24. String sql ="select * from t_book ";
  25. List<Book> list = jdbcTemplate.query(sql,rm);
  26. System.out.println(list);
  27. }
  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-jdbc</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>mysql</groupId>
  7. <artifactId>mysql-connector-java</artifactId>
  8. </dependency>

   关于jdbcTemplate的其他设置

3.Springboot内置数据库

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

   演示H2数据库

  1. </dependency>
  2. <dependency>
  3. <groupId>com.h2database</groupId>
  4. <artifactId>h2</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-data-jpa</artifactId>
  9. </dependency>

     切记是web工程

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

        当我们连接之后,我们发现连接异常(这是因为首次使用的原因,此时我们只需要在配置文件中配置相应的数据源就好了,当我们启动成功后,这些配置员可以删除,也可以留着)

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

  1. #h2***************************
  2. server:
  3. port: 8080
  4. spring:
  5. h2:
  6. console:
  7. path: /h2
  8. enabled: true
  9. datasource:
  10. url: jdbc:h2:~/test
  11. hikari:
  12. driver-class-name: org.h2.Driver
  13. username: sa
  14. password: 123456

重新启动项目,输入密码

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

    添加一个表

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

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

   

总结:

二、与NoSQL有关的解决方案

        也是做数据存储的

 

 1.关于Redis

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

       支持多种数据存储格式

       支持持久化

        支持集群

怎么启动Redis?

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

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

怎么使用?

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

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

   存放值和取值

  哈希存储结构

怎么退出?

         Ctrl+C

2.SpringBoot整合Redis

   整合前提

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

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-redis</artifactId>
  4. </dependency>

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

  1. spring:
  2. redis:
  3. host: localhost
  4. port: 6379

整合开始

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

  1. import org.junit.jupiter.api.Test;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.boot.test.context.SpringBootTest;
  4. import org.springframework.data.redis.core.HashOperations;
  5. import org.springframework.data.redis.core.RedisTemplate;
  6. import org.springframework.data.redis.core.ValueOperations;
  7. @SpringBootTest
  8. class Springboot16RedisApplicationTests {
  9. // 用这个属性就能操作Redis
  10. @Autowired
  11. private RedisTemplate redisTemplate;
  12. // 下面测试类运行的时候,一定要确保Redis是开启的状态
  13. @Test
  14. void set() {
  15. ValueOperations valueOperations = redisTemplate.opsForValue();//不仅仅有一个操作种类,有很多的操作种类
  16. valueOperations.set("age","41"); //键值对的方式
  17. }
  18. @Test
  19. void get() {
  20. ValueOperations valueOperations = redisTemplate.opsForValue();
  21. Object age = valueOperations.get("age"); //利用键值对的方式给取出来
  22. System.out.println(age);
  23. }
  24. // 下面两个是哈希的结构
  25. @Test
  26. void hSet() {
  27. HashOperations ho = redisTemplate.opsForHash();//不仅仅有一个操作种类,有很多的操作种类
  28. ho.put("info","a","aa"); //键值对的方式
  29. }
  30. @Test
  31. void hGet() {
  32. HashOperations ho = redisTemplate.opsForHash();
  33. Object p = ho.get("info","a");
  34. System.out.println(p);
  35. }
  36. }

SpringBoot读取Redis的客户端

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

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

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

 修改后的代码如下图:

  1. import org.springframework.data.redis.core.ValueOperations;
  2. @SpringBootTest
  3. public class StringRedisTemplateTest {
  4. @Autowired
  5. private StringRedisTemplate stringRedisTemplate; //以字符串为操作的基本单元,而在客户端界面的操作都是以字符串为操作的基本单元
  6. @Test
  7. void get(){
  8. ValueOperations<String,String> ops = stringRedisTemplate.opsForValue();
  9. String name = ops.get("name");
  10. System.out.println(name);
  11. }
  12. }

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

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

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

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

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

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

  1. <dependency>
  2. <groupId>redis.clients</groupId>
  3. <artifactId>jedis</artifactId>
  4. </dependency>

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

  1. spring:
  2. redis:
  3. host: localhost
  4. port: 6379
  5. client-name: jedis

运行我们之前的代码:

  1. @SpringBootTest
  2. public class StringRedisTemplateTest {
  3. @Autowired
  4. private RedisTemplate redisTemplate; // 以对象为操作的基本单元
  5. @Autowired
  6. private StringRedisTemplate stringRedisTemplate; //以字符串为操作的基本单元,而在客户端界面的操作都是以字符串为操作的基本单元
  7. @Test
  8. void get(){
  9. ValueOperations<String,String> ops = stringRedisTemplate.opsForValue();
  10. String name = ops.get("name");
  11. System.out.println(name);
  12. }
  13. }

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

2.关于MongoDB

   基本介绍

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

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

启动MongoDB

在cmd中输入下列的命令

 启动端口:27017 

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

运行MongoDB客户端

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

 安装robo3t软件,并进行连接

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

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

MongoDB的基本操作

    

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

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

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

添加数据(文档)

 

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

 

带条件的查询 

删除操作

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

其他操作

SpringBoot整合MongoDB

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

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

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-mongodb</artifactId>
  4. </dependency>

连接MongoDB

  1. spring:
  2. data:
  3. mongodb:
  4. # 下面的company要和 我们软件Robo中的库对一下
  5. uri: mongodb://localhost/company

代码:(读写MongoDB)

  1. @SpringBootTest
  2. class Springboot17MongodbApplicationTests {
  3. @Autowired
  4. private MongoTemplate mongoTemplate;
  5. @Test
  6. void save() {
  7. Book book = new Book();
  8. book.setId(111);
  9. book.setType("数学");
  10. book.setDescription("优秀");
  11. mongoTemplate.save(book);
  12. }
  13. @Test
  14. void find(){
  15. List<Book> all = mongoTemplate.findAll(Book.class);
  16. System.out.println(all);
  17. }
  18. }

3.SpringBoot整合ES

   基本介绍

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

      全文搜索基本过程

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

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

文档

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

 

 使用文档

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

安装ES与启动ES

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

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

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

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

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

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

ES基本操作

   创建索引

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

查询指定索引

分词操作

之后下载插件ik,

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

添加文档操作

方法一:

 方法二:

 方法三:

查询文档操作 

查询单条

 查询全部

 条件查询

 

删除文档操作

 

 修改文档操作

SpringBoot整合ES 

低版本导入坐标

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>mysql</groupId>
  7. <artifactId>mysql-connector-java</artifactId>
  8. </dependency>
  9. <dependency>
  10. <groupId>com.baomidou</groupId>
  11. <artifactId>mybatis-plus-boot-starter</artifactId>
  12. <version>3.5.1</version>
  13. </dependency>
  14. <dependency>
  15. <groupId>com.alibaba</groupId>
  16. <artifactId>druid-spring-boot-starter</artifactId>
  17. <version>1.2.8</version>
  18. </dependency>
  19. <dependency>
  20. <groupId>org.projectlombok</groupId>
  21. <artifactId>lombok</artifactId>
  22. </dependency>

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

代码:

  1. @Test
  2. void contextLoads() {
  3. bookDao.selectById(10086);
  4. }
  5. @Autowired
  6. private ElasticsearchRestTemplate template;
  7. @Test
  8. void fn(){
  9. //template调用各种方法
  10. }

高版本导入坐标

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

  1. <dependency>
  2. <groupId>org.elasticsearch.client</groupId>
  3. <artifactId>elasticsearch-rest-high-level-client</artifactId>
  4. </dependency>

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

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

开启客户端

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

  1. private RestHighLevelClient client;
  2. @Test
  3. void testCreateClient(){
  4. HttpHost host = HttpHost.create("http://localhost:9200");
  5. RestClientBuilder builder = RestClient.builder(host);
  6. client = new RestHighLevelClient(builder);
  7. }

关闭客户端

client.close();

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/243458
推荐阅读
相关标签
  

闽ICP备14008679号