4、Spring Boot Mongodb
2016-12-08 23:41
525 查看
前面把mongodb的基本概念,安装以及基本操作都讲了,下面我们就来讲一下mongodb在项目当中的应用。这里主要使用Spring boot来作项目演示,然后使用spring-data-mongo来操作mongodb.然后使用了spring-io来作项目的jar包管理。下面是项目的结构图:
其中Mongodb的MongoTemplate不太友好,稍微封装了一下:
1) Direction.java 用于排序使用
2) EnumCode.java – 枚举的抽象
3) MongoSearchEntity.java – 分页查询类
2) UserService.java
3) UserServiceImpl.java
4) MongoQueryUtils - 查询工具类
5) UserController
代码Github地址: Spring Boot Mongodb
其中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进行简单Gis操作
- Springboot+MongoDB例子
- springboot(十一):Spring boot中mongodb的使用
- springboot之mongoDB项目Exception in monitor thread while connecting to server localhost:27017
- Spring Boot中使用log4j实现http请求日志入mongodb
- 基于 MongoDB 及 Spring Boot 的文件服务器的实现
- spring-boot 配置mongoDB连接,保存、查找、统计操作
- springboot(十一):Spring boot中mongodb的使用
- Spring Boot中使用MongoDB3.0出现auth failed
- 基于 MongoDB 及 Spring Boot 的文件服务器的实现
- Spring-boot访问MongoDB
- MongoDB最简单的入门教程之四:使用Spring Boot操作MongoDB
- springboot+mongodb最简。。
- mongodb学习(三):springboot集成mongodb例子
- Spring Boot log4j实现把日志存入mongodb
- [增删改查] SpringBoot 整合 MongoDB 之 MongoTemplate 实现 CRUD、分页接口
- spring-boot集成MongoDB
- springboot 禁用mongoDB自动配置
- 禁用springboot中对mongodb的autoConfiguration
- 转载:Spring Boot (十一):Spring boot中mongodb的使用