springBoot整合MongoDB(动态查询)

Easter79
• 阅读 1019

依赖:

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-mongodb -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

配置

application.properties:

#spring.data.mongodb.uri=mongodb://localhost:27017/sea
spring.data.mongodb.uri=mongodb://用户名:密码@localhost:27017/sea或者:

#spring.data.mongodb.uri=mongodb://userName:password@ip:port/database
spring.data.mongodb.database=ELSA_MILESTONE_SUBSCRIPTION_SERVICE
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
#spring.data.mongodb.username=mongodb
#spring.data.mongodb.password=root

方式:1: 使用 

@Autowired
private MongoTemplate mongoTemplate;

eg:

springBoot整合MongoDB(动态查询) springBoot整合MongoDB(动态查询)

package com.icil.dao;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository;

import com.icil.domain.UserEntity;
@Repository
public class UserDAO {
    
    
    
      @Autowired
        private MongoTemplate mongoTemplate;

        /**
         * 创建对象
         * @param user
         */
        public void saveUser(UserEntity user) {
            mongoTemplate.save(user);
        }

        /**
         * 根据用户名查询对象
         * @param userName
         * @return
         */
        public UserEntity findUserByUserName(String userName) {
            Query query=new Query(Criteria.where("userName").is(userName));
            UserEntity user =  mongoTemplate.findOne(query , UserEntity.class);
            return user;
        }

        /**
         * 更新对象
         * @param user
         */
        public void updateUser(UserEntity user) {
            Query query=new Query(Criteria.where("id").is(user.getId()));
            Update update= new Update().set("userName", user.getUserName()).set("passWord", user.getPassWord());
            //更新查询返回结果集的第一条
            mongoTemplate.updateFirst(query,update,UserEntity.class);
            //更新查询返回结果集的所有
            // mongoTemplate.updateMulti(query,update,UserEntity.class);
        }

        /**
         * 删除对象
         * @param id
         */
        public void deleteUserById(Long id) {
            Query query=new Query(Criteria.where("id").is(id));
            mongoTemplate.remove(query,UserEntity.class);
        }

}

View Code

高频使用: 多条件 动态 (类似mybtis)

     @Autowired
    private  MongoTemplate mongoTemplate;
     @Test
    public void testNameQuery() throws Exception {
         //collectionName  -->
         Criteria criteria1 = Criteria.where("collName").is("lzd_work_table_collection");
         Criteria criteria2 = Criteria.where("status").is("RCS");
         
         Query query = new Query();
         query.addCriteria(criteria1);
         query.addCriteria(criteria2);
         System.err.println(query);
//         Query query=new Query(Criteria.where("status").is("RSC"));
//         public <T> List<T> find(Query query, Class<T> entityClass, String collectionName) {
         List<MilestoneInfo> find = mongoTemplate.find(query,MilestoneInfo.class);
         System.err.println("#######################");
         System.err.println(find);
    }

**方式2:extends MongoRepository
**

eg:

UserRepository.java

springBoot整合MongoDB(动态查询) springBoot整合MongoDB(动态查询)

package com.sea.test.repository;

import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;

import com.sea.test.pojo.User;


public interface UserRepository extends MongoRepository<User, Long> {

    /**
     * Like(模糊查询)
     * {"username" : name} ( name as regex)
     * */
    List<User> findByUsernameLike(String username);
    
    
    List<User> findByUsernameLike(String username,PageRequest pageable);

    /**
     * Like(模糊查询)
     * {"username" : name}
     * */
    List<User> findByUsername(String username);

    /**
     * GreaterThan(大于)
     * {"age" : {"$gt" : age}}
     * */
    List<User> findByAgeGreaterThan(int age);
    /**
     * LessThan(小于)
     * {"age" : {"$lt" : age}}
     * */
    List<User> findByAgeLessThan(int age);
    /**
     * Between(在...之间)
     * {{"age" : {"$gt" : from, "$lt" : to}}
     * */
    List<User> findByAgeBetween(int from, int to);

    /**
     * IsNotNull, NotNull(是否非空)
     *  {"username" : {"$ne" : null}}
     * */
    List<User> findByUsernameNotNull();

    /**
     * IsNull, Null(是否为空)
     *   {"username" : null}
     * */
    List<User> findByUsernameNull();


    /**
     * Not(不包含)
     *    {"username" : {"$ne" : name}}
     * */
    List<User> findByUsernameNot(String name);



    /**
     *  Near(查询地理位置相近的)
     *  {"location" : {"$near" : [x,y]}}
     * */
     // findByLocationNear(Point point)


    /**
     * Within(在地理位置范围内的)
     *   {"location" : {"$within" : {"$center" : [ [x, y], distance]}}}
     * */
    //findByLocationWithin(Circle circle)


    /**
     *   Within(在地理位置范围内的)
     *     {"location" : {"$within" : {"$box" : [ [x1, y1], x2, y2]}}}
     * */
   // findByLocationWithin(Box box)

    /**
     * 
     * @param name
     * @param age
     * @param page
     * @return
     */
    @Query("{\"username\":{\"$regex\":?0}, \"age\": ?1}")
    Page<User> findByNameAndAgeRange(String name,int age,Pageable page);

    /**
     * 
     * @param name
     * @param ageFrom
     * @param ageTo
     * @param page
     * @return
     */
    @Query(value="{\"username\":{\"$regex\":?0},\"age\":{\"$gte\":?1,\"$lte\": ?2}}")
    Page<User> findByNameAndAgeRange2(String name,int ageFrom,int ageTo,Pageable page);

    @Query(value="{\"username\":{\"$regex\":?0},\"age\":{\"$gte\":?1,\"$lte\": ?2}}",fields="{\"username\" : 1, \"age\" : 1}")
    Page<User> findByNameAndAgeRange3(String name,int ageFrom,int ageTo,Pageable page);

}

View Code

User:

springBoot整合MongoDB(动态查询) springBoot整合MongoDB(动态查询)

package com.sea.test.pojo;

import java.io.Serializable;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.stereotype.Component;

import com.sea.test.annotation.AutoIncKey;
import com.sea.test.annotation.aop.SeaAnnotion;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
@Component
@Document(collection = "My_user") //指定别名
public class User implements Serializable {

    private static final long serialVersionUID = -1L;

    @Id  //指定id
    @AutoIncKey //自定义注解
    private Long id;
    
    @Field("userName") //指定匹配关系
    private String username;
    
    
    private Integer age;


    
    
    
    @SeaAnnotion()
    public Long getId() {
        return id;
    }


    @SeaAnnotion()
    public void setId(Long id) {
        this.id = id;
    }



    public String getUsername() {
        return username;
    }



    public void setUsername(String username) {
        this.username = username;
    }



    public Integer getAge() {
        return age;
    }



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



    public User() {
        super();
    }



    public User(Long id, String username) {
        super();
        this.id = id;
        this.username = username;
    }



    public User(Long id, String username, Integer age) {
        super();
        this.id = id;
        this.username = username;
        this.age = age;
    }






    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + ", age=" + age + "]";
    }
    

    
 
}

View Code

controller : 参考https://blog.csdn.net/weixin\_39214304/article/details/84791953

springBoot整合MongoDB(动态查询) springBoot整合MongoDB(动态查询)

package com.sea.test.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.ExampleMatcher;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.domain.Sort.Order;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

import com.sea.test.pojo.User;
import com.sea.test.repository.UserRepository;

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserRepository userRepository;

    @ResponseStatus(HttpStatus.CREATED)
    @PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
    public User createUser(@RequestBody User user) {
        return userRepository.save(user);
    }

    /**
     * 根据id查询
     * 
     * @param id
     * @return
     */
    @GetMapping(value = "/{id}")
    public User readUserById(@PathVariable("id") Long id) {
        return userRepository.findById(id).get();
    }

    @GetMapping(value = "/all")
    public List<User> getAll() {
        System.err.println("### enter into getall emthod ###");
        return userRepository.findAll();
    }

    /**
     * 根据一个或者多个属性查询单个结果
     * 
     * @param name
     * @return
     */
    @GetMapping(value = "/name/{name}")
    public User readUserByName(@PathVariable("name") String name) {
        User user = new User();
        user.setUsername(name);
        ExampleMatcher matcher = ExampleMatcher.matching().withIgnorePaths("age", "createTime");
        Example<User> example = Example.of(user, matcher);
        return userRepository.findOne(example).get();
    }

    /**
     * 根据一个或者多个属性分页查询
     * 
     * @param pageNumber
     * @param pageSize
     * @return
     */
    @GetMapping(value = "/page/{pageNumber}/pagesize/{pageSize}/name/{name}")
    public Page<User> readUsersByPage(@PathVariable("pageNumber") int pageNumber,
            @PathVariable("pageSize") int pageSize, @PathVariable("name") String name) {
        User user = new User();
        user.setUsername(name);
        ExampleMatcher matcher = ExampleMatcher.matching().withIgnorePaths("age", "createTime");
        Example<User> example = Example.of(user, matcher);
        if (pageNumber < 1) {
            pageNumber = 1;
        } else if (pageSize == 0) {
            pageSize = 20;
        }
        PageRequest pageable =  PageRequest.of(pageNumber - 1, pageSize);
        return userRepository.findAll(example, pageable);
    }

    /**
     * 根据用户年龄升序排序
     * 
     * @return
     */
    @GetMapping("/get")
    public List<User> readUsers() {
        System.err.println("### enter into readUser emthod ###");
        Order order = new Order(Direction.ASC, "age");
        Sort sort = Sort.by(order);
        return userRepository.findAll(sort);
    }

    /**
     * 模糊查询带分页
     * 
     * @param pageNumber
     * @param pageSize
     * @param keyWords
     * @return
     */
    @GetMapping(value = "/page/{pageNumber}/pagesize/{pageSize}/keyword/{keyWords}")
    public Page<User> readUsersByKeywords(@PathVariable("pageNumber") int pageNumber,
            @PathVariable("pageSize") int pageSize, @PathVariable("keyWords") String keyWords) {
        if (keyWords == null) {
            keyWords = "";
        }
        if (pageNumber < 1) {
            pageNumber = 1;
        } else if (pageSize == 0) {
            pageSize = 20;
        }
        PageRequest pageable = PageRequest.of(pageNumber - 1, pageSize);
        return (Page<User>) userRepository.findByUsernameLike(keyWords, pageable);
    }

    @ResponseStatus(HttpStatus.OK)
    @DeleteMapping(value = "/{id}")
    public void removeUser(@PathVariable("id") Long id) {
        userRepository.deleteById(id);
    }
}

View Code

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
6个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
6
获赞
1.2k