springboot集成MongoDB

29 篇文章 0 订阅
14 篇文章 0 订阅

思路:

Iservice 实现通用方法,增删改查,ServiceImpl实现具体方法。

业务Service接口增加具体业务方法,业务ServiceImpl实现业务Service接口。

声明:

这只是单机版mongoDB,集群模式配置需要修改。

比较公用的方法可以放在IService里面

1 代码实现

1.1 yml文件配置:

spring:
    data:
        mongodb:
            host: IP
            port: 27017
            database: test
            username: test
            password: 123456

1.2 实体类

package com.prepared.service.modules.mongodb.model;

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

import java.io.Serializable;

/**
 * mongodb测试用user实体类
 *
 * @date 2019/12/30
 * @author prepared
 */
@Document(collection = "mongoDBUser")
public class MongoDBUser implements Serializable {

        private static final long serialVersionUID = -3258839839160856613L;
        @Id
        private Long id;

        /**
         * 声明username加索引,加快查询速度
         */
        @Indexed
        private String userName;

        @Field("pwd")
        private String passWord;

        public Long getId() {
                return id;
        }

        public void setId(Long id) {
                this.id = id;
        }

        public String getUserName() {
                return userName;
        }

        public void setUserName(String userName) {
                this.userName = userName;
        }

        public String getPassWord() {
                return passWord;
        }

        public void setPassWord(String passWord) {
                this.passWord = passWord;
        }

        @Override
        public String toString() {
                return "UserEntity{" +
                        "id=" + id +
                        ", userName='" + userName + '\'' +
                        ", passWord='" + passWord + '\'' +
                        '}';
        }
}

1.3 定义通用IService

package com.prepared.service.datasource.mongodb;

import java.util.List;

/**
 * MongoDB 通用IService
 *
 * @Author: z
 * @Date: 2019/12/30 15:12
 */
public interface IService<T> {

    /**
     * 保存对象
     *
     * @param t 对象实体
     */
    void saveEntity(T t);

    /**
     * 根据ID修改实体
     *
     * @param t 对象实体
     * @param id 主键
     * @return
     */
    long updateEntityById(T t, Long id);

    /**
     * 根据ID进行删除
     *
     * @param id 主键
     */
    void deleteEntityById(Long id);

    /**
     * 查询所有实体
     *
     * @return
     */
    List<T> findAll();
}

1.4 实现通用IService

package com.prepared.service.datasource.mongodb.impl;

import com.mongodb.client.result.UpdateResult;
import com.prepared.service.datasource.mongodb.IService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;

/**
 * mongoDB通用查询实现类
 *
 * @author prepared
 * @date 2019/12/30
 */
@Component
public class ServiceImpl<T> implements IService<T> {

    @Autowired
    private MongoTemplate mongoTemplate;

    @Override
    public void saveEntity(T t) {
        mongoTemplate.save(t);
    }

    @Override
    public long updateEntityById(T t, Long id) {
        Type superclass = getClass().getGenericSuperclass();
        Type supertype = ((ParameterizedType) superclass).getActualTypeArguments()[0];
        Class<T> clazz = (Class<T>) supertype;
        Query query = new Query(Criteria.where("id").is(id));
        Update update= new Update();
        //更新查询返回结果集的第一条
        UpdateResult result = mongoTemplate.updateFirst(query, update, clazz);
        if(result!=null) {
            return result.getMatchedCount();
        } else {
            return 0;
        }
    }

    @Override
    public void deleteEntityById(Long id) {
        Type superclass = getClass().getGenericSuperclass();
        Type supertype = ((ParameterizedType) superclass).getActualTypeArguments()[0];
        Class<T> clazz = (Class<T>) supertype;
        Query query = new Query(Criteria.where("id").is(id));
        mongoTemplate.remove(query, clazz);
    }

    @Override
    public List<T> findAll() {
        Type superclass = getClass().getGenericSuperclass();
        Type supertype = ((ParameterizedType) superclass).getActualTypeArguments()[0];
        Class<T> clazz = (Class<T>) supertype;
        return mongoTemplate.findAll(clazz);
    }
}

1.5 使用:

Service接口 继承 IService

public interface UserService extends IService<MongoDBUser> 

serviceImpl,继承 ServiceImpl

public class UserServiceImpl<T> extends ServiceImpl<MongoDBUser> implements UserService

1.6 测试:

@Test
public void testFindUserByUserName() {
	MongoDBUser test = userService.findUserByUserName("test");
	System.out.println("test>>> " + test);
}

@Test
public void testSaveUser() {
	MongoDBUser user = new MongoDBUser();
	user.setId(111L);
	user.setUserName("test");
	user.setPassWord("123");
	userService.saveEntity(user);
	MongoDBUser user2 = new MongoDBUser();
	user2.setId(222L);
	user2.setUserName("test2");
	user2.setPassWord("456");
	userService.saveEntity(user2);
	System.out.println("test>>> " + 1111);
}

@Test
public void testFindAllUser() {
	List<MongoDBUser> allUser = userService.findAll();
	System.out.println("test>>> " + allUser);
}

@Test
public void testFindByName() {
	MongoDBUser allUser = userService.findUserByUserName("test");
	System.out.println("test>>> " + allUser);
}

2 工具

MongoDB 官方可视化界面工具:
在这里插入图片描述

文档:mongodb-compass-1.20.4-win32-x64.exe
链接:http://note.youdao.com/noteshare?id=a531253dc148580135a47e0cea9aa39b&sub=2106F347C6C84EE4ACA887197EDBDDCE

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伍六七AI编程

你猜你给我1分我要不要

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值