java代码操作MongoDB的基本操作

SpringBoot整合MongoDB

依赖坐标

   <!--这个起步依赖会帮我们自动注入一个MongodbTemplate对象-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

实体类

package cn.itcast.mongodb.pojo;


import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
//@Document("xxx")  指定该实体类中对应的表名称,如果不指定默认是类名
public class User {
    
    

    @Id //强制指定该字段为主键
    //如果主键类型是Integer类型,在插入数据时就必须指定id,如果不指定就会报错
    //如果主键类型是String类型,在插入时可以不指定,不指定在默认插入数据时会默认插入一个ObjectId(0-9,a-f)
    //如果主键类型是ObjectId类型,可以不指定,不指定默认也会给一个ObjectId的值
    private Integer id; //id属性,即使不加@Id,默认也是主键
    private String username;
    private String password;
    private Integer age;

}

测试

测试插入数据

package cn.itcast.mongodb;

import cn.itcast.mongodb.pojo.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.test.context.junit4.SpringRunner;

import javax.jws.soap.SOAPBinding;

@SpringBootTest(classes = MongoApplication.class)
@RunWith(SpringRunner.class)
public class TestMongodb {
    
    

    @Autowired
    private MongoTemplate template;

    //新增一条记录
    //如果在插入数据时,不指定表名,默认是类名
    @Test
    public void test01() {
    
    

        User zhs = User.builder().id(1).username("zhs").password("123").age(23).build();

        User insert = template.insert(zhs);

        System.out.println("insert = " + insert);

    }

批量插入数据

   @Test
    public void test01() {
    
    
     //批量插入
        User user1 = User.builder().id(2).username("zhs").password("000").age(23).build();
        User user2 = User.builder().id(3).username("lisi").password("111").age(24).build();
        User user3 = User.builder().id(4).username("ww").password("222").age(25).build();
        User user4 = User.builder().id(5).username("zz").password("333").age(32).build();
        User user5 = User.builder().id(6).username("mq").password("444").age(50).build();
        ArrayList userList = new ArrayList();

        userList.add(user1);
        userList.add(user2);
        userList.add(user3);
        userList.add(user4);
        userList.add(user5);

        template.insertAll(userList);

    }

测试删除数据

    //根据条件删除一条记录
    //根据id进行删除
    @Test
    public void test02() {
    
    

        //删除的时候要注意字段名称和字段类型  默认表中的id为_id
        Query query = Query.query(Criteria.where("_id").is(1));
        template.remove(query, User.class);  //根据后面的实体类的类名去找对应的表名,或者注解指定的表名
        //template.remove(query, "user");  //在数据库中查询指定表名的表

    }

修改数据

//根据条件进行修改
    @Test
    public void test03(){
    
    

        //只修改符合条件的第一个
        //UpdateResult updateResult = template.updateFirst(Query.query(Criteria.where("username").is("zhs")), Update.update("password", "0000"), "user");

        //System.out.println("updateResult = " + updateResult);

        //修改多个字段
        Query query = Query.query(Criteria.where("username").is("zhs"));

        //Update update = Update.update("password", "789");

        Update update = new Update();
        update.set("password", "4512");
        update.set("age", "100");

        UpdateResult user = template.updateFirst(query, update, "user");

        System.out.println("user = " + user);

    }

模糊查询

    //模糊查询
    @Test
    public void test07(){
    
    

        //名称中包含
        //正则表达式    %xx 等同于   regex("xx$")        xx%等同于  regex("^xx")    x等同于 regex("^x$")  相当于是  %xx% 相当于是  regex("/xx/")
        Query query = Query.query(Criteria.where("username").regex("zh"));

        List<User> users = template.find(query, User.class);

        for (User user : users) {
    
    
            System.out.println("user = " + user);
        }

    }

复合查询

//符合条件查询
    @Test
    public void test08() {
    
    

        //查询条件
        //姓名中包含li并且年龄大于30

        Query query = Query.query(Criteria.where("username").regex("li").and("age").gt(20));

        List<User> users = template.find(query, User.class);

        for (User user : users) {
    
    
            System.out.println("user = " + user);
        }


    }


    //符合条件查询
    @Test
    public void test09() {
    
    

        //查询条件
        //姓名中包含li或者年龄大于30
        
        Criteria criteria1 = Criteria.where("username").regex("li");
        Criteria criteria2 = Criteria.where("age").gt(20);
        
        Criteria criteria = new Criteria();

        criteria.orOperator(criteria1, criteria2);

        Query query = Query.query(criteria);

        List<User> users = template.find(query, User.class);

        for (User user : users) {
    
    
            System.out.println("user = " + user);
        }


    }

分页查询

 //分页查询
    @Test
    public void test10(){
    
    

        Query query = new Query();
        //表示是显示3条,跳过第一条
        //query.limit(3).skip(1); //弊端 需要手动计算  跳过记录数  =  (当前页码 - 1 )* 每页显示条数

        query.with(PageRequest.of(1, 3));  //默认是从第0页开始的,所以,page= 前端传递过来的page-1

        List<User> users = template.find(query, User.class);


        for (User user : users) {
    
    
            System.out.println("user = " + user);
        }


    }

排序查询

//排序查询

    @Test
    public void test11(){
    
    


        Query query = new Query();

        query.with(PageRequest.of(1, 3));//先对结果进行分页查询
        //ASC表示升序排列  或者DESC表示降序    properties表示要对哪个字段进行排序
        query.with(Sort.by(Sort.Direction.ASC, "age"));

        List<User> users = template.find(query, User.class);

        for (User user : users) {
    
    
            System.out.println("user = " + user);
        }
    }

统计

//统计
    @Test
    public void test12() {
    
    

        long count = template.count(new Query(), User.class);

        System.out.println("count = " + count);

    }

猜你喜欢

转载自blog.csdn.net/zhangzengxiu/article/details/113361773