MongoDB安装及 Java 相关操作

1 MongoDB

MongoDB是一个基于分布式文件存储的 非关系型 数据库

1.1 应用场景

适用于:

  1. 高并发的读写操作
  2. 缓存处理
  3. 大数据量的存储

不适合于:

  1. 高度事务性的系统,如银行或会计系统,传统的BI商业智能应用,因为不支持多表的连接查询

1.2 Linux安装mongodb

docker安装

#拉取镜像 
docker pull mongo:latest

#创建和启动容器 

docker run -d --restart=always -p 27017:27017 --name mymongo -v /data/db:/data/db-d mongo

** **
#进入容器 

docker exec -it mymongo /bin/bash 

#使用MongoDB客户端进行操作 

mongo

> show dbs#查询所有的数据库 

常用操作

> db.User.save({name:'zhangsan',age:21,sex:true})
## 
> db.User.find()

在这里插入图片描述

2 SpringBoot 集成 mongodb

spring-data-mongodb提供了MongoTemplateMongoRepository两种方式访问mongodb,
MongoRepository操作简单,MongoTemplate操作灵活,我们在项目中可以灵活适用这两种方式操作mongodb,
MongoRepository的缺点是不够灵活,MongoTemplate正好可以弥补不足。

2.1 java api 基于MongoTemplate 的 CRUD

在这里插入图片描述

准备

  1. 引入依赖
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-mongodb</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
    
            <dependency>
                <groupId>joda-time</groupId>
                <artifactId>joda-time</artifactId>
                <version>2.10.1</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
  2. 配置momgodb地址
    spring.data.mongodb.uri=mongodb://192.168.64.128:27017/test
    
  3. 创建对应实体类
    @Data
    @Document("User") //对集合或对象进行操作
    public class User {
        @Id                             //向mongodb导入数据时会生成下划线 _
        private String id;
        private String name;
        private Integer age;
        private String email;
        private String createDate;
    
    }
    

2.1.1 添加操作

    /*
    添加操作
    MongoTemplate
     */
    @Test
    public void addmongo(){
        User user = new User();
        user.setAge(20);
        user.setName("test");
        user.setEmail("123@qq.com");
        User user1 = mongoTemplate.insert(user);
        System.out.println(user1);
    }

2.1.2 查询所有记录

    //查询所有记录
    @Test
    public void finAll(){
        List<User> all = mongoTemplate.findAll(User.class);
        System.out.println(all);
    }

2.1.3 根据id查询

    //根据id查询
    @Test
    public void getById(){
        User user = mongoTemplate.findById("6275d057cb081c7207330030", User.class);
        System.out.println(user);
    }

2.1.4 条件查询

    //条件查询
    @Test
    public void findUserList(){
        Query query = new Query(Criteria.where("name").is("test")
                .and("age").is(20));
        List<User> userList = mongoTemplate.find(query, User.class);
        System.out.println(userList);
    }

2.1.5 模糊查询

    //模糊查询
    @Test
    public void findUserLikeName(){
        //name like test and age=20
        /*
        1.Query 构建条件
        2.Pattern 构建匹配规则
         */
        String name="est";
        String regex=String.format("%s%s%s", "^.*",name,".*$");

        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        //      .regex 正则的方法
        Query query = new Query(Criteria.where("name").regex(pattern));
        //
        List<User> users = mongoTemplate.find(query, User.class);
        System.out.println(users);
    }

2.1.6 分页查询

    //分页查询
    @Test
    public void findUserPage(){
        //name like test and age=20
        /*
        1.Query 构建条件
        2.Pattern 构建匹配规则
         */
        int pageNo=1;
        int pageSize=10;
        Query query = new Query();
        String name="est";
        String regex=String.format("%s%s%s", "^.*",name,".*$");

        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        //      .regex 正则的方法
        query.addCriteria(Criteria.where("name").regex(pattern));

        int totalCount = (int)mongoTemplate.count(query, User.class);

        //分页构建
        //查询记录数
        //分页  (当前页-1)*要显示的记录数
        List<User> userList = mongoTemplate.find(
                query.skip((pageNo - 1) * pageSize).limit(pageSize), User.class);

        HashMap<String, Object> pageMap = new HashMap<>();
        pageMap.put("list", userList);
        pageMap.put("totalCount", totalCount);
        System.out.println(pageMap);
    }

2.1.7 修改

    //修改
    @Test
    public void updateUser(){
        //根据 id 查询
        User user = mongoTemplate.findById("6275d6d245f4b158d96ad9a0", User.class);
        //设置修改值
        user.setName("test_1");
        user.setAge(25);
        user.setEmail("213122@qq.com");
        //调用方法实现修改
        Query query = new Query(Criteria.where("_id").is(user.getId()));
        Update update = new Update();
        update.set("name", user.getName());
        update.set("age", user.getAge());
        update.set("email", user.getEmail());
        
        UpdateResult result = mongoTemplate.upsert(query, update, User.class);
        long count = result.getModifiedCount();
        System.out.println(count);
    }

在这里插入图片描述
在这里插入图片描述

2.1.8 删除

    //删除
    @Test
    public void delete(){
        Query query = new Query(Criteria.where("_id").is("6275d6d245f4b158d96ad9a0"));
        DeleteResult result = mongoTemplate.remove(query, User.class);
        long count = result.getDeletedCount();
        System.out.println(count);
    }

2.2 java api 基于MongoRepository 的 CRUD

Spring Data提供了对mongodb数据访问的支持,我们只需要继承MongoRepository类,按照Spring Data规范就可以了

创建UserRepository 继承 MongoRepository

public interface UserRepository extends MongoRepository<User,String> {
    
}

在这里插入图片描述

注入

    @Autowired
    private UserRepository userRepository;

2.2.1 添加

    /*
    添加操作
     */
    @Test
    public void addmongo(){
        User user = new User();
        user.setAge(30);
        user.setName("mary");
        user.setEmail("12312@qq.com");
        User save = userRepository.save(user);
        System.out.println(save);
    }

2.2.2 查询所有记录

    //查询所有记录
    @Test
    public void finAll(){
        List<User> all = userRepository.findAll();
        System.out.println(all);
    }

在这里插入图片描述

2.2.3 根据 id 查询

    //根据id查询
    @Test
    public void getById(){
        // findById 根据id查询 ; .get() 得到返回结果
        User user = userRepository.findById("62761fd3c90384674e9edf07").get();
        System.out.println(user);
    }

在这里插入图片描述

2.2.4 条件查询

    //条件查询
    @Test
    public void findUserList(){
        //姓名 mary ,年龄30
        User user = new User();
        user.setAge(30);
        user.setName("mary");

        Example<User> userExample=Example.of(user);
        List<User> all = userRepository.findAll(userExample);
        System.out.println(all);
    }

2.2.5 模糊查询

    //模糊查询
    @Test
    public void findUserLikeName(){
        //设置模糊查询匹配规则
        ExampleMatcher matcher = ExampleMatcher.matching()
                .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //设置是模糊查询
                .withIgnoreCase(true);          //忽略大小写

        User user = new User();
        user.setAge(30);
        user.setName("m");

        //                                        需匹配规则
        Example<User> userExample=Example.of(user,matcher);
        List<User> all = userRepository.findAll(userExample);
        System.out.println(all);
    }

2.2.6 分页查询

    //分页查询
    @Test
    public void findUserPage(){
        //设置分页参数
        //注意: 0 代表第一页
        PageRequest pageable = PageRequest.of(0, 3);

        User user = new User();
        user.setName("mary");

        Example<User> userExample=Example.of(user);
        Page<User> page = userRepository.findAll(userExample, pageable);

        System.out.println(page);
    }

在这里插入图片描述
返回的是一个对象
在这里插入图片描述

2.2.7 修改

    //修改
    @Test
    public void updateUser(){
        User user = userRepository.findById("62761fd3c90384674e9edf07").get();
        user.setAge(70);
        user.setName("tony");
        user.setEmail("asq1212@163.com");
        User save = userRepository.save(user);
        System.out.println(save);
    }

在这里插入图片描述

2.2.8 删除

    //删除
    @Test
    public void delete(){
        userRepository.deleteById("6275d057cb081c7207330030");
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值