SpringDataMongo连接MongoDB基础用法

1.导入maven依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

2.配置yml

spring:
  application:
    name: mongo
  data:
    mongodb:
      # mongo开启auth后需要用户名、密码,不开启则不需要用户名,密码
      uri:  mongodb://root:root@localhost:27017
      database: db_test

3.编写实体类,指明类对应于Mongo数据库中的集合

@Data       //此注解会生成getter和setter方法
@ToString   //此注解会生成ToString方法
// @data @ToString是Lombok下的注解,可自动生成getter、setter、tostring方法
@Document(collection = "test") //指明此类对应db_test数据库下的test集合
public class Test {
    //id 对应数据库中的主键(_id,自动生成)
    @Id
    private String id;

    private String name;
}

4.写dao接口,继承MongoRepository<T,ID>,其中T为要查询的实体类,ID为主键类型

import org.springframework.data.mongodb.repository.MongoRepository;
public interface TestRepository extends MongoRepository<Test,String> {
    //根据名称查询
    Test findByName(String name);
}

查看TestRepository接口中的方法

在这里插入图片描述

5.测试

	// 注入TestRepository对象
	@Autowired
    TestRepository TestRepository ;

	// 测试查询所有方法
    @Test
    public void testFindAll(){
        List<Test> list= TestRepository .findAll();
        System.out.println(list);
    }

	// 分页查询
    @Test
    public void testFindPage(){
        //分页参数
        int page = 0;	// 页数从0开始,代表第一页
        int size = 10;	// 页面大小
        // 返回值类型可以用Pageable接收,因为PageRequest的父类实现了Pageable接口,这里用到了多态
        //Pageable pageable = PageRequest.of(page,size);
        PageRequest pageable = PageRequest.of(page,size);
        Page<Test> page= TestRepository.findAll(pageable);
        System.out.println(page.getContent());
    }

	// 更新数据
    @Test
    public void testUpdate() {
        //查询对象
        Optional<Test> optional = TestRepository.findById("数据库中的主键Id(ObjectId类型)");
        // 判断optical是否为空
        /**
        源码:
        public boolean isPresent() {
        	return value != null;
    	}
        */
        if(optional.isPresent()){
            Test test= optional.get();
            //设置要修改值
            test.setName("test01");
            //...
            // 保存到数据库中
            Test save = TestRepository.save(test);
            System.out.println(save);
        }
    }

	// 添加数据
	@Test
    public void testSave(){
    	Test test = new Test();
    	test.setName("test02");
        Test save = TestRepository.save(test);
        System.out.println(save);
    }
	
	// 自定义根据name查询
    @Test
    public void testfindByname(){
        Test test= TestRepository.findByName("test02");
        System.out.println(test);
    }

	// 

  1. 自定义查询方法

Spring Data mongodb也提供自定义方法的规则,如下:
按照findByXXX,findByXXXAndYYY、countByXXXAndYYY等规则定义方法,实现查询操作。

public interface TestRepository extends MongoRepository<Test,String> {
	/// 根据name和XXX查询
	Test findByNameAndXxx(String name,T Xxx);

	// 根据name和XXX查询总数
	int countByNameAndXxx(String name,T Xxx);
	
	// 根据name和XXX进行分页查询
	Page<Test> findByNameAndXxx(String name,T Xxx,Pageable pageable);

	// 根据name进行模糊查询,Xxx进行精确查询
	// 相当于 .....where name like %#{name}% and Xxx = #{Xxx}
	Test findByNameLikeAndXxx(String name,T Xxx);
}

7.自定义条件匹配器

	@Test
    public void testFindAllByExample(){
    	int page = 0;
    	int size = 10;
    	// 条件值对象
    	Test test = new Test();
    	test.setName("test");
    	// 定义条件匹配器
    	ExampleMatcher matcher = ExampleMatcher.matching()
    		// 自定义查询条件为模糊查询,查询包含name为test(因为上面设置的test.setName("test"))属性的结果
    		// GenericPropertyMatchers中的静态方法为匹配条件
    		// 后面可以继续.withMatcher("属性名",匹配条件).withMatcher("属性名",匹配条件)......
    		.withMatcher("name",GenericPropertyMatchers.contains());
    	// Example中的泛型指定为条件的类型
    	Example<Test> example = Example.of(test,matcher);
    	// 分页查询
    	Pageable pageable = PageRequest.of(page,size);
    	// 根据条件进行查询,查询第一页的10条数据
        testRepository.findAll(example,pageable);
        System.out.println(list);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值