84366992 发表于 2017-12-16 13:17:01

Spring Boot 揭秘与实战(二) 数据存储篇

  文章目录

[*]1. 环境依赖
[*]2. 数据源
[*]2.1. 方案一 使用 Spring Boot 默认配置
[*]2.2. 方案二 手动创建

[*]3. 使用mongoTemplate操作4. 总结
[*]3.1. 实体对象
[*]3.2. DAO相关
[*]3.3. Service相关
[*]3.4. Controller相关

[*]
[*]5. 源代码
  本文讲解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>
[*]
[*] 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>
[*] @Id
[*] private Long>
[*] private String realName;
[*] private String nickName;
[*] // SET和GET方法
[*]}
DAO相关
  我们通过mongoTemplate进行数据访问操作。

[*]@Repository
[*]public>
[*] @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>
[*] Query query = new Query();
[*] query.addCriteria(Criteria.where("_id").is(id));
[*] this.mongoTemplate.remove(query, Author.class);
[*] }
[*] public Author findAuthor(Long>
[*] 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>
[*] @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>
[*] this.authorDao.delete(id);
[*] }
[*] public Author findAuthor(Long>
[*] return this.authorDao.findAuthor(id);
[*] }
[*] public List<Author> findAuthorList() {
[*] return this.authorDao.findAuthorList();
[*] }
[*]}
Controller相关
  为了展现效果,我们先定义一组简单的 RESTful API 接口进行测试。

[*]@RestController
[*]@RequestMapping(value="/data/mongodb/author")
[*]public>
[*] @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
  (完)
  如果觉得我的文章对你有帮助,请随意打赏。



[*]版权声明:本文由 梁桂钊 发表于 梁桂钊的博客
[*]转载声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证),非商业转载请注明作者及出处,商业转载请联系作者本人。
[*]文章标题:Spring Boot 揭秘与实战(二) 数据存储篇 - MongoDB
[*]文章链接:http://blog.720ui.com/2016/springboot_02_data_mongodb/
页: [1]
查看完整版本: Spring Boot 揭秘与实战(二) 数据存储篇