首先要来说下使用MongoDB的优缺点:

优点

  1. 对数据库高并发读写
  2. 对海量数据的高效率存储和访问
  3. 对数据库的高可扩展和高可选用性

缺点

  1. 数据库事务一致性
  2. 数据库的写实时效性和读时时效性需要
  3. 对复杂的SQL查询 特别是多表关联查询的需要

在项目中的用MongoDB 的两种方式

  1. MongoRepository 使用更加简单 容易上手
  2. MongoTemplate 使用更加灵活 可以根据需要自己定义

说明: 我这里是安装了MongoDB在远程服务器上,自己也可以在安装,
具体安装可以查看安装教程,很简单的

第一步: 创建一个新的项目的同时把Mongo相关的jar包引入

 <!--MongoDB-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-mongodb</artifactId>
        <version>3.1.15</version>
    </dependency>

第二步: 在配置文件中配置Mongo连接,如果你的连接不上可以看下说明,自己安装的是否正确

# mongoDB 配置连接
spring.data.mongodb.uri=mongodb://0.0.0.0:27017/test  #地址:端口/使用的Mongo库名

第三步: 在项目中使用代码(因为有两种方式,我使用这 MongoRepository 一种来说下)

1.在项目中创建是实体类

@Data
@Document("test")
public class test {
private String id;

private String name;

private String age;

private String sex;
}

2.写需要操作的接口

 // 该接口继承MongoRepository接口里的方法 
 public interface TestRepository extends MongoRepository<Test, String> {
 }

3.在测试类里面测试接口方法,对数据进行操作CRUD
添加操作

@Autowired
private TestRepository testRepository;

// 添加操作
@Test
public void Create() {
	TestDemo test = new TestDemo();
	test.setName("测试");
	test.setAge("18");
	test.setSex("男");
	TestDemo save = testRepository.save(test);
	System.out.println("添加的是: " + save) ;
}

返回结果成功
image
在MongoDB里面查看结果也是有的
image
现在是正常添加了一条数据

查询操作
全查

@Test
public void List() {
	List<TestDemo> all = testRepository.findAll();
	System.out.println("all" + all);
}

查到结果是一样的
image

通过ID查询

@Test
public void findId() {
	TestDemo byId = testRepository.findById("622d9cd608e83d7533857ce6").get();
	System.out.println("byid" + byId);
}

image

在条件查询时还会有特殊的的查询方法,也一并和小伙伴分享一下
如多条件查询

@Test
public void findList() {
	// name = 测试 and age = 18
	TestDemo test = new TestDemo();
	test.setName("测试");
	test.setAge("18");
	List<TestDemo> list = testRepository.findAll(Example.of(test));
	System.out.println(list);
}

image

如条件模糊查询

@Test
public void findLike() {
	// 模设置糊查询的规则
	ExampleMatcher matcher = ExampleMatcher.matching()
			// 需要匹配的规则
			.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)
			// 设置忽略大小写
			.withIgnoreCase(true);
	TestDemo test = new TestDemo();
	test.setName("测");
	test.setAge("18");
	List<TestDemo> list = testRepository.findAll(Example.of(test,matcher));
	System.out.println(list);
}

image

还有条件查询带分页

@Test
public void findPage() {
	// 设置分页的当前页和每页的条数 这里的第一页启始是0
	Pageable pageable = PageRequest.of(0,2);

	// 需要的条件
	TestDemo test = new TestDemo();
	test.setName("测试");
	// 执行方法 findAll 方法里面可以传条件对象和分页对象
	Page<TestDemo> all = testRepository.findAll(Example.of(test), pageable);
	// 查询到数据的总条数
	int totalPages = all.getTotalPages();
	// 他返回的结果取值 如果用兴趣的下伙伴可以注释掉该行 看该方法返回的结果
	List<TestDemo> content = all.getContent();

	System.out.println("总数" +  totalPages);
	System.out.println("数据" + content);

}

image

修改

@Test
public void update() {
	TestDemo byId = testRepository.findById("622d9cd608e83d7533857ce6").get();
	byId.setName("测试修改为正式");
	byId.setAge("20");
	// 修改调用的方法和添加是一样的,但它在使用的时候会根据你是否有id值来判断当前是要执行添加操作还是修改操作
	TestDemo save = testRepository.save(byId);
	System.out.println("修改后:" + save);
}

image

删除

// MongoRepository 删除是没有返回的 所以我们可以直接看库
@Test
public void del() {
	testRepository.deleteById("622d9cd608e83d7533857ce6");
}

结果是库里已经删除了
image

以上就是项目中MongoDB的CURD操作,这些也是最近刚学习的.可能也会有不足的地方,需要继续学习更多

posted on 2022-03-13 16:27  Cetl  阅读(543)  评论(0编辑  收藏  举报