MongoDB

MongoDB不像mysql 在使用前就得创建好列字段等 MongoDB可以随时添加字段,需求可以变

MongoDB适用于:数据量大,写入操作频繁(读写都很频繁),价值较低的数据,对事物要求不高

MongoDB是一个开源的,高性能的,无模式的文档型数据库,是NoSQL数据库中的一种,是最像关系型数据库(mysql)的非关系型数据库

MongoDB中记录的是一个文档,它是一个由字段和值对(field:value)组成的数据结构。MongoDB一个文档认为就是一个对象。字段的数据类型是字符型。它的值除了使用基本的一些类型外 还可以包括其它文档,普通数组和文档数组。

关系型数据库(RDBMS):MySQL, ORACLE , DB2 , SQL Server…
关系型数据库全都是表
非关系型数据库(NoSQL): MongoDB Redis…
键值对数据库
文档数据库MongoDB

1 ,安装MongoDB 装版本号第二位数字是偶数的版本 ,傻瓜式安装
2 , 配置path 环境变量 到bin目录下 和jdk差不多
3 , 配置好后 cmd打开命令行,执行命令 mongod 会显示一堆东西
4 , 在c盘根目录创建一个data文件夹,今入data文件夹后创建db文件夹
5 ,再次运行mongod 命令后 db文件夹会多出一些东西
6 , MongoDB 默认端口号是27017

注意 :cmd启动数据库的命令是mongod 启动之后 不要关它
数据库启动之后 想要对数据库进行操作 cmd打开新的命令行 输入命令 mongo 就是连接(登录)数据库
这样就可以在这个新打开的命令行窗口执行 MongoDB 的命令了。
MongoDB

MongoDB与MySQL不同 MongoDB分为数据库,集合,文档。每个文档都表示一个对象。数据库里放集合 集合里放文档。
MongoDB的数据库和集合不需要手动的创建
MongoDB
MongoDB的一些基本操作指令
MongoDB

MongoDB的CRUD基本指定
插入数据:首先use 库名; 然后db.集合名.insert(需要插入的数据)
查询集合的所有数据:首先use库名;然后db.集合名.find();
MongoDB

插入文档到集合
MongoDB
当我们插入数据时不指定_id 时会自动生成一个由机器码和时间戳生成的_id值 它生成的id值是唯一的 所以我们建议 一般就用它的自动生成_id值

MongoDB

insertOne()和insertMany() 是insert()的拆分版 可读性强。
insertOne()只能插入一个
insertMany() 必须插入多个(必须是数组)
MongoDB
find()括号内可以填条件{id:xxx,age:xxx}
MongoDB
修改文档 update(查询条件,新对象)
注意新对象如果不是要替换整个文档 那么要用$set来修改指定属性

MongoDB
删除文档,或删除集合
MongoDB

练习示例
MongoDB
MongoDB
MongoDB
MongoDB

MongoDB
MongoDB
for循环直接20000次操作数据库 性能差
用个数组接收 然后一次insert插入 就可以快差不多18倍(更多)

MongoDB

MongoDB
比较查询
MongoDB
MongoDB
MongoDB
MongoDB

MongoDB
MongoDB

MongoDB

MongoDB

MongoDB

分割

以下是黑马程序员视频摘取的记录

整合MongoDB整合idea项目

首先 看看它的pom文件
MongoDB
配置文件yml 注意主机地址 看看自己主机地址是多少 参考之前的项目
MongoDB
配置好后 运行springboot工程 试一下能不能连接到MongoDB数据库
MongoDB
编写实体类 字段和mysql一样 一一对应 但是注意 MongoDB是文档类型的数据 需要在实体类上添加注解@ Document(collection=“集合名”) 这个参数类似MyBatis-plus的@TableName(“表名”)

MongoDB

Mongodb 不需要提前制作好表 只需要提前建好数据库即可
但是提前建好表 列中会出现 _class 的多于列 不过我们只需要加入Mongodb的配置 就可以插入数据时取消这个多余的列

package com.ms.qygqt.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.convert.MongoConverter;

@Configuration
public class MongoConfig implements ApplicationListener<ContextRefreshedEvent> {
	 
	
		@Autowired
		MongoTemplate mongoTemplate;
	 
	 
	 /**
	  * 插入的时候去掉多余的 _class 字段
	  */
	    @Override
	    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
	        MongoConverter converter = mongoTemplate.getConverter();
	        if (converter.getTypeMapper().isTypeKey("_class")) {
	            ((MappingMongoConverter) converter).setTypeMapper(new DefaultMongoTypeMapper(null));
	        }
	    }


}

实体类 表中不存在

package com.ms.qygqt.dao;

import java.io.Serializable;

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

import lombok.Data;

@Document(collection="pouds")
@Data
public class Pouds implements Serializable{
	
	@Id
	private String id;
	private String name;
	private String sex;

}

接口

package com.ms.qygqt.dao;

import org.springframework.data.mongodb.repository.MongoRepository;

public interface PoudsDao extends MongoRepository<Pouds, String>{

}

service层

package com.ms.qygqt.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.ms.qygqt.dao.Pouds;
import com.ms.qygqt.dao.PoudsDao;

import lombok.val;

@Service
public class PoudsServiceImp {

	@Autowired
	private PoudsDao dao;
	
	public void addpo(Pouds po) {
		
		dao.insert(po);
		
	}
	
	
}

controller层

package com.ms.qygqt.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import com.ms.qygqt.dao.Pouds;
import com.ms.qygqt.service.impl.PoudsServiceImp;

@RestController
public class PoudsController {

	@Autowired
	private PoudsServiceImp imp;
	
	
	@PostMapping
	public String addpo(Pouds po) {
		
		imp.addpo(po);
		return "成功";
	}
	
}

启动类

package com.ms.qygqt;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
public class MsQygqtServerApplication {

	public static void main(String[] args) {
		SpringApplication.run(MsQygqtServerApplication.class, args);
	}

}

mongodb的按条件查询 带分页

	/**
	 * 查询后台账号角色  带分页pageNum从第0开始
	 * @param pageNum
	 * @param pageSize
	 * @return
	 */
    public  Map<String, Object> pageAdminUserRole(Integer pageNum, Integer pageSize) {
    				//    	if (pageNum==0) {pageNum=pageNum+1;}
    	PageRequest page = PageRequest.of(	pageNum,
    										pageSize
    										,Sort.by(Direction.DESC, "rid"));
    	Page<AdminUserRole> findAll = adminUserRoleDao.findAll(page);
    	
    	List<PageAdminUserPermissionLevelDTO> listdto=new ArrayList<>();
    	List<AdminUserRole> content = findAll.getContent();
    	for (AdminUserRole role : findAll) {
    		PageAdminUserPermissionLevelDTO dto=new PageAdminUserPermissionLevelDTO();
    		dto.setName(role.getName());
    		dto.setPmList(this.parsePmList(role.getPm()));
    		dto.setRid(role.getRid());
    		listdto.add(dto);
		}
    	 Map<String, Object> map=new HashMap<>();
         map.put("total", listdto.size());
         map.put("rows", listdto);
         return map;
    }

    /**
     * 分页查询用户登录日志
     * @param uuid
     * @param pageNum
     * @param pageSize
     * @return map 封装了size 和rows
     */
    public Map<String, Object> getPageLogInfo(String uuid, Integer pageNum, Integer pageSize) {

        PageRequest page = PageRequest.of(pageNum,pageSize);
        System.out.println(uuid);
        Query query=new Query();
        query.with(page);
        query.addCriteria(Criteria.where("uuid").is(uuid));
        
        List<AdminUserLog> resultList = mongoTemplate.find(query, AdminUserLog.class);
        List<AdminUserLogInfoDTO> listdto=new ArrayList<>();
        for (AdminUserLog adminUserLog : resultList) {
        	AdminUserLogInfoDTO dto=new AdminUserLogInfoDTO();
        	dto.setCreateTime(adminUserLog.getCreateTime());
        	dto.setIp(adminUserLog.getIp());
        	dto.setLocation(adminUserLog.getLocation());
        	listdto.add(dto);
		}
        
        Map<String, Object> map=new HashMap<>();
        map.put("total", listdto.size());
        map.put("rows", listdto);
        return map;
    }

    /**
     * 查询后台账号  带分页
     * @param filter
     * @param pageNum
     * @param pageSize
     * @return
     */
    public List<PageAdminUserDTO> pageAdminUser( Integer filter, Integer pageNum, Integer pageSize) {
    	PageRequest page = PageRequest.of(pageNum,pageSize);//,Sort.by(Direction.DESC, "_id")
        
        Query query=new Query();
        query.with(page);
        if (Integer.valueOf(1).equals(filter)) {
        	query.addCriteria(Criteria.where("status").is(AdminUserEnum.Status.ON.name()));
        } else if (Integer.valueOf(2).equals(filter)) {
        	query.addCriteria(Criteria.where("status").is( AdminUserEnum.Status.OFF.name()));
        } else {
        		query.addCriteria(Criteria.where("status").in(AdminUserEnum.Status.ON.name(), AdminUserEnum.Status.OFF.name()));
        }
        
        List<AdminUser> list = mongoTemplate.find(query, AdminUser.class);
        if (null==list) {
        	 return null;
		}
        
        List<PageAdminUserDTO> listdto=new ArrayList<>();
        String ip=null;
        String timeDate=null;
        for (AdminUser user : list) {
        	PageAdminUserDTO dto=new PageAdminUserDTO();
        	if (null==ip && null==timeDate) {
        		List<AdminUserLog> findByUuid = adminUserLogDao.findByUuid(user.getUuid());
        		for (int i = 0; i <findByUuid.size(); i++) {
        			ip=findByUuid.get(i).getIp();
        			timeDate = findByUuid.get(i).getUpdatedTime();
        			break;
				}
			}
        	
        	dto.setAccount(user.getAccount());
        	dto.setIp(ip);
        	dto.setLastLogin(timeDate);//adminUserLogDao.findByUuid(user.getUuid()).getUpdatedTime()
        	dto.setPmLevel(user.getRoleName());
        	dto.setRemark(user.getRemark());
        	dto.setRid(user.getRoleId());
        	dto.setStatus(user.getStatus());
        	dto.setUuid(user.getUuid());
        	listdto.add(dto);
        }
        return listdto;
    }
    
    
上一篇:整理出Android逆向系列学习进阶视频,附超全教程文档


下一篇:升职加薪必看!Android开发究竟该如何学习,附架构师必备技术详解