SpringBoot整合MongoDB(mongodb springboot)

  本篇文章为你整理了SpringBoot整合MongoDB(mongodb springboot)的详细内容,包含有springboot mongo mongodb springboot springboot整合mongodb的id生成 spring data mongodb SpringBoot整合MongoDB,希望能帮助你了解 SpringBoot整合MongoDB。

  NoSQL(Not Only SQL),即反SQL运动或者是不仅仅SQL,指的是非关系型的数据库,是一项全新的数据库革命运动,是一种全新的思维注入

  NoSQL优点

  数据库高并发读写

  海量数据高效率存储和访问

  数据库高扩展性和高可用性

  
由C++语言编写,是一个基于分布式文件存储的开源数据库系统;在高负载的情况下,添加更多的节点,可以保证服务器性能

  MongoDB旨在为WEB应用提供可扩展的高性能数据存储解决方案;将数据存储为一个文档,数据结构由键值对组成。MongoDB文档类似于JSON对象字段值可以包含其他问你当、数组及文档数组

  
MongoDB是一个面向文档存储的数据库,操作起来比较简单和容易

  MongoDB记录总可以设置任何属性的索引

  可以通过本地后者网络创建数据镜像,这使得MongoDB有更强的扩展性

  如果负载的增减(需要跟多的存储空间和更强的处理能力),它可以分布在计算机网络中的其他节点上,这就是所谓的分片

  MongoDB支持丰富的查询表达式,查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象和数组

  MongoDB使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段

  MongoDB中的Map/reduce主要是用来对数据进行批量处理和聚合操作

  Map和Reduce

  Map函数调用emit(key, value)便利集合中所有的记录,将key域value传给Reduce函数进行处理

  Map和Reduce函数是使用JavaScript编写的,把那个可以通过db.runCommand或mapreduce命令来执行MapReduce操作

  
GridFS是MongoDB中的一个内置功能,可以用于存放大量的小文件

  MongoDB允许在服务端执行脚本,可以用JavaScript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可

  MongoDB支持跟中编程语言:RUBY、PYTHON、JAVA、C++、PHP、C#

  
集成简介:spring-data-mongodb提供了MongoTemplate和MongoRepository两种方式访问MongoDB;MongoTemplate操作灵活,MongoRepository操作简单,不够灵活

  添加相关依赖

  
groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-data-mongodb /artifactId

   version 2.2.1.RELEASE /version

   /dependency

   dependency

   groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-web /artifactId

   version 2.2.1.RELEASE /version

   /dependency

   dependency

   groupId org.projectlombok /groupId

   artifactId lombok /artifactId

   version 1.18.10 /version

   /dependency

   dependency

   groupId joda-time /groupId

   artifactId joda-time /artifactId

   version 2.10.1 /version

   /dependency

   dependency

   groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-test /artifactId

   scope test /scope

   exclusions

   exclusion

   groupId org.junit.vintage /groupId

   artifactId junit-vintage-engine /artifactId

   /exclusion

   /exclusions

   /dependency

  

 

 

  

spring.data.mongodb.uri=mongodb://Your IP:27017/your database

 

  

 

  创建与集合对应的实体类

  

@Data

 

  @Document("User") // 表示操作的是your database下的User集合

  public class User {

   private String id;

   private String name;

   private Integer age;

  

 

  测试MongoTemplate访问MongoDB(CRUD)

  

@SpringBootTest

 

  public class MongoDBTest {

   @Autowired

   private MongoTemplate mongoTemplate;

   /** 新增 */

   @Test

   public void insert() {

   User user = new User();

   user.setName("xiansen");

   user.setAge(18);

   User u = mongoTemplate.insert(user);

   System.out.println("user = " + u);

   /** 查询所有记录 */

   @Test

   public void findAll() {

   List User all = mongoTemplate.findAll(User.class);

   System.out.println("all = " + all);

   /** ID查询 */

   @Test

   public void findById() {

   User u = mongoTemplate.findById("rge8vcuxdfsfdfsdf", User.class);

   System.out.println("u = " + u);

   /** 条件查询 */

   @Test

   public void findUserList() {

   Query query = new Query(Criteria.where("name").is("xiansen").and("age").is(18));

   List User users = mongoTemplate.find(query, User.class);

   System.out.println("users = " + users);

   /** 模糊查询 */

   @Test

   public void findUserListByLike() {

   String name = "xian";

   String regex = String.format("%s%s%s", "^.*", name, ".*$");

   Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); // 大小写敏感

   Query query = new Query(Criteria.where("name").regex(pattern)); // 使用正则表达式实现模糊查询

   List User users = mongoTemplate.find(query, User.class);

   System.out.println("users = " + users);

   /** 分页查询 */

   @Test

   public void findPageUserList() {

   int current = 1;

   int limit = 3;

   String name = "xian";

   String regex = String.format("%s%s%s", "^.*", name, ".*$");

   Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); // 大小写敏感

   Query query = new Query(Criteria.where("name").regex(pattern));

   // 查询的记录数

   Long count = mongoTemplate.count(query, User.class);

   System.out.println("count = " + count);

   // 分页查询

   List User users = mongoTemplate.find(query.skip((current-1)*limit).limit(limit), User.class);

   System.out.println("users = " + users);

   /** 修改 */

   @Test

   public void updateUser() {

   User u = mongoTemplate.findById("ds98h98sdhds6gt7u", User.class);

   u.setName("hello");

   u.setAge(20);

   Query query = new Query(Criteria.where("_id").is(u.getId()));

   Update update = new Update();

   update.set("name", u.getName());

   update.set("age", u.getAge());

   UpdateResult upsert = mongoTemplate.upsert(query, update, User.class);

   long modifiedCount = upsert.getModifiedCount(); // 影响的行数

   System.out.println("modifiedCount = " + modifiedCount);

   /** 删除 */

   @Test

   public void deleteUser() {

   Query query = new Query(Criteria.where("_id").is("ds98h98sdhds6gt7u"));

   DeleteResult remove = mongoTemplate.remove(query, User.class);

   long deletedCount = remove.getDeletedCount(); // 影响的行数

   System.out.println("deletedCount = " + deletedCount);

  

 

  相比于MongoTemplate,MongoRepository实现CRUD操作,还需要创建一个继承MongoRepository接口的接口,如

  

@Repository

 

  public interface UserRepository extends MongoRepository User, String {}

  

 

  测试MongoRepository访问MongoDB(CRUD)

  

@SpringBootTest

 

  public class MongoDBTest {

   @Autowired

   private UserRepository userRepository;

  
User u = userRepository.findById("rge8vcuxdfsfdfsdf").get();

   System.out.println("u = " + u);

   /** 条件查询 */

   @Test

   public void findUserList() {

   User user = new User();

   user.setName("xiansen");

   user.setAge(18);

   Example User userExample = Example.of(user);

   List User users = userRepository.findAll(userExample);

   System.out.println("users = " + users);

   /** 模糊查询 */

   @Test

   public void findUserListByLike() {

   User user = new User();

   user.setName("xian");

   user.setAge(18);

   ExampleMatcher matcher = ExampleMatcher.matching()

   .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) // 表示模糊查询

   .withIgnoreCase(true); // 忽略大小写

   Example User userExample = Example.of(user, matcher);

   List User users = userRepository.findAll(userExample);

   System.out.println("users = " + users);

   /** 分页查询 */

   @Test

   public void findPageUserList() {

   // 分页设置参数

   Pageable pageable = PageRequest.of(0, 3);// 0表示第一页

   User user = new User();

   user.setName("xiansen");

   user.setAge(18);

   Example User userExample = Example.of(user);

   Page User page = userRepository.findAll(userExample, pageable);

   System.out.println("page = " + page);

   /** 修改 */

   @Test

   public void updateUser() {

   User u = userRepository.findById("ds98h98sdhds6gt7u").get();

   u.setName("hello");

   u.setAge(20);

   User user = userRepository.save(u);

   System.out.println("user = " + user);

   /** 删除 */

   @Test

   public void deleteUser() {

   userRepository.deleteById("ds98h98sdhds6gt7u");

  

 

  以上就是SpringBoot整合MongoDB(mongodb springboot)的详细内容,想要了解更多 SpringBoot整合MongoDB的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: