SpringBoot整合NoSQL

NoSQL

  NoSQL 是指非关系型数据库,非关系型数据库和关系型数据库两者存在许多显著的不同点,其中最要的是 NoSQL 不使用 SQL 作为查询语言。其数据存储可以不需要固定的表格模式,都有水平可扩展性的特征。

1、整合redis

  Redis 是一个使用C语言写的基于内存的NoSQL 数据库,它是目前最流行的键值对存储数据库。
  Redis 由一个 Key,Value 映射的字典构成与其他 NoSQ 不同, Redis中Value 类型不局限于符串,还支持列表、集合、有序集合、散列等
  Redis 不仅可以当作缓存使用,也可以配置数
持久化后当作NoSQL 数据库使用,目前支持两种持久化方式,快照持久化和 AOF持久化。
  另一放面,Redis 也可以搭建集群或者主从复制结构,在高并发环境下具有高可用性。

redis教程:https://www.runoob.com/redis/redis-data-types.html

1.1、安装redis

  • 教程地址:https://blog.csdn.net/qq_40873718/article/details/105311436
  • windows安装方法:https://www.runoob.com/redis/redis-install.html

1.2、整合 SpringBoot

1.2.1、pom.xml文件

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

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-redis</artifactId>
     <exclusions>
         <exclusion>
             <groupId>io.lettuce</groupId>
             <artifactId>lettuce-core</artifactId>
         </exclusion>
     </exclusions>
 </dependency>

 <dependency>
     <groupId>redis.clients</groupId>
     <artifactId>jedis</artifactId>
 </dependency>

1.2.2、application.yml配置文件

spring:
  redis:
    database: 0
    host: 127.0.0.1
    port: 6379
    password:
    jedis:
      pool:
        max-active: 8
        max-idle: 8
        max-wait: -1ms
        min-idle: 0

1.2.3、实体类

@Data
public class Book implements Serializable {

    private Integer id;
    private String name;
    private String author;

}

1.2.4、访问控制层

@RestController
@RequestMapping("/redis")
public class BookRedisController {

    @Autowired
    RedisTemplate redisTemplate;

    @Autowired
    StringRedisTemplate stringRedisTemplate;

    @GetMapping("/test")
    public void test1() {
        ValueOperations<String, String> operations = stringRedisTemplate.opsForValue();
        operations.set("name", "三国演义");
        String name = operations.get("name");
        System.out.println(name);

        ValueOperations operations1 = redisTemplate.opsForValue();
        Book book = new Book();
        book.setId(1);
        book.setName("红楼梦");
        book.setAuthor("曹雪芹");

        operations1.set("book", book);
        Book resultBook = (Book) operations1.get("book");
        System.out.println(resultBook);
    }
}

2、整合MongoDB

  MongoDB是种面向文档的数据库管理系统,它是一个介于关系型数据库和非关系型数据库,MongoDB功能丰富,它支持 JSON、BSON数据格式 ,既可以存储简单的数据格式,又可以存储复杂的数据类型。
  MongoDB 最大的特点是它支持的查询语言非常强大,并且还支持对数据建立索引。总体来说,MongoDB 是一款应用相当广泛 NoSQL 数据库。

MongoDB学习手册:https://www.runoob.com/mongodb/mongodb-tutorial.html

2.1、MongoDB安装

  • 1.首先执行如下命令下载 MongoDB:

    下载完成后,将下载的 MongoDB 解压,并将解压后的文件夹重命名为 mongodb

  • 2.配置 MongoDB
      进入mongodb 目录下,创建两个文件夹 db和logs ,分别用来保存数据和日志。
      然后进入bin 录下,创建一个新的 MongoDB 配置文件 mongo.conf时,文件内容如下:

    dbpath=/opt/mongodb/db
    logpath=/opt/mongodb/logs/mongodb.log
    port=27017
    fork=true
    

    第1行配直表 数据存储目录
    第2行配置表示日志文件位直。
    第3行配置表示启动端口。
    第4行配置表示以守护程序的方式启动 MongoDB ,即允许MongoDB 在后台运行。

  • 3.MongoDB的启动
      配置完成后,还是在bin目录下,运行如下命令启动 MongoDB:

    ./mongod -f mongo.conf --bind ip all 
    

    MongoDB 启动成功后,在 bin 目录下再执行 mongo 命令,进入 MongoDB 控制台,然后输入db.version(),如果能看到 MongoDB 的版本号 就表示安装成功

  • 4.MongoDB的关闭
      默认情况下,启动后连接的是 MongoDB 中的 test 库,而关闭 MongoDB 命令需要在 admin库中执行,因此关闭 MongoDB 需要首先切换到admin下然后执行 db.shutdownServer()命令,完整操作步骤如下

    use admin;
    db.shutdownServer();
    exit
    
  • 4.安全管理
      默认情况下启动的 MongoDB 没有登录密码 在生产环境中这是非常不安全的,但是不同MySQL、Oracle等关系型数据库、MongoDB 每一个库都有不同的密码,在哪一个库中创建用就要在哪一个库中验证密码。要置密码,首先要创建 个用户,例如 admin 中创建 个用户,代码如下:

    use admin
    db.createUser({user :"sang",pwd:"123",roles:[{role:"readWrite",db :"test"}}) 
    

    新创建的用户名为 sang ,密码 123。roles 表示该用户具有的角色,这里的配置表示该用户对test 库具有读和写两项权限。

    • 用户创建成功后,关闭当前实例,然后重新启动,启动命令如下:
    ./mongod -f mongo.conf --auth --bind_ip_all
    
    • 启动成功后 再次进入控制台 然后切换到 admin 库中验证登录(默认连接上的库是 tes 库),验证成功后就可以对 test 库执行读写操作了, 代码如下:
    ./mongo 
    db.auth("sang","123")
    

    如果 db.auth(“sang”, “123”)命令执行结果为1,就表示认证成功,可以执行对 test 库的读写操作

2.2、整合 SpringBoot

2.2.1、pom.xml文件

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

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

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

2.2.2、application.yml配置文件

spring:
  data:
    mongodb:
      # 验证登录信息的库
      authentication-database: admin
      # 连接的数据库
      database: test
      host: 127.0.0.1
      port: 27017
      username: zzm
      password: '123456'

2.2.3、实体类

package com.example.springbootvuetest.pojo;

import lombok.Data;

/**
 * @author zhuzhaoman
 * @date 2020/6/10 0010 13:54
 * @description 描述
 */
@Data
public class Book {

    private Integer id;
    private String name;
    private String author;

}

2.2.4、数据访问层

package com.example.springbootvuetest.repository;

import com.example.springbootvuetest.pojo.Book;
import org.springframework.data.mongodb.repository.MongoRepository;
import java.util.List;

/**
 * @author zhuzhaoman
 * @date 2020/6/10 0010 21:12
 * @description 描述
 */
public interface BookRepository extends MongoRepository<Book, Integer> {
    /**
     * 查询名字中包含查询字段的所有Book
     * @param author
     * @return
     */
    List<Book> findByAuthorContains(String author);

    /**
     * 查询名字为查询字段的Book
     * @param name
     * @return
     */
    Book findByNameEquals(String name);
}

2.2.5、访问控制层

package com.example.springbootvuetest.controller;

import com.example.springbootvuetest.pojo.Book;
import com.example.springbootvuetest.repository.BookRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;

/**
 * @author zhuzhaoman
 * @date 2020/6/10 0010 21:16
 * @description 描述
 */
@RestController
public class BookController {

    @Autowired
    BookRepository bookRepository;

    @Autowired
    MongoTemplate mongoTemplate;

    @GetMapping("/test1")
    public void test1(){
        List<Book> books = new ArrayList<>();

        Book book1 = new Book();
        book1.setId(3);
        book1.setName("朝花夕拾");
        book1.setAuthor("鲁迅");
        books.add(book1);

        Book book2 = new Book();
        book2.setId(4);
        book2.setName("呐喊");
        book2.setAuthor("鲁迅");
        books.add(book2);

        bookRepository.insert(books);

        List<Book> bookList = bookRepository.findByAuthorContains("鲁迅");
        System.out.println(bookList);

        Book book = bookRepository.findByNameEquals("朝花夕拾");
        System.out.println(book);
    }

    @GetMapping("/test2")
    public void test2() {

        List<Book> books = new ArrayList<>();

        Book book1 = new Book();
        book1.setId(1);
        book1.setName("多年父子成兄弟");
        book1.setAuthor("汪曾祺");
        books.add(book1);

        Book book2 = new Book();
        book2.setId(2);
        book2.setName("沁园春");
        book2.setAuthor("毛泽东");
        books.add(book2);

        mongoTemplate.insertAll(books);

        List<Book> bookList = mongoTemplate.findAll(Book.class);
        System.out.println(bookList);

        Book book = mongoTemplate.findById(1, Book.class);
        System.out.println(book);
    }
}

你可能感兴趣的:(SpringBoot)