标签:date   extend   配置   mapping   好的   param   如何使用   href   环境   
本文讲解Spring Boot基础下,如何使用MongoDB,编写数据访问。
环境依赖
修改 POM 文件,添加spring-boot-starter-data-mongodb依赖。
- <dependency>
-  <groupId>org.springframework.boot</groupId>
-  <artifactId>spring-boot-starter-data-mongodb</artifactId>
- </dependency>
数据源
方案一 使用 Spring Boot 默认配置
MongoDB 使用,在 Spring Boot 中同样提供了自配置功能。
默认使用localhost:27017的名称叫做test的数据库。
此外,我们也可以在 src/main/resources/application.properties 中配置数据源信息。
- spring.data.mongodb.uri=mongodb://localhost:27017/springboot-db
如果存在密码,配置改成如下
- spring.data.mongodb.uri=mongodb://name:pass@localhost:27017/dbname
方案二 手动创建
通过 Java Config 创建mongoTemplate。
- @Configuration
- @EnableMongoRepositories
- public class MongoConfig extends AbstractMongoConfiguration {
-  
-  private String mongoHost = "localhost";
-  private int mongoPort = 27017;
-  private String dbName = "springboot-db";
-  
-  private static final String MONGO_BASE_PACKAGE = "com.lianggzone.springboot.action.data.mongodb.entity";
-  
-  @Autowired
-  private ApplicationContext appContext;
-  
-  @Override
-  protected String getDatabaseName() {
-  return dbName;
-  }
-  
-  @Override
-  public Mongo mongo() throws Exception {
-  MongoClient mongoClient = new MongoClient(mongoHost, mongoPort);
-  return mongoClient;
-  }
-  
-  @Override
-  protected String getMappingBasePackage() {
-  return MONGO_BASE_PACKAGE;
-  }
-  
-  @Override
-  @Bean
-  public MongoTemplate mongoTemplate() throws Exception {
-  return new MongoTemplate(mongo(), getDatabaseName());
-  }
- }
使用mongoTemplate操作
实体对象
- @Document(collection = "author")
- public class Author {
-  @Id
-  private Long id;
-  private String realName;
-  private String nickName;
-  // SET和GET方法
- }
DAO相关
我们通过mongoTemplate进行数据访问操作。
- @Repository
- public class AuthorDao {
-  @Autowired
-  private MongoTemplate mongoTemplate;
-  
-  public void add(Author author) {
-  this.mongoTemplate.insert(author);
-  }
-  public void update(Author author) {
-  this.mongoTemplate.save(author);
-  }
-  public void delete(Long id) {
-  Query query = new Query();
-  query.addCriteria(Criteria.where("_id").is(id));
-  this.mongoTemplate.remove(query, Author.class);
-  }
-  public Author findAuthor(Long id) {
-  return this.mongoTemplate.findById(id, Author.class);
-  }
-  public List<Author> findAuthorList() {
-  Query query = new Query();
-  return this.mongoTemplate.find(query, Author.class);
-  }
- }
Service相关
Service层调用Dao层的方法,这个是典型的套路。
- @Service
- public class AuthorService {
-  @Autowired
-  private AuthorDao authorDao;
-  
-  public void add(Author author) {
-  this.authorDao.add(author);
-  }
-  public void update(Author author) {
-  this.authorDao.update(author);
-  }
-  public void delete(Long id) {
-  this.authorDao.delete(id);
-  }
-  public Author findAuthor(Long id) {
-  return this.authorDao.findAuthor(id);
-  }
-  public List<Author> findAuthorList() {
-  return this.authorDao.findAuthorList();
-  }
- }
Controller相关
为了展现效果,我们先定义一组简单的 RESTful API 接口进行测试。
- @RestController
- @RequestMapping(value="/data/mongodb/author")
- public class AuthorController {
-  @Autowired
-  private AuthorService authorService;
-  /**
-  * 查询用户列表
-  */
-  @RequestMapping(method = RequestMethod.GET)
-  public Map<String,Object> getAuthorList(HttpServletRequest request) {
-  List<Author> authorList = this.authorService.findAuthorList();
-  Map<String,Object> param = new HashMap<String,Object>();
-  param.put("total", authorList.size());
-  param.put("rows", authorList);
-  return param;
-  }
-  /**
-  * 查询用户信息
-  */
-  @RequestMapping(value = "/{userId:\\d+}", method = RequestMethod.GET)
-  public Author getAuthor(@PathVariable Long userId, HttpServletRequest request) {
-  Author author = this.authorService.findAuthor(userId);
-  if(author == null){
-  throw new RuntimeException("查询错误");
-  }
-  return author;
-  }
-  /**
-  * 新增方法
-  */
-  @RequestMapping(method = RequestMethod.POST)
-  public void add(@RequestBody JSONObject jsonObject) {
-  String userId = jsonObject.getString("user_id");
-  String realName = jsonObject.getString("real_name");
-  String nickName = jsonObject.getString("nick_name");
-  Author author = new Author();
-  if (author!=null) {
-  author.setId(Long.valueOf(userId));
-  }
-  author.setRealName(realName);
-  author.setNickName(nickName);
-  try{
-  this.authorService.add(author);
-  }catch(Exception e){
-  e.printStackTrace();
-  throw new RuntimeException("新增错误");
-  }
-  }
-  /**
-  * 更新方法
-  */
-  @RequestMapping(value = "/{userId:\\d+}", method = RequestMethod.PUT)
-  public void update(@PathVariable Long userId, @RequestBody JSONObject jsonObject) {
-  Author author = this.authorService.findAuthor(userId);
-  String realName = jsonObject.getString("real_name");
-  String nickName = jsonObject.getString("nick_name");
-  author.setRealName(realName);
-  author.setNickName(nickName);
-  try{
-  this.authorService.update(author);
-  }catch(Exception e){
-  e.printStackTrace();
-  throw new RuntimeException("更新错误");
-  }
-  }
-  /**
-  * 删除方法
-  */
-  @RequestMapping(value = "/{userId:\\d+}", method = RequestMethod.DELETE)
-  public void delete(@PathVariable Long userId) {
-  try{
-  this.authorService.delete(userId);
-  }catch(Exception e){
-  throw new RuntimeException("删除错误");
-  }
-  }
- }
总结
上面这个简单的案例,让我们看到了 Spring Boot 整合 MongoDB 的整个流程。实际上,与 Spring 4 中 通过 Spring Data MongoDB 整合 MongoDB 是相同的, Spring Boot 默认集成了一些配置信息,但是个人更加偏向于方案二的手动创建方式,有更好的扩展性。
源代码
相关示例完整代码: springboot-action
(完)
 
Spring Boot 揭秘与实战(二) 数据存储篇 - MongoDB
标签:date   extend   配置   mapping   好的   param   如何使用   href   环境   
原文地址:http://www.cnblogs.com/cnblog-long/p/7238851.html