4、Spring Boot Mongodb

标签: mongodb spring 应用
1519人阅读 评论(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

查看评论

SpringBoot和mongodb开发需要使用到的注解和属性

在接触Spring的时候就接触了分别标识
  • lycIT
  • lycIT
  • 2017-12-05 17:07:53
  • 139

springboot - 集成MongoDB实现

今天就半天时间了,感慨一下;最近一年多都忙的不可开交;今天终于可有点儿时间,可以着手写点东西了.....非常感谢工作和生活..... 结合自身项目特点,合理组织自身代码 1、开发环境  ...
  • u010235716
  • u010235716
  • 2017-09-15 15:02:51
  • 1552

springboot + mongodb 查询实例

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

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

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

spring-boot 配置mongoDB连接,保存、查找、统计操作

简单几步,就可以配置好mongoDB的连接,然后使用MongoTemplate操作数据
  • ClementAD
  • ClementAD
  • 2016-10-27 17:56:19
  • 8190

SpringBoot 入门:整合MongoDB,做简单查找功能

接着昨天来,今日整合入MongoDB,做个简单的查找功能出来。多说无用,开搞~ 今日目标:加入MongoDB支持。写一个简单的查询。 首先,搭建环境、学习MongoDB这都不提了,这里只说java...
  • u011161786
  • u011161786
  • 2017-05-10 00:16:51
  • 2770

SpringBoot操作MongoDB实现分页查询

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

spring boot 整合mongodb

Spring Boot其设计目的是用来简化新Spring应用的初始搭建以及开发过程,简化配置...
  • xiongpei00
  • xiongpei00
  • 2017-05-26 15:45:19
  • 8402

如何使用MongoDB+Springboot实现分布式ID?

如何使用MongoDB在SpringCloud分布式系统中实现分布式ID?
  • forezp
  • forezp
  • 2017-04-04 11:13:31
  • 32494

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

SpringBoot项目相对SpringMVC项目有搭建迅速,配置更少的优点。创建springboot项目有很多种方式,本文使用idea创建一个整合mongoDB和mysql数据库的简单的spring...
  • u013259845
  • u013259845
  • 2017-04-18 18:40:23
  • 2307
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 28万+
    积分: 4295
    排名: 8793
    请作者喝杯咖啡吧。
    博客专栏
    最新评论