Springboot整合使用Mongodb

在Springboot里面,使用Mongo数据库,简直! 使用起来比Redis是简单多多多了!!!!

但是也有一个小缺陷(个人的感觉),最后我会提到。
 

不废话,上! 代码!

先是pom.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>com.jc</groupId>
   <artifactId>mongodemo</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>mongodemo</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.0.5.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
   </properties>

   <dependencies>
      <!--mongodb的包-->
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-data-mongodb</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>
   </dependencies>

   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>


</project>

从pom文件里面可以看出,确实非常简单的感觉啊,就一个包导入就可以了。

然后,yml文件:

spring:
  data:
    mongodb:
      uri: mongodb://IP地址:端口(27017或者你设置的)/(数据库的名称)

就这样。

然后配置的条条框框(虽然没啥)已经搞完,那么我们开始进入使用环节。

第一步是干嘛呢?

先看下,mongodb里面数据的格式:

从上边截图可以看到,这里面的Collections,其实就是类似mysql里面的表的那种东西。然后右边的框,可以看到有个Key的概念,其实就是指这个集合里面,你需要获取的小集合信息,在这个小集合里面,实际上是对应一个实体类的,取值的时候就get方法就可以。

那么,我们来建一个实体类吧,

UserEntity:
package com.jc.mongodemo.pojo;

import java.io.Serializable;

/**
 * @Author: JCccc
 * @CreateTime: 2018-09-28
 * @Description:
 */



public class UserEntity implements Serializable {
    private static final long serialVersionUID = -3258839839160856613L;
    private Long id;
    private String userName;
    private String passWord;
    private String type;

    @Override
    public String toString() {
        return "UserEntity{" +
                "id=" + id +
                ", userName='" + userName + '\'' +
                ", passWord='" + passWord + '\'' +
                ", type='" + type + '\'' +
                '}';
    }

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}

好了,上面实体类的字段,你需要知道,是必须一 一 对 应 mongodb里面某个小集合的 字段的!!!!!否则 ,不能成功取数据!

然后写个方法类吧,我这里没严格解耦,

UserDaoImpl:
package com.jc.mongodemo.dao;

import com.jc.mongodemo.pojo.UserEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @Author: JCccc
 * @CreateTime: 2018-09-28
 * @Description:
 */
@Component
public class UserDaoImpl  {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 创建对象
     * @param user
     */

    public void saveUser(UserEntity user) {
        mongoTemplate.save(user);
    }


    public List<UserEntity> findUserByType(String type) {
        Query query=new Query(Criteria.where("type").is(type));
        List<UserEntity> userlist =  mongoTemplate.findAllAndRemove(query , UserEntity.class);
        return userlist;
    }

    public List<UserEntity> findUserByCollection(String CollectionName,String type) {
        Query query=new Query(Criteria.where("type").is(type));
        List<UserEntity> userlist =  mongoTemplate.findAllAndRemove(query , UserEntity.class,CollectionName);
        return userlist;
    }


    /**
     * 根据用户名查询对象
     * @param userName
     * @return
     */

    public UserEntity findUserByUserName(String userName) {
        Query query=new Query(Criteria.where("userName").is(userName));
        UserEntity user =  mongoTemplate.findOne(query , UserEntity.class);
        return user;
    }

    /**
     * 更新对象
     * @param user
     */

    public void updateUser(UserEntity user) {
        Query query=new Query(Criteria.where("id").is(user.getId()));
        Update update= new Update().set("userName", user.getUserName()).set("passWord", user.getPassWord());
        //更新查询返回结果集的第一条
        mongoTemplate.updateFirst(query,update,UserEntity.class);
        //更新查询返回结果集的所有
        // mongoTemplate.updateMulti(query,update,UserEntity.class);
    }

    /**
     * 删除对象
     * @param id
     */

    public void deleteUserById(Long id) {
        Query query=new Query(Criteria.where("id").is(id));
        mongoTemplate.remove(query,UserEntity.class);
    }
}

从上边可以看到,已经开始使用mongodb了!!!! 都开始往里面CRUD了!  关键点在与啥??? 
关键点: @Autowired    private MongoTemplate mongoTemplate;   这就是告诉项目,我这里要注入mongodb的使用!

好了,然后我们去test里面去调用一下方法结束我们这个简单到极致的教程吧:

@RunWith(SpringRunner.class)
@SpringBootTest
public class MongodemoApplicationTests {

   @Test
   public void contextLoads() {
   }


   @Autowired
   private UserDaoImpl userDao;

   //...............空着先
}

先往里面注入刚才写的那些方法的类。

然后开始尝试调用方法:

这是增加一个用户信息。

@Test
public void testSaveUser() throws Exception {
   UserEntity user=new UserEntity();
   user.setId(106l);
   user.setUserName("小凯");
   user.setPassWord("fffooo123");
   user.setType("A");
   userDao.saveUser(user);
}

这是查询一个用户信息。

@Test
public void findUserByUserName(){
   UserEntity user= userDao.findUserByUserName("小凯");
   System.out.println("user is "+user);
}


这是更新一个用户信息。

@Test
public void updateUser(){
   UserEntity user=new UserEntity();
   user.setId(106l);
   user.setUserName("大凯");
   user.setPassWord("11223344");
   userDao.updateUser(user);
}

这是删除一个用户信息。

@Test
public void deleteUserById(){
   userDao.deleteUserById(106l);
}




好了,到此结束吧。
ps: 我这个例子,用户id我用的long类型哈,所以每个数字后面的l是让数字变成Long类型的意思。

最后,其实没结束,就是一开始我吐槽的我个人认为的小缺点。
 

NOSQL数据库, mongodb  。  我不知道是不是我理解角度的问题。
虽然外文意思是Not Only SQL,意即“不仅仅是SQL”。

但是中文意思:非关系型数据库。

但是你发现没,你如果没去建对应mongodb里面集合的实体类, 那么你是无法取数据的。

我感觉这样已经弄到有点关系不关系的样子了。反正取数据就很烦。 既要根据集合名字,这个很正常,redis也是这样;

总得有个标签去拿数据嘛, 但是还得建个实体类一一对应,然后如果小集合里面有个字段自己也是一个小小集合,那么还得嵌套个List,然后List要对应那个小小集合。 炒鸡麻烦。  Redis我觉得在这方面就舒服多了,根据key拿值 ,完事了。 建不建实体类,是我自己拿到数据后处理的部分,没限制要求我必须建。
以上单纯个人吐槽。。可能自己理解有偏差,勿喷。  

猜你喜欢

转载自blog.csdn.net/qq_35387940/article/details/83502274