4、Spring Boot Mongodb

原创 2016年12月08日 23:41:39

前面把mongodb的基本概念,安装以及基本操作都讲了,下面我们就来讲一下mongodb在项目当中的应用。这里主要使用Spring boot来作项目演示,然后使用spring-data-mongo来操作mongodb.然后使用了spring-io来作项目的jar包管理。下面是项目的结构图:

这里写图片描述

其中Mongodb的MongoTemplate不太友好,稍微封装了一下:

1、lang – 基础类

这里主要是用了Lombok.jar包,用于简化代码。Lombok - 消除冗长的 java 代码

1) Direction.java 用于排序使用

@Getter
@AllArgsConstructor
public enum Direction implements EnumCode<Integer> {
    ASC(1, "asc"),               // 升序
    DESC(2, "desc");             // 降序

    private Integer key;
    private String desc;
}

2) EnumCode.java – 枚举的抽象

public interface EnumCode<K> {

    K getKey();

    String getDesc();

}

3) MongoSearchEntity.java – 分页查询类

@Data
public class MongoSearchEntity implements Serializable {

    /** 第一页 */
    private int page = 1;
    /** 每页10条记录 */
    private int size = 10;
    private List<String> sortname;
    /**  @see com.weimob.o2o.lang.Direction */
    private Integer sortorder;

}

2、user – 操作类

1) User.java – 实体类

@Data
public class User implements Serializable {

    @Id
    private Integer id;
    private String username;
    private Integer age;
    private String password;

}

2) UserService.java

public interface UserService {

    List<User> findUserByCondition(User user);

    List<User> findUserByPage(User queryBean, MongoSearchEntity pageBean);

    void saveUser(User user);

}

3) UserServiceImpl.java

@Service
public class UserServiceImpl implements UserService {

    private final static String USER_COLLECTION_NAME = "user";

    @Autowired
    private MongoTemplate mongoTemplate;

    public List<User> findUserByCondition(User user) {
        Query queryBean = MongoQueryUtils.getMongoQuery(user);
        List<User> users = mongoTemplate.find(queryBean, User.class, USER_COLLECTION_NAME);
        return users;
    }

    public List<User> findUserByPage(User user, MongoSearchEntity pageBean){
        Query queryBean = MongoQueryUtils.getMongoQueryWithPage(user, pageBean);
        return mongoTemplate.find(queryBean, User.class, USER_COLLECTION_NAME);
    }

    public void saveUser(User user) {
        mongoTemplate.save(user, USER_COLLECTION_NAME);
    }
}

4) MongoQueryUtils - 查询工具类

public abstract class MongoQueryUtils {

    public static Query getMongoQuery(Object obj){
        Query query = new Query();
        if(null == obj){
            return query;
        }
        try {
            BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
            for(PropertyDescriptor propertyDescriptor : propertyDescriptors){
                if("class".equals(propertyDescriptor.getName())){
                    continue;
                }
                Method readMethod = propertyDescriptor.getReadMethod();
                Object value = readMethod.invoke(obj);
                if(null != value){
                    // generate query
                    Criteria criteria = Criteria.where(propertyDescriptor.getDisplayName()).is(value);
                    query.addCriteria(criteria);
                }
            }
            return query;
        } catch (IntrospectionException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return query;
    }

    public static Query getMongoQueryWithPage(Object obj, MongoSearchEntity searchEntity){
        Query mongoQuery = getMongoQuery(obj);

        int page = searchEntity.getPage();
        int size = searchEntity.getSize();
        mongoQuery.skip((page - 1) * size + 1);
        mongoQuery.limit(size);
        List<String> sortNames = searchEntity.getSortname();
        if(CollectionUtils.isEmpty(sortNames)){
            return mongoQuery;
        }
        Sort sort;
        Integer direction = searchEntity.getSortorder();

        if(Direction.DESC.getKey().equals(direction)){
            sort = new Sort(Sort.Direction.DESC, sortNames);
        } else if (Direction.ASC.getKey().equals(direction)){
            sort = new Sort(Sort.Direction.ASC, sortNames);
        } else {
            String[] propertyArray = new String[sortNames.size()];
            for(int i = 0; i < sortNames.size(); i++){
                propertyArray[i] = sortNames.get(i);
            }
            sort = new Sort(propertyArray);
        }
        mongoQuery.with(sort);
        return mongoQuery;
    }


}

5) UserController

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping(value = "add", method = RequestMethod.POST)
    public String saveUser(@RequestBody User user){
        userService.saveUser(user);
        return "ok";
    }

    @RequestMapping("query")
    public List<User> findUserByCondition(@RequestBody User user){
        List<User> users = userService.findUserByCondition(user);
        return users;
    }

    @RequestMapping("page")
    public List<User> findUserByPage(@RequestBody User user){
//        MongoQueryUtils.
        List<User> users = userService.findUserByCondition(user);
        return users;
    }


}

3、配置文件

application.properties

## servlet port
server.port=8080

## mongodb
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=carl

4、启动类

Main.class

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class Main {

    public static void main(String[] args) {
        SpringApplication.run(Main.class);
    }

}

5、PostMan测试

可以使用PostMan进行代码打断点调试。

这里写图片描述

代码Github地址: Spring Boot Mongodb

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

SpringBoot中Mongo查询条件是集合中的字段的处理

MongoRepositoryMongoRepository和普通的Repository一样,继承PagingAndSortingRepository,支持分页和普通的CRUD。之前已经提过Jpa的一...

84. Spring Boot集成MongoDB【从零开始学Spring Boot】

至于MongoDB网上有很多相关的资料,所以在这里不进行过多的介绍,我们在这里主要是介绍下如何将mongodb与spring boot结合使用。本节大纲: (1) 准备工作; (2) 新建一个ma...

SpringBoot非官方教程 | 第八篇:springboot整合mongodb

这篇文章主要介绍springboot如何整合mongodb。
  • forezp
  • forezp
  • 2017年04月28日 22:17
  • 19306

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Spring Boot中使用MongoDB数据库

http://blog.didispace.com/springbootmongodb/ 前段时间分享了关于Spring Boot中使用Redis的文章,除了Redis之后,我们在互联网...
  • hotdust
  • hotdust
  • 2016年08月31日 14:48
  • 1465

SpringBoot操作MongoDB实现分页查询

前几天写了一篇关于介绍SpringBoot的简单使用。以及使用SpringBoot JPA做了一次数据库的一个CURD (地址:http://blog.csdn.net/canot/article/d...
  • canot
  • canot
  • 2016年06月03日 00:34
  • 5476

springboot(十一):Spring boot中mongodb的使用

mongodb是最早热门非关系数据库的之一,使用也比较普遍,一般会用做离线数据分析来使用,放到内网的居多。由于很多公司使用了云服务,服务器默认都开放了外网地址,导致前一阵子大批 MongoDB 因配置...

spring-data-mongodb 配置和使用多个 mongoTemplate

简单几步,在项目中配置多个MongoTemplate.

使用spring连接及操作mongodb3.0

前边有一篇记录过不使用spring,直接在java代码中连接和操作mongodb数据库,这里就紧随其后记录一下使用spring的情况下,在java中简单操作mongodb。 maven导包配置: ...

Spring Data 与MongoDB 集成五:操作篇(分页)

本文转载至:http://blog.csdn.net/congcong68/article/details/47624221 一.简介        SpringData  ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:4、Spring Boot Mongodb
举报原因:
原因补充:

(最多只允许输入30个字)