关闭

4、Spring Boot Mongodb

标签: mongodbspring应用
1344人阅读 评论(0) 收藏 举报
分类:

前面把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

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

使用IDEA搭建SpringBoot项目且整合mongoDB和mysql

SpringBoot项目相对SpringMVC项目有搭建迅速,配置更少的优点。创建springboot项目有很多种方式,本文使用idea创建一个整合mongoDB和mysql数据库的简单的spring...
  • u013259845
  • u013259845
  • 2017-04-18 18:40
  • 1321

SpringBoot -- 集成MongoDB

前置工作 熟悉本系列的工作环境MongoDB已经搭建完成MongoDB启用验证 引入&配置参数 引入 spring-boot-starter-data-MongoDB ...
  • gebitan505
  • gebitan505
  • 2017-04-19 10:27
  • 4984

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

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

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

MongoRepositoryMongoRepository和普通的Repository一样,继承PagingAndSortingRepository,支持分页和普通的CRUD。之前已经提过Jpa的一...
  • tianyaleixiaowu
  • tianyaleixiaowu
  • 2017-06-15 13:24
  • 2710

SpringBoot操作MongoDB实现分页查询

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

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

这篇文章主要介绍springboot如何整合mongodb。
  • forezp
  • forezp
  • 2017-04-28 22:17
  • 28302

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

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

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

本文转载至:http://blog.csdn.net/congcong68/article/details/47624221 一.简介        SpringData  ...
  • zhouzhiwengang
  • zhouzhiwengang
  • 2016-11-09 14:30
  • 3777

springboot + mongodb 查询实例

1、新建一个Persoon的实体类(此处省略); 2、创建dao层接口; public interface PersonRepository extends MongoRepository{ ...
  • z_alvin
  • z_alvin
  • 2017-08-27 13:24
  • 841

Springmvc 应用Mongodb分页实现

spring mongodb mongoTemplate 分页
  • chunqiuwei
  • chunqiuwei
  • 2013-12-07 15:56
  • 15106
    个人资料
    • 访问:204006次
    • 积分:3643
    • 等级:
    • 排名:第10402名
    • 原创:132篇
    • 转载:45篇
    • 译文:28篇
    • 评论:103条
    请作者喝杯咖啡吧。
    博客专栏
    最新评论