MongoDB使用详解_3_整合SpringBoot

1.整合SpringBoot

1.1导入依赖

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

1.2配置文件

spring:
  data:
    mongodb:
      uri:  mongodb://用户名:密码@ip(域名):27017/db_name?authSource=admin

1.3集合相关操作

@SpringBootTest
class MongoStudyApplicationTests {
    
    
	
    //SpringBoot为我们提供了一个MongoTemplate,直接注入即可
    @Autowired
    private MongoTemplate mongoTemplate;
	
    @Test
    void Col() {
    
    
        //创建一个集合,注意不能存在相同的集合,否则抛出异常
        mongoTemplate.createCollection("col_1");
        
        //判断一个集合是否已经存在
        boolean exists = mongoTemplate.collectionExists("col_1");
        
        //删除一个集合
        mongoTemplate.dropCollection("col_1");
    }
}

1.4文档操作

1.4.1相关注解

@Document

  • 修饰范围:用在类上
  • 作用:用来映射这个类的对象为mongo中的一条文档数据
  • 属性: (value, collection) 用来指定操作的集合名称

@Id

  • 修饰范围: 用在成员变量、方法上
  • 作用:用来映射这个类的一个对象为文档的_id的值

@Field

  • 修饰范围:用在成员变量、方法上
  • 作用:用来将成员变量的值映射为文档的id值
  • 属性:(name,value) 用来指定在文档中key的名称,默认为变量名

@Transient

  • 修饰范围:用在成员变量、方法上
  • 作用:用来指定修改成员变量,不参与文档的序列化

1.4.2测试数据

@Document("users")
public class User {
    
    

    @Id
    private Integer id;

    @Field("username")
    private String name;

    @Field("salary")
    private Double salary;

    @Field("birthday")
    private Date birthday;

    @Override
    public String toString() {
    
    
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", salary=" + salary +
                ", birthday=" + birthday +
                '}';
    }

    public User() {
    
    
    }

    public User(Integer id, String name, Double salary, Date birthday) {
    
    
        this.id = id;
        this.name = name;
        this.salary = salary;
        this.birthday = birthday;
    }
}

1.4.3插入

单条插入

    @Test
    void createDocu() {
    
    

        User user = new User(1, "张三", 2323.3d, new Date());

        /**
        *  insert()方法在_id存在时会报异常
        *
        * */
        mongoTemplate.insert(user);

        /**
         * save()方法在_id存在时会更新数据,不会报错
         */
        mongoTemplate.save(user);
    }

批量插入

    @Test
    void createDocu() {
    
    

        List<User> users = new ArrayList<>(Arrays.asList(new User(5, "张其", 232.3d, new Date()), new User(6, "王双", 2323.3d, new Date())));

        /**
        * insert()重载方法,传入一个集合,第二个参数是对象的Class
        * 使用这个方法,User类上必须加@Document注解
        * */
        mongoTemplate.insert(users, User.class);

        /**
        * insert()重载方法,传入一个集合,第二个参数是集合的名字,
        * 注意:集合名字一定要写对,写错会创建一个新的集合进行插入数据,不会报错
        * */
        mongoTemplate.insert(users, "users");
    }

1.4.4查询

@SpringBootTest
class MongoStudyApplicationTests {
    
    

    @Autowired
    private MongoTemplate mongoTemplate;

    @Test
    void createDocu() {
    
    

        /**
         * 查询所有
         * */
        List<User> users1 = mongoTemplate.findAll(User.class);
        //参数二:集合名称
        List<User> users2 = mongoTemplate.findAll(User.class, "users");
        List<User> users3 = mongoTemplate.find(new Query(), User.class);

        /**
         *  根据_id查询
         * */
        User user = mongoTemplate.findById(1, User.class);


        /**
         *  > 等值查询
         *  > 通过使用Criteria构造条件,包装成一个Query()对象
         *  > 注意:这里的字段,可以写数据库中的,也可以写类中的
         *  > 查询 username = 张三
         * */
        Query conditionUsername = Query.query(Criteria.where("username").is("张三"));
        List<User> users = mongoTemplate.find(conditionUsername, User.class);


        /**
         *  > < >= <= 查询
         *  查询 salary >= 2333
         * */
        Query conditionSalary = Query.query(Criteria.where("salary").gte(2333d));
        List<User> users4 = mongoTemplate.find(conditionSalary, User.class);


        /**
         * > and查询
         * > 查询 username = 张三 and salary = 2333
         * */
        Query query = Query.query(Criteria.where("username").is("张三").and("salary").is(2333d));
        List<User> users5 = mongoTemplate.find(query, User.class);


        /**
         *  > or查询
         *  > 查询username = 张三 or username = 李四
         * */
        Criteria criteria = new Criteria();
        //参数是一个不定参数
        criteria.orOperator(
                Criteria.where("username").is("张三"),
                Criteria.where("username").is("王双")
        );
        List<User> users6 = mongoTemplate.find(Query.query(criteria), User.class);
        
        
       /**
        *  排序 sort
        * */
        Query sortQuery = new Query();
        sortQuery.with(Sort.by(Sort.Order.asc("salary"))); //asc升序 desc降序
        List<User> users7 = mongoTemplate.find(sortQuery, User.class);

      /**
        *  > 分页
        *  skip(n) 跳过前n条数据
        *  limit(k) 显示k条数据
        * */
        Query pageQuery = new Query();
        pageQuery.skip(2).limit(3);
        List<User> users8 = mongoTemplate.find(pageQuery, User.class);
		
        
       /* 
        * 显示符合条件的记录数,传入一个Query()对象
        * */
        long count = mongoTemplate.count(new Query(), User.class);
        
        /**
         * 去重
         * 参数一:查询条件
         * 参数四:返回的结果类型
         * */
        List<String> username = mongoTemplate.findDistinct(new Query(), "username", User.class, String.class);
        
    }
}

使用原生JSON字符串进行查询

@SpringBootTest
class MongoStudyApplicationTests {
    
    

    @Autowired
    private MongoTemplate mongoTemplate;

    @Test
    void createDocu() {
    
    

        /*
        * 原生JSON字符串进行查询
        * */
        BasicQuery basicQuery = new BasicQuery("{name:'张三', salary:2300}");
        mongoTemplate.find(basicQuery, User.class);

    }
}

1.4.5更新

    @Test
    void update() {
    
    
        Update update = new Update();

        //更新数据
        update.set("username", "赵四");

        //当调用upsert时没有数据匹配进行插入时,默认设置的数据
        update.setOnInsert("_id", 232);

        //更新符合条件的第一条数据
        mongoTemplate.updateFirst(Query.query(Criteria.where("username").is("张三")), update, User.class);

        //更新符合条件的所有数据
mongoTemplate.updateMulti(Query.query(Criteria.where("username").is("张三")), update, User.class);

        //没有符合条件的数据时进行插入
        UpdateResult updateResult = mongoTemplate.upsert(Query.query(Criteria.where("username").is("张三")), update, User.class);

        //获取修改的行数
        long modifiedCount = updateResult.getModifiedCount();

        //获取匹配记录数
        long matchedCount = updateResult.getMatchedCount();

        //获取插入数据的_id值
        BsonValue upsertedId = updateResult.getUpsertedId();

    }
}

1.4.6删除

    @Test
    void delete() {
    
    
        //条件删除
        mongoTemplate.remove(Query.query(Criteria.where("username").is("张三")), User.class);
    }

猜你喜欢

转载自blog.csdn.net/qq_46312987/article/details/125159757
今日推荐