您的位置:首页 > 数据库 > Mongodb

4、Spring Boot Mongodb

2016-12-08 23:41 525 查看
前面把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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: