版权声明:本文为博主原创文章,未经博主允许不得转载。 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);
}
}