IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MongoDB安装及 Java 相关操作 -> 正文阅读

[大数据]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");
    }
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-09 12:46:25  更:2022-05-09 12:50:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:18:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码