springboot整合mongodb

1、介绍:
MongoDB是介于关系型数据库和非关系型数据库中间的一个产品,是非关系型数据库中最丰富的,最像关系型数据的。
2、与redis对比
Redis:

  1. Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  2. Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,在set,hash等数据结构的存储。
  3. Redis支持数据的备份,即master-slave模式的数据备份
  4. 性能极高- Redis能读的速度是110000次/s,写的速度是81000次/s
  5. 丰富的数据类型-Redis支持二进制案例的Strings,Lists,Hashes,Setes及Ordered Sets数据类型操作。
  6. 原子 - Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
  7. 丰富的特性 - Redis还支持publish/subscribe,通知,key过期等等特性。
    MongoDB:
  8. 模式自由:可以把不同结构的文档存储在同一个数据库里
  9. 面向集合的存储:适合存储JSON风格文件的形式
  10. 完整的索引支持,对任何属性可索引
  11. 复制和高可用性:支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目的是提供冗余及自动故障转移
  12. 自动分片:支持水平的数据库集群,可动态添加额外的机器
    6.丰富的查询:支持丰富的查询表达方式,查询指令使用JSON形式额标记,可轻易查询文档中的内嵌的对象及数组
  13. 快速就地更新:查询优化器会分析查询表达式,并生成一个高效的查询计划
    8.高效的传统存储方式:支持二进制数据及大型对象

使用场景的不同:
MongoDB适用于
①网站数据:
②缓存:
③大尺寸、低价值的数据也是MongoDB的最佳选择,比如日志,用户评论啥的
④高伸缩的场景,非常是个由数十或者数百台服务器组成的数据库
⑤用于对象及json数据的存储,MongoDB的bson数据格式非常适合文档格式化的存储及查询。
Redis应用场景:
① 用来做缓存-redis的所有数据时放在内存中的
② 可以在某些特定应用场景下替代传统数据库–比如社交类的应用
③ 在一些大型系统中,巧妙的实现一些特定的功能:tomcat集成redis实现session共享、临时订单数据缓存等

3.代码实现
作为springboot项目,还是老规矩引入依赖

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

其次就是配置yml文件

server:
  servlet:
    context-path: /mongodb-demo
  port: 8080

#mongodb配置
spring:
  data:
    mongodb:
      database: test
      host: 127.0.0.1
      port: 27017

这是我本地的MongoDB,直接去官网下载最新的就行,傻瓜式下一步,注意:第一个选择时默认或者自定义安装目录,还有最后一步的时候把install那个勾取消,否则需要很久,需要可视化工具也可以自己去官网下载。这里就不细讲了。

3.就是引用了只要注入下面这个接口就可以了,里面封装了所有针对MongoDB的操作,增删改查
@Autowired
private MongoTemplate mongoTemplate;

@Service
public class MongoDbService {

    private static final Logger log= LoggerFactory.getLogger(MongoDbService.class);

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 保存对象
     * @param user
     * @return
     */
    public boolean save(UserInfo user){
        mongoTemplate.save(user);
        return true;
    }

    /**
     * 保存对象
     * @param user
     * @param conllection 集合名
     * @return
     */
    public boolean save(UserInfo user,String conllection){
        mongoTemplate.save(user,conllection);
        return true;
    }

    public List<UserInfo> findAll(){
        return mongoTemplate.findAll(UserInfo.class);
    }

    public UserInfo findById(String id){
        Query query = new Query(Criteria.where("_id").is(id));
        return mongoTemplate.findOne(query,UserInfo.class);
    }



    public String update(UserInfo t){
        Query query = new Query(Criteria.where("_id").is(t.getId()));
        Update update = new Update()
                .set("updateTime", new Date());
        //updateFirst 更新查询返回结果集的第一条
        mongoTemplate.updateFirst(query, update, UserInfo.class);
        return "success";
    }

    public String delete(UserInfo t){
        mongoTemplate.remove(t);
        return "success";
    }

    public String deleteById(String id){
        UserInfo user= findById(id);
        mongoTemplate.remove(user);
        return "success";
    }
}

上面的方法我们可以看出,其实保存是支持只保存对象或者自定义集合名,如果不自定义就是以对象名为集合名,同时我们还可以看出MongoDB是支持字段过滤的,所以说他是最接近关系型数据库的。

4、测试案例

@RunWith(SpringRunner.class)
@SpringBootTest
public class MongoDBServiceTest {

    @Autowired
    private MongoDbService mongoDbService;

    @Test
    public void save(){
        UserInfo userInfo=new UserInfo();
        userInfo.setId("2");
        userInfo.setName("丽丽");
        userInfo.setSex("0");
        userInfo.setCreateTime(new Date());
        mongoDbService.save(userInfo);
    }

    @Test
    public void saveWithConName(){
        UserInfo userInfo=new UserInfo();
        userInfo.setId("2");
        userInfo.setName("丽丽");
        userInfo.setSex("0");
        userInfo.setCreateTime(new Date());
        mongoDbService.save(userInfo,"cxwUserInfo");
    }

    @Test
    public void  findAll(){
        List<UserInfo> list= mongoDbService.findAll();
        for(UserInfo user :list){
            System.out.println(user.getName()+":"+user.getId());
        }
    }
}

这里只挑选了部分方法测试,不过作为一个合格的程序员一定要有写测试案例的习惯,我这里是偷懒,不要向我学习。
代码:https://gitee.com/wangzaiwork/mongodb-demo.git
---------------------------写的不好仅供参考--------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值