Spring boot下的对MongoDB的相关操作

最近完成了在spring boot下完成了对mongoDB数据库的相关操作,对于一些常用的操作做出如下的总结。
1.首先我们完成MongoDB数据库的下载和启动。
2.接下来我们在项目中完成对MongoDB的相关配置。
在Spring context.xml文件中我们完成如下的配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd


http://www.springframework.org/schema/context

        http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <bean id="UserInfoRepository"
          class="com.lyf.user.UserInfoRepositoryImpl">
        <property name="mongoTemplate" ref="mongoTemplate" />
    </bean>

    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg name="mongo" ref="mongo" />
        <constructor-arg name="databaseName" value="user" />
    </bean>

    <!-- Factory bean that creates the Mongo instance -->
    <bean id="mongo" class="org.springframework.data.mongodb.core.MongoFactoryBean">
        <property name="host" value="localhost" />
        <property name="port" value="27017" />
    </bean>

    <!-- Activate annotation configured components -->
    <context:annotation-config />

    <!-- Scan components for annotations within the configured package -->
    <context:component-scan base-package="com.lyf.user">
        <context:exclude-filter type="annotation"
                                expression="org.springframework.context.annotation.Configuration" />
    </context:component-scan>

</beans>

3.接下来我们需要设置我们的实体类
代码如下:

package com.lyf.user;

import java.io.Serializable;
import java.util.Arrays;
import java.util.List;

import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Id;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

@Getter
@Setter
public class User implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    private String uid;
    private String name;
    private int age;
    private String address;
    private String[] hobby;
    private JSONObject description;

    public User() {
    }

    public User(String uid, String name, int age,String address,String hobby[],JSONObject description) {
        this.uid = uid;
        this.name = name;
        this.age = age;
        this.address= address;
        this.hobby = hobby;
        this.description = description;
    }

    @Override
    public String toString() {
        return "User{" +
                "uid='" + uid + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                ", hobby=" + Arrays.toString(hobby) +
                ", description='" + description + '\'' +
                '}';
    }

}

4.配置好实体类后,接下来我们编写一个简单的接口,定义我们要实现的功能
代码如下:

package com.lyf.user;

import com.mongodb.WriteResult;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * Created by flyfy on 2017/7/13.
 */
//@Repository
    public interface UserInfoRepository<T>{
        public void saveObject(T object);
        public void deleteObject(String id);
        public List<T> queryByName(String name,Class<T> tClass);
        public List<T> queryByAddress(String address,Class<T> tClass);
        public String queryByDescriptionRealname(String descriptionParam,Class<T> tClass);
        public List<T> queryAll(Class<T> tClass);

    }

5.然后设计一个接口实现类
代码如下:

package com.lyf.user;

import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonParser;
import com.mongodb.WriteResult;
import lombok.extern.java.Log;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.repository.Query;

import java.util.*;

/**
 * Created by flyfy on 2017/7/14.
 */
public class UserInfoRepositoryImpl implements UserInfoRepository<User>{
    MongoTemplate mongoTemplate;
    public void setMongoTemplate(MongoTemplate mongoTemplate){
        this.mongoTemplate = mongoTemplate;
    }

    public void saveObject(User user) {
        mongoTemplate.insert(user);
    }

    public void deleteObject(String id) {
        mongoTemplate.remove(new org.springframework.data.mongodb.core.query.Query(Criteria.where("uid").is(id)));
    }

    public List<User> queryByName(String name,Class<User> userClass){
        List<User> list = mongoTemplate.find(new org.springframework.data.mongodb.core.query.Query(Criteria.where("name").is(name)),userClass);
        return list;
    }
    public List<User> queryByAddress(String address,Class<User> userClass){
        List<User> queryUser = mongoTemplate.find(new org.springframework.data.mongodb.core.query.Query(Criteria.where("address").is(address)),userClass);
        return queryUser;
    }
    public List<User> queryAll(Class<User> userClass){
        List<User> queryUsers = mongoTemplate.findAll(userClass);
        return queryUsers;
    }
    public String queryByDescriptionRealname(String descriptionParam,Class<User> userClass){
        List<User> queryUsers = queryAll(userClass);
        System.out.println(queryUsers.size());
        List<User> queryUser = new ArrayList<User>();
        if(queryUsers.size()>0) {
            for (User list : queryUsers) {
                JSONObject jsonObject = list.getDescription();
                if(null!=jsonObject) {
                    if (jsonObject.containsValue(descriptionParam)) {
                        queryUser.add(list);
                    } else {
                        System.out.println("该条记录里不包含descriptpParam");
                    }
                }else{
                    continue;
                }
            }
        }
        if(queryUser.size()== 0){
            return "not exist";
        }else{
            System.out.println("取到的内容:"+queryUser.toString());
            return queryUser.toString();
        }
    }
}

6.接下来我们将方法的调用写入controller类(这里我们其实应该将具体的方法实现放到service里)
代码如下:

package com.lyf.user;

/**
 * Created by flyfy on 2017/7/12.
 */

import com.alibaba.fastjson.JSONObject;
import com.lyf.MongoQuery.mongoQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.repository.query.Param;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.lyf.user.UserInfoRepository;

import static org.springframework.web.bind.annotation.RequestMethod.GET;
import static org.springframework.web.bind.annotation.RequestMethod.POST;

@RestController
@RequestMapping(value = {"/users"}, produces = "application/json;charset=UTF-8")
public class UserController {




    /**
     * 向MongoDB中插入数据
     *
     */
    @RequestMapping(value = {"/save"}, method = POST)
    @ResponseBody
    public String save() {
        String hobby[] ={"youyong","huachuan"};
        JSONObject description = new JSONObject();
        String realname ="flyfy";
        String realhobby[]  ={"cuiyanwen","chat"};
        description.put("realname",realname);
        description.put("realhobby",realhobby);
        User user = new User("flyfy_02","liyifei",23,"beijing",hobby,description);
        ConfigurableApplicationContext context = new ClassPathXmlApplicationContext(
                "classpath:Spring context.xml");
        UserInfoRepository userInfoRepository = context.getBean(UserInfoRepositoryImpl.class);
        userInfoRepository.saveObject(user);
        JSONObject ret = new JSONObject();
        ret.put("code", 200);
        ret.put("codeStatus", "ok");
        ret.put("detailedMsg", "success");

        return ret.toJSONString();

    }

    /*
    *
    * 根据name属性进行查询
    * */
    @RequestMapping(value = {"/queryByName"}, method = GET)
    @ResponseBody
    public String queryByName(@Param("name") String name) {
        ConfigurableApplicationContext context = new ClassPathXmlApplicationContext(
                "classpath:Spring context.xml");
        UserInfoRepository userInfoRepository = context.getBean(UserInfoRepositoryImpl.class);
        userInfoRepository.queryByName(name,User.class);
        JSONObject ret = new JSONObject();
        ret.put("code", 200);
        ret.put("codeStatus", "ok");
        ret.put("detailedMsg", "success");

        return ret.toJSONString();

    }
    /*
    *
    * 根据address属性查询
    *
    */
    @RequestMapping(value = {"/queryByAddress"}, method = GET)
    @ResponseBody
    public String queryByAddress(@Param("address") String address) {
        ConfigurableApplicationContext context = new ClassPathXmlApplicationContext(
                "classpath:Spring context.xml");
        UserInfoRepository userInfoRepository = context.getBean(UserInfoRepositoryImpl.class);
        userInfoRepository.queryByAddress(address,User.class);
        JSONObject ret = new JSONObject();
        ret.put("code", 200);
        ret.put("codeStatus", "ok");
        ret.put("detailedMsg", "success");

        return ret.toJSONString();

    }


    /*
    *
    * 根据description字段下的二级字段realname进行查询
    * */
    @RequestMapping(value = {"/queryByDescriptionRealname"}, method = GET)
    @ResponseBody
    public String queryByDescription(@Param("descriptionParamRealname") String descriptionParam) {
        ConfigurableApplicationContext context = new ClassPathXmlApplicationContext(
                "classpath:Spring context.xml");
        UserInfoRepository userInfoRepository = context.getBean(UserInfoRepositoryImpl.class);
        userInfoRepository.queryByDescriptionRealname(descriptionParam,User.class);
        JSONObject ret = new JSONObject();
        ret.put("code", 200);
        ret.put("codeStatus", "ok");
        ret.put("detailedMsg", "success");

        return ret.toJSONString();

    }

    /*
    *
    * 根据uid完成数据的删除
    * */
    @RequestMapping(value = {"/delete"}, method = POST)
    @ResponseBody
    public String delete(String id) {
        if(null!=id){
            ConfigurableApplicationContext context = new ClassPathXmlApplicationContext(
                    "classpath:Spring context.xml");
            UserInfoRepository userInfoRepository = context.getBean(UserInfoRepositoryImpl.class);
            userInfoRepository.deleteObject(id);
        }
        JSONObject ret = new JSONObject();
        ret.put("code", 200);
        ret.put("codeStatus", "ok");
        ret.put("detailedMsg", "success");

        return ret.toJSONString();

    }
}

7.当然你也可以参照官网的文档,利用官方的MongoRepository接口,内部自带了很多常用的方法,但是对于提取二级字段属性值的话,就需要我们自己编写实现方法。
下面附上官网文档地址:http://docs.spring.io/spring-data/data-mongo/docs/current/reference/html/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.了解Spring 2.了解NoSQL和文档数据库 3.要求 4.其他帮助资源 4.1。支持 4.1.1。社区论坛 4.1.2。专业支持 4.2。发展之后 5.新&值得注意的 5.1。Spring Data MongoDB 2.1中的新特性 5.2。Spring Data MongoDB 2.0中的新特性 5.3。Spring Data MongoDB 1.10中的新特性 5.4。Spring Data MongoDB 1.9中的新特性 5.5。Spring Data MongoDB 1.8中的新特性 5.6。Spring Data MongoDB 1.7中有什么新功能 6.依赖 6.1。Spring Boot的依赖管理 6.2。Spring框架 7.使用Spring Data Repositories 7.1。核心概念 7.2。查询方法 7.3。定义存储库接口 7.3.1。微调储存库定义 7.3.2。空处理存储库方法 7.3.3。将存储库与多个Spring Data模块一起使用 7.4。定义查询方法 7.4.1。查询查询策略 7.4.2。查询创建 7.4.3。属性表达式 7.4.4。特殊参数处理 7.4.5。限制查询结果 7.4.6。流式查询结果 7.4.7。异步查询结果 7.5。创建存储库实例 7.5.1。XML配置 7.5.2。JavaConfig 7.5.3。独立使用 7.6。Spring Data存储库的自定义实现 7.6.1。定制个人存储库 7.6.2。自定义基础存储库 7.7。从聚合根发布事件 7.8。Spring数据扩展 7.8.1。Querydsl扩展 7.8.2。Web支持 7.8.3。存储库填充程序 7.8.4。传统网络支持 参考文档 8.介绍 8.1。文档结构 9. MongoDB支持 9.1。入门 9.2。示例存储库 9.3。用Spring连接到MongoDB 9.3.1。使用基于Java的元数据注册Mongo实例 9.3.2。使用基于XML的元数据注册Mongo实例 9.3.3。MongoDbFactory接口 9.3.4。使用基于Java的元数据注册MongoDbFactory实例 9.3.5。使用基于XML的元数据注册MongoDbFactory实例 9.4。MongoTemplate简介 9.4.1。实例化MongoTemplate 9.4.2。WriteResultChecking策略 9.4.3。WriteConcern 9.4.4。WriteConcernResolver 9.5。保存,更新和删除文档 9.5.1。如何_id在映射图层中处理该字段 9.5.2。类型映射 9.5.3。保存和插入文件的方法 9.5.4。更新集合中的文档 9.5.5。在集合中插入文档 9.5.6。在集合中查找和插入文档 9.5.7。删除文件的方法 9.5.8。乐观锁定 9.6。查询文件 9.6.1。查询集合中的文档 9.6.2。查询文件的方法 9.6.3。查询不同的值 9.6.4。地理空间查询 9.6.5。GeoJSON支持 9.6.6。全文查询 9.6.7。排序规则 9.6.8。JSON模式 9.6.9。流利的模板API 9.7。按实例查询 9.7.1。介绍 9.7.2。用法 9.7.3。示例匹配器 9.7.4。执行一个例子 9.7.5。无类型示例 9.8。减少地图操作 9.8.1。使用示例 9.9。脚本操作 9.9.1。使用示例 9.10。集团运营 9.10.1。使用示例 9.11。聚合框架支持 9.11.1。基本概念 9.11.2。支持的聚合操作 9.11.3。投影表达式 9.11.4。分面分类 9.12。用自定义转换器覆盖默认映射 9.12.1。使用已注册的Spring Converter进行保存 9.12.2。使用Spring转换器读取 9.12.3。使用MongoConverter注册Spring转换器 9.12.4。转换器消除歧义 9.13。索引和集合管理 9.13.1。创建索引的方法 9.13.2。访问索引信息 9.13.3。使用集合的方法 9.14。执行命令 9.14.1。执行命令的方法 9.15。生命周期事件 9.16。例外翻译 9.17。执行回调 9.18。GridFS支持 9.19。更改流 9.19.1。使用MessageListener更改流 9.19.2。更改流 - 无效 10.反应性的MongoDB支持 10.1。入门 10.2。使用Spring和Reactive Streams Driver连接到MongoDB 10.2.1。使用基于Java的元数据注册MongoClient实例 10.2.2。ReactiveMongoDatabaseFactory接口 10.2.3。使用基于

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值