频道栏目
首页 > 资讯 > 其他综合 > 正文

4、SpringBootMongodb

16-12-10        来源:[db:作者]  
收藏   我要投稿

前面把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 {
    ASC(1, "asc"),               // 升序
    DESC(2, "desc");             // 降序

    private Integer key;
    private String desc;
}

2) EnumCode.java – 枚举的抽象

public interface EnumCode {

    K getKey();

    String getDesc();

}

3) MongoSearchEntity.java – 分页查询类

@Data
public class MongoSearchEntity implements Serializable {

    /** 第一页 */
    private int page = 1;
    /** 每页10条记录 */
    private int size = 10;
    private List 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 findUserByCondition(User user);

    List 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 findUserByCondition(User user) {
        Query queryBean = MongoQueryUtils.getMongoQuery(user);
        List users = mongoTemplate.find(queryBean, User.class, USER_COLLECTION_NAME);
        return users;
    }

    public List 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 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 findUserByCondition(@RequestBody User user){
        List users = userService.findUserByCondition(user);
        return users;
    }

    @RequestMapping("page")
    public List findUserByPage(@RequestBody User user){
//        MongoQueryUtils.
        List 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

相关TAG标签
上一篇:全文检索:Apache Lucene框架入门实例
下一篇:HUE安装及问题
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站