Spring boot下的对MongoDB的相关操作

来源:互联网 发布:手机淘宝体检中心登录 编辑:程序博客网 时间:2024/06/13 23:11

最近完成了在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/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://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@Setterpublic 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/

原创粉丝点击