zoukankan      html  css  js  c++  java
  • Spring Boot + MongoDB 使用示例

    本文分别使用 MongoRepository 和 MongoTemplate 实现 MongoDB 的简单的增删改查

    本文使用 docker 安装 MongoDB

    使用示例

    application.yml:

    spring:
      data:
        mongodb:
          uri: mongodb://test:123456@192.168.30.101:27017/test
    

    entity:

    public class User {
        @Id
        private String id;
        private String name;
        private Integer gender;
    
        @DateTimeFormat(pattern = "yyyy-MM-dd")
        private LocalDate birthday;
    
        /*getter setter*/
    }
    

    service:

    public interface UserService {
    
        User save(User user);
    
        void deleteById(String id);
    
        void deleteAll();
    
        Iterable<User> findAll();
    
        Iterable<User> findAll(Integer pageNum, Integer pageSize);
    
        List<User> findAllByName(String name);
    
        Page<User> findAllByName(Integer pageNum, Integer pageSize, String name);
    }
    

    1.1 使用 MongoRepository

    1.1.1 新建 UserMongoRepository

    public interface UserMongoRepository extends MongoRepository<User, String> {
    
        List<User> findByName(String name);
    }
    

    1.1.2 新建 UserServiceMongoRepository

    @Profile("MongoRepository")
    @Service
    public class UserServiceMongoRepository implements UserService {
    
        @Autowired
        private UserMongoRepository userMongoRepository;
    
        @Override
        public User save(User user) {
            return userMongoRepository.save(user);
        }
    
        @Override
        public void deleteById(String id) {
            userMongoRepository.deleteById(id);
        }
    
        @Override
        public void deleteAll() {
            userMongoRepository.deleteAll();
        }
    
        @Override
        public Iterable<User> findAll() {
            return userMongoRepository.findAll();
        }
    
        @Override
        public Iterable<User> findAll(Integer pageNum, Integer pageSize) {
    
            Pageable pageable = PageRequest.of(pageNum, pageSize);
            return userMongoRepository.findAll(pageable);
        }
    
        @Override
        public List<User> findAllByName(String name) {
            return userMongoRepository.findByName(name);
        }
    
        @Override
        public Page<User> findAllByName(Integer pageNum, Integer pageSize, String name) {
    
            User user = new User();
            user.setName(name);
    
            ExampleMatcher matcher = ExampleMatcher.matching();
            Example<User> userExample = Example.of(user, matcher);
    
            Pageable pageable = PageRequest.of(pageNum, pageSize);
    
            return userMongoRepository.findAll(userExample, pageable);
        }
    }
    

    1.2 使用 MongoTemplate

    1.2.1 新建 UserServiceMongoTemplate

    @Profile("MongoTemplate")
    @Service
    public class UserServiceMongoTemplate implements UserService {
    
        @Autowired
        private MongoTemplate mongoTemplate;
    
        @Override
        public User save(User user) {
            return mongoTemplate.save(user);
        }
    
        @Override
        public void deleteById(String id) {
            Query query = new Query(Criteria.where("id").is(id));
            mongoTemplate.remove(query);
        }
    
        @Override
        public void deleteAll() {
            mongoTemplate.remove(User.class);
        }
    
        @Override
        public Iterable<User> findAll() {
            return mongoTemplate.findAll(User.class);
        }
    
        @Override
        public Iterable<User> findAll(Integer pageNum, Integer pageSize) {
            Query query = new Query();
            query.skip(pageNum * pageSize);
            query.limit(pageSize);
    
            return mongoTemplate.find(query, User.class);
        }
    
        @Override
        public List<User> findAllByName(String name) {
            Query query = new Query(Criteria.where("name").is(name));
            return mongoTemplate.find(query, User.class);
        }
    
        @Override
        public Page<User> findAllByName(Integer pageNum, Integer pageSize, String name) {
    
            Query query = new Query();
            query.skip(pageNum * pageSize);
            query.limit(pageSize);
    
            Criteria criteria = new Criteria();
            criteria.and("name").equals(name);
    
            query.addCriteria(criteria);
    
            List<User> userList = mongoTemplate.find(query, User.class);
    
            long total = mongoTemplate.count(query, User.class);
    
            Pageable pageable = PageRequest.of(pageNum, pageSize);
    
            Page<User> userPage = new PageImpl(userList, pageable, total);
            return userPage;
        }
    }
    

    完整代码:GitHub

    存在问题

    MongoRepository 中 deleteById 和 MongoTemplate 中 deleteById, deleteAll 未生效,暂不知原因

  • 相关阅读:
    JavaScript中创建对象的几种模式
    Vue学习5:条件渲染
    Vue学习4:class与style绑定
    Vue学习3:计算属性computed与监听器
    Vue学习2:模板语法
    普通递归与优化递归
    new操作符具体干了什么呢?
    各种形式存放token
    用es6的Array.reduce()方法计算一个字符串中每个字符出现的次数
    ES6 对象的解构赋值
  • 原文地址:https://www.cnblogs.com/victorbu/p/11266806.html
Copyright © 2011-2022 走看看