使用Spring Data MongoDB连接数据库和简单的CRUD

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31226223/article/details/80679186

本次使用Spring Data MongoDB连接MongoDB并不是一个整合进Spring的Web项目

就是一个连接和操作MongoDB的Demo

1.依赖

一共有两个依赖,一个是MongoDB Java Driver,一个是Spring Data MongoDB Core

注意MongoDB的驱动版本号最好和数据库版本相对应(我的数据库是3.6.4,我下载的驱动也是3.6.4)

仓库地址:MongoDB Java Driver;Spring Data MongoDB Core

2.连接数据库

我们这个demo由3部分组成:1.数据对象;2.数据连接类(工具类);3.数据库操作类(测试类)

2.1数据对象代码

package cn.mrxionge.mongospring;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;

/**
 * 车辆信息对象
 *
 * @author MrXionGe
 */
@Data
@AllArgsConstructor
public class VehicleVo {
    /**
     * 车辆唯一ID
     * 这个字段在写入数据库后会变为"_id"
     */
    @Id
    private String vehicleId;
    /**
     * 车辆品牌
     */
    private String brand;
    /**
     * 车辆型号
     */
    private String model;
    /**
     * 车辆等级
     */
    private String level;
    /**
     * 车辆价格
     */
    private Integer prices;
    /**
     * 车辆类型
     */
    private String type;
    /**
     * 车辆综合马力
     */
    private Integer horsepower;
}

注意:这里的@Id注解,这个注解的字段会变为数据库中的文档的唯一id。

2.2数据连接类(工具类)

package cn.mrxionge.mongospring;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.MongoTemplate;

import java.util.UUID;

/**
 * 静态工具类
 *
 * @author MrXionGe
 */
public class MongoSpringUtil {
    /**
     * 获取6个长度的随机字符串最为车辆唯一ID
     *
     * @return RandomId
     */
    public static String getRandomId() {
        return UUID.randomUUID().toString().replace("-", "").substring(0, 16);
    }

    /**
     * 连接数据库返回数据库操作对象
     *
     * @param ip   IP地址
     * @param port 端口号
     * @param name 用户名
     * @param pwd  密码
     * @param db   要操作的数据库名称
     * @return MongoOperations
     */
    public static MongoOperations getMongoOperations(String ip, String port, String name, String pwd, String db) {
        MongoClientURI uri = new MongoClientURI("mongodb://" + name + ":" + pwd + "@" + ip + ":" + port + "/?authSource=admin&authMechanism=SCRAM-SHA-1");
        return new MongoTemplate(new MongoClient(uri), db);
    }
}

注意:这里的MongoClientURI,根据数据库配置的不同,URI的参数也有所不同

详情请参考:Connect to MongoDB

2.3数据库操作类(测试类)

import cn.mrxionge.mongospring.MongoSpringUtil;
import cn.mrxionge.mongospring.VehicleVo;
import org.junit.jupiter.api.Test;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;

import java.util.ArrayList;
import java.util.List;

import static org.springframework.data.mongodb.core.query.Criteria.where;

class MongoSpringTest {
    /**
     * 插入一条数据
     */
    @Test
    void mongoInsertOne() {
        //创建一个车辆信息,并插入集合
        MongoOperations operations = MongoSpringUtil.getMongoOperations("127.0.0.1", "27017", "root", "123456", "work");
        VehicleVo vehicle = new VehicleVo(MongoSpringUtil.getRandomId(), "Lexus", "LC 500h", "D", 1290000, "coupe", 359);
        operations.insert(vehicle);
    }

    /**
     * 插入多条数据
     */
    @Test
    void mongoInsertMany() {
        //创建多个车辆信息,放到集合中,再执行批量插入
        MongoOperations operations = MongoSpringUtil.getMongoOperations("127.0.0.1", "27017", "root", "123456", "work");
        List<VehicleVo> vehicleVos = new ArrayList<>();
        vehicleVos.add(new VehicleVo(MongoSpringUtil.getRandomId(), "Porsche", "Panamera Turbo", "D", 1950000, "sedan", 550));
        vehicleVos.add(new VehicleVo(MongoSpringUtil.getRandomId(), "Mercedes-AMG", "C63 S", "C", 1060000, "sedan", 510));
        vehicleVos.add(new VehicleVo(MongoSpringUtil.getRandomId(), "Audi Sport", "RS 6 Avant", "D", 1390000, "wagon", 560));
        vehicleVos.add(new VehicleVo(MongoSpringUtil.getRandomId(), "BMW M-Power", "M5", "D", 1510000, "sedan", 600));
        vehicleVos.add(new VehicleVo(MongoSpringUtil.getRandomId(), "Ferrari", "GTC4Lusso", "D", 3580000, "coupe", 609));
        operations.insert(vehicleVos, VehicleVo.class);
    }

    /**
     * 条件查询一条数据
     */
    @Test
    void mongoFindOne() {
        //根据条件查询出一条车辆信息
        //如果条件匹配到多条结果,只返回最前面的一个对象
        MongoOperations operations = MongoSpringUtil.getMongoOperations("127.0.0.1", "27017", "root", "123456", "work");
        VehicleVo vehicleVo = operations.findOne(new Query(where("model").is("C63 S")), VehicleVo.class);
        System.out.println(vehicleVo.toString());
    }

    /**
     * 条件查询多条数据
     */
    @Test
    void mongoFindList() {
        //根据条件查询出符合条件的所有车辆信息
        MongoOperations operations = MongoSpringUtil.getMongoOperations("127.0.0.1", "27017", "root", "123456", "work");
        List<VehicleVo> vehicleVos = operations.find(new Query(where("type").is("coupe")), VehicleVo.class);
        //遍历集合,可以使用lambda表达式或者用for遍历
        vehicleVos.forEach(System.out::println);
    }

    /**
     * 根据查询条件更新数据
     */
    @Test
    void mongoUpdate() {
        //updateFirst 是更新符合条件的第一条数据
        //updateMulti 是更新符合条件的所有数据
        MongoOperations operations = MongoSpringUtil.getMongoOperations("127.0.0.1", "27017", "root", "123456", "work");
        operations.updateMulti(new Query(where("type").is("supercar")), new Update().set("type", "coupe"), VehicleVo.class);
    }

    /**
     * 根据查询条件删除数据
     */
    @Test
    void mongoRemove() {
        MongoOperations operations = MongoSpringUtil.getMongoOperations("127.0.0.1", "27017", "root", "123456", "work");
        operations.remove(new Query(where("type").is("sedan")), VehicleVo.class);
    }

    /**
     * 删除集合(不是清空集合,是把集合删掉)
     */
    @Test
    void mongoDropCollection() {
        MongoOperations operations = MongoSpringUtil.getMongoOperations("127.0.0.1", "27017", "root", "123456", "work");
        operations.dropCollection(VehicleVo.class);
    }
}

注意:代码导入里面有“import static”,这是静态导入,而且后面直接指向的是一个方法,这样我们就能直接使用where方法了。

到此,我们就可以使用JUnit来进行测试了。

我们不需要提前建立集合,当你执行insert的时候,如果没有指定集合名称的话,会自动创建一个和数据对象同名的集合。(当然我们在操作的时候,也可以使用字符串参数来指定集合,我更喜欢用对象名字自己去映射)

最后放一张MongoDB的测试数据截图

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_31226223/article/details/80679186
今日推荐