Springboot整合MongoDB系列(四)---MongoRepository

继续MongoDB系列博客的第四篇,上一篇记录了使用MongoTemplate进行增删改查的操作,这一片我们使用MongoRepository来实现增删改查操作,各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!

我们使用Jpa的时候通过继承JpaRepository,使用mybatis-plus的时候通过继承BaseMapper或得通用的curd能力,方便我们的操作,同样springboot集成mongo的时候data包中为我们提供了MongoRepository接口,通过继承此接口,也可以直接使用接口提供的curd方法,MongoRepository相比于MongoTemplate 在一些常用简单查询上还是更方便的。

目录

测试环境准备

insert 操作

save 操作

delete 操作

update 操作

select 操作

自定义查询方法


测试环境准备

新增UserRepository类继承MongoRepository接口:

public interface UserRepository extends MongoRepository<User,String> {}

我们在测试类中可以直接注入UserRepository

@Autowired
private UserRepository userRepository;

准备下测试数据:

public User getUser(){
        return User.builder().username("zhaoliu").age(10).sex("男").address(
                "rizhao").build();
    }
    public List<User> getUserList(){
        User user2 =
                User.builder().username("zhangsan").age(20).sex("男").address("jinan").build();
        User user3 =
                User.builder().username("lisi").age(30).sex("女").address("jinan").build();
        List<User> userList = new ArrayList<>();
        userList.add(user2);
        userList.add(user3);
        return userList;
    }

    public void clearDb(){
        userRepository.deleteAll();
    }

    @Test
    public void addTestDatas(){
        User user = getUser();
        userRepository.insert(user);
        List<User> userList = getUserList();
        userRepository.insert(userList);
    }

insert 操作

    @Test
    public void insert(){
        clearDb();
        User user = getUser();
        userRepository.insert(user);
        List<User> userList = getUserList();
        userRepository.insert(userList);
    }

save 操作

    @Test
    public void save(){
        clearDb();
        userRepository.save(getUser());
        userRepository.saveAll(getUserList());
    }

delete 操作

    @Test
    public void delete(){
        userRepository.deleteById("60ee9cded82d3d76d2ed2205");
        User user = User.builder().id("60ee9cd8d82d3d76d2ed2204").age(300).build();
        // 本质还是按照id删除  必须有id 其它参数无所谓
        userRepository.delete(user);
        User user1 = User.builder().id("60ee4af0771c712494b9ac4d").age(300).build();
        List<User> userList = Arrays.asList(user1);
        // 删除所有给定实体
        userRepository.deleteAll(userList);
        // 删除collection中所有数据
        userRepository.deleteAll();
    }

update 操作

    /**
     * 没有update相关api
     * 修改通过save来实现  save有则修改 没有则新增
     */
    @Test
    public void update(){
        User user = User.builder().id("60ee4af0771c712494b9ac4d").age(30).build();
        userRepository.save(user);
    }

select 操作

    /**
     * MongoRepository常用api
     * MongoRepository相比于MongoTemplate 在一些常用简单查询上还是更方便的
     */
    @Test
    public void select(){
        Optional<User> user = userRepository.findById("60ee4af0771c712494b9ac4d");
        System.out.println(user);
        List<User> userList = userRepository.findAll();
        System.out.println(userList);
        Sort sort = Sort.by(Sort.Direction.DESC,"age");
        List<User> userList1 = userRepository.findAll(sort);
        System.out.println(userList1);
        User user1 = User.builder().id("60ee4af0771c712494b9ac4d").build();
        Example<User> example = Example.of(user1);
        List<User> userList2 = userRepository.findAll(example);
        System.out.println(userList2);
        User user2 = User.builder().username("lisi").build();
        ExampleMatcher matching =
                ExampleMatcher.matching()
                        .withMatcher("username", ExampleMatcher.GenericPropertyMatchers.contains());
        Example<User> example1 = Example.of(user2,matching);
        List<User> userList3 = userRepository.findAll(example1);
        System.out.println(userList3);
        List<User> userList4 = userRepository.findAll(example1, sort);
        System.out.println(userList4);
        Pageable pageable = PageRequest.of(0,2);
        Page<User> userPage = userRepository.findAll(pageable);
        System.out.println("---getTotalElements---" + userPage.getTotalElements());// 总记录数
        System.out.println("---getTotalPages---" + userPage.getTotalPages());// 总页数
        System.out.println("---getNumber---" + userPage.getNumber());// 当前页
        System.out.println("---getSize---" + userPage.getSize());// 每页大小
        System.out.println("---getContent---" + userPage.getContent()); // 数据
        System.out.println("---getNumberOfElements---" + userPage.getNumberOfElements());// 当前页的元素数
    }

自定义查询方法

public interface UserRepository extends MongoRepository<User,String> {
    List<User> findByUsernameLike(String username);
    Page<User> findByUsernameLike(String username, Pageable pageable);
    @Query(value = "{_id:?0}")
    User findByUserId(String id);
    @Query(value = "{'$and':[{username:?0},{age:{'$gt':?1}}]}")
    User findByNameAndAge(String username,Integer age);
}
    /**
     * 自定义查询
     * 1.格式:findBy + 属性名 + 规则
     * 2.还可以使用@Query注解
     */
    @Test
    public void select1(){
        List<User> userList = userRepository.findByUsernameLike("lisi");
        System.out.println(userList);
        Pageable pageable = PageRequest.of(0,2);
        Page<User> userPage = userRepository.findByUsernameLike("lisi", pageable);
        System.out.println("---getTotalElements---" + userPage.getTotalElements());// 总记录数
        System.out.println("---getTotalPages---" + userPage.getTotalPages());// 总页数
        System.out.println("---getNumber---" + userPage.getNumber());// 当前页
        System.out.println("---getSize---" + userPage.getSize());// 每页大小
        System.out.println("---getContent---" + userPage.getContent()); // 数据
        System.out.println("---getNumberOfElements---" + userPage.getNumberOfElements());// 当前页的元素数
        User user = userRepository.findByUserId("60ee4af0771c712494b9ac4e");
        System.out.println(user);
        User user1 = userRepository.findByNameAndAge("lisi", 25);
        System.out.println(user1);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值