首先要来说下使用MongoDB的优缺点:
优点
- 对数据库高并发读写
- 对海量数据的高效率存储和访问
- 对数据库的高可扩展和高可选用性
缺点
- 数据库事务一致性
- 数据库的写实时效性和读时时效性需要
- 对复杂的SQL查询 特别是多表关联查询的需要
在项目中的用MongoDB 的两种方式
- MongoRepository 使用更加简单 容易上手
- 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) ;
}
返回结果成功
在MongoDB里面查看结果也是有的
现在是正常添加了一条数据
查询操作
全查
@Test
public void List() {
List<TestDemo> all = testRepository.findAll();
System.out.println("all" + all);
}
查到结果是一样的
通过ID查询
@Test
public void findId() {
TestDemo byId = testRepository.findById("622d9cd608e83d7533857ce6").get();
System.out.println("byid" + byId);
}
在条件查询时还会有特殊的的查询方法,也一并和小伙伴分享一下
如多条件查询
@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);
}
如条件模糊查询
@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);
}
还有条件查询带分页
@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);
}
修改
@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);
}
删除
// MongoRepository 删除是没有返回的 所以我们可以直接看库
@Test
public void del() {
testRepository.deleteById("622d9cd608e83d7533857ce6");
}
结果是库里已经删除了
以上就是项目中MongoDB的CURD操作,这些也是最近刚学习的.可能也会有不足的地方,需要继续学习更多