mongotemplate基本案例

532 阅读1分钟

SQL编写依据来源官方文档

实体类

    @Document("test_user")
    public class User implements Serializable {
        @Id
        private String id;
        @Field("name")
        private String name;
        @Field("age")
        private Integer age;
        @Field("birthday")
        private String birthday;

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Integer getAge() {
            return age;
        }

        public void setAge(Integer age) {
            this.age = age;
        }

        public String getBirthday() {
            return birthday;
        }

        public void setBirthday(String birthday) {
            this.birthday = birthday;
        }
    }

插入数据

    /**
     * //插入数据
     * db.test_user.insert({"_id":2,"name":"神里","age":21,"birthday":"2000-07-07"})
     * @param user
     */
    public void insert(User user){
        template.insert(user,"test_user");
    }

更新数据

    /**
     * //修改一条数据
     * db.test_user.updateOne({"_id":"2"}, {$set:{"name":"神里"}})
     * @param user
     */
    public void update(User user){
        Query query = new Query();
        //查询条件 相当于 mysql where
        query.addCriteria(Criteria.where("_id").is(user.getId()));
        //更新key-value值
        Update update = new Update();
        update.set("name",user.getName());
        //更新一条记录
        mongoTemplate.updateFirst(query,update,User.class,"test_user");
    }

删除数据

    /**
     * //删除一天数据
     * db.test_user.remove({"_id":"3"});
     * @param user
     */
    public void delete(User user){
        Query query = new Query();
        query.addCriteria(Criteria.where("_id").is(user.getId()));
        mongoTemplate.remove(query,"test_user");
    }

查询数据

    /**
     * //查询数据
     * db.test_user.find({"_id":"1"})
     * @param user
     * @return
     */
    public List<User> select(User user){
        Query query = new Query();
        query.addCriteria(Criteria.where("_id").is(user.getId()));
        return mongoTemplate.find(query, User.class, "test_user");
    }

查询条件

    Query query = new Query();
    query.addCriteria(Criteria.where("_id").is(user.getId()));
    
    //db.test_user.find({},{"name":1})
    //查询出部分字段包含
    query.fields().include("name");
    //查询部分字段不包含
    query.fields().exclude("name");
    
    // 多条件查询
    Criteria criteria = new Criteria();
    // or条件 name="影" or age=21  
    //db.test_user.find({$or:[{"name":"影"},{"age":21}]})
    criteria.orOperator(Criteria.where("name").is("影"),Criteria.where("age").is(21));
    // and条件 name="影" and age=21 
    // db.test_user.find({$and:[{"name":"影"},{"age":21}]})
    criteria.andOperator(Criteria.where("name").is("影"),Criteria.where("age").is(21));
    query.addCriteria(criteria);
    
    // db.test_user.find().limit(1).skip(0).sort({"_id":1}) 1升序/-1降序 limit:分页数据大学,skip:当前分页页码
    //排序    spring boot最新该类构造器私有不能直接new
    Sort sort = Sort.by(Sort.Direction.DESC, "_id");
    //分页查询 不过分页类需要自己封装  spring boot最新该类构造器私有不能直接new
    Pageable pageable = PageRequest.of(0,3,sort);
    query.with(pageable);
    
    //字符串日期范围查询 查询或比较 gte/lte 大于/小于
    // db.test_user.find({"birthday":{$gte:"2000-01-01",$lte:"2022-09-09"}})
    query.addCriteria(Criteria.where("birthday").gte("2000-01-01").lte("2022-09-09"));
    //like之类后续自己看api   

分页查询条件

    //SQL 查询出_id,fullName,carNo,healthDate 按某一字段降序
    db.project.find({},{"_id":1,"healthNo":1,"fullName":1,"cardNo":1,"healthDate":1}).sort({"healthDate":-1}).limit(10) 
    /**
     * 获取体检报告列表
     * @param current
     * @param pageSize
     * @return
     */
    public MongoPageResult getlist(Integer current,Integer pageSize,Long tenantId){
        Sort sort = new Sort(Sort.Direction.DESC,"healthDate");
        Query query = new Query();
        query.fields().include("_id"); //包含该字段
        query.fields().include("healthNo"); //包含该字段
        query.fields().include("fullName"); //包含该字段
        query.fields().include("cardNo"); //包含该字段
        query.fields().include("healthDate"); //包含该字段
        query.with(sort);
        query.addCriteria(Criteria.where("tenantId").is(tenantId));
        //分页条件
        Pageable pageable = new PageRequest(current,pageSize);
        query.with(pageable);
        // 查询记录总数
        long totalCount = template.count(query, "project");
        List<Project> project = template.find(query, Project.class, "project");
        // 计算总页数
        long totalPage = totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1;
        return new MongoPageResult(totalCount,current,pageSize,totalPage,project);
    }