本文会练习使用 IDE 建立一个 mongodb 的简单 web 服务,尽量会很详细,做到初次看的也能建立成功。
Java 开发推荐使用 IDE,可以免去你很多麻烦。
第一步,建立你的项目: File->New->Project...,选择 Spring Initializr。
默认点击 Next-> 就好了。
选择依赖,本项目先起一个简单的 mongodb web 服务,所以选择了 web 和 mongodb 的 dependencies,然后点击 next:
最后一步也点击 next 就好。
完成后可以看到此目录结构:
可以看到 com.example.demo 目录下会有一个 DemoApplication.java 的文件, 这个就是整个服务的入口文件。这个文件我们基本不用去碰它做任何改动。
建立一个 web 服务,通常的步骤:第一步是建立路由,第二步是写个 controller,第三步是建立 service,第四步是 service 调用 Dao 层控制 db。
首先直接在 com.example.demo 目录下创建个 controller 文件,java 里面 router 直接可以用注解完成,不用建立一个文件专门存 router 地址。
// AccountController
package com.example.demo;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
@RestController
@RequestMapping("/api/v1")
public class AccountController {
@RequestMapping("/account")
public String account() {
return "hello world";
}
}
这就是一个简单的 web 服务接口。点击 IDE 的启动就可以跑起来。
然后访问以下所写的地址就可以得到返回结果;
在 com.example.demo 目录下创建 AccountRepository.java,引入 Account 类,直接继承 MongoRepository。
// AccountRepository
package com.example.demo;
import java.util.List;
import com.example.demo.Account;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
@RepositoryRestResource
public interface AccountRepository extends MongoRepository<Account, String> {
}
在 com.example.demo 目录下创建 Account.java
// Acount
package com.example.demo;
import org.springframework.data.annotation.Id;
// import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.mapping.Document;
import org.bson.types.ObjectId;
import java.io.Serializable;
@Document(collection = "account")
public class Account implements Serializable {
@Id
private ObjectId _id;
private String realName;
public ObjectId getId() {
return _id;
}
public String getName() {
return realName;
}
public String setName(String realName) {
return this.realName = realName;
}
}
以上就是简单的引用一个 Account Collection 的实现,
最后还要在 application.properties 指定数据库的连接,这个文件放在 resources,一般项目的配置类参数都写在这里。
如果从来没起过一个 mongodb 的话, 先去查查。
spring.data.mongodb.uri=mongodb://localhost:27017/test_invest
在引入了 db 的 collection 之后,controller 可以做更多的东西了。
以下,简单写了个获取 account 这个 collection 内所有 document 的方法, 还有插入一个 account 的方法:
// AccountController
package com.example.demo;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
@RestController
@RequestMapping("/api/v1")
public class AccountController {
@Autowired
AccountRepository accountRepository;
@RequestMapping("/account")
public List<Account> account() {
return accountRepository.findAll();
}
@RequestMapping("/addAccount")
public Account addAccount(@RequestParam String name) {
System.out.println(name);
Account account = new Account();
account.setName(name);
Account result = accountRepository.insert(account);
System.out.println(result);
return result;
}
}
整个项目的目录结构是这样的:
再次运行项目:
以上就已经完整的实现了一个接口服务。
项目 demo 地址:[[https://github.com/yuchenzhen/spring-boot-demo]]
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.