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与MySQL不同 MongoDB分为数据库,集合,文档。每个文档都表示一个对象。数据库里放集合 集合里放文档。
MongoDB的数据库和集合不需要手动的创建
MongoDB的一些基本操作指令
MongoDB的CRUD基本指定
插入数据:首先use 库名; 然后db.集合名.insert(需要插入的数据)
查询集合的所有数据:首先use库名;然后db.集合名.find();
插入文档到集合
当我们插入数据时不指定_id 时会自动生成一个由机器码和时间戳生成的_id值 它生成的id值是唯一的 所以我们建议 一般就用它的自动生成_id值
insertOne()和insertMany() 是insert()的拆分版 可读性强。
insertOne()只能插入一个
insertMany() 必须插入多个(必须是数组)
find()括号内可以填条件{id:xxx,age:xxx}
修改文档 update(查询条件,新对象)
注意新对象如果不是要替换整个文档 那么要用$set来修改指定属性
删除文档,或删除集合
练习示例
for循环直接20000次操作数据库 性能差
用个数组接收 然后一次insert插入 就可以快差不多18倍(更多)
比较查询
分割
以下是黑马程序员视频摘取的记录
整合MongoDB整合idea项目
首先 看看它的pom文件
配置文件yml 注意主机地址 看看自己主机地址是多少 参考之前的项目
配置好后 运行springboot工程 试一下能不能连接到MongoDB数据库
编写实体类 字段和mysql一样 一一对应 但是注意 MongoDB是文档类型的数据 需要在实体类上添加注解@ Document(collection=“集合名”) 这个参数类似MyBatis-plus的@TableName(“表名”)
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; }