大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要为大家展示了Springboot怎么整合MongoDB进行CRUD操作,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。
创新互联公司是一家以成都网站建设公司、网页设计、品牌设计、软件运维、seo优化、小程序App开发等移动开发为一体互联网公司。已累计为格栅板等众行业中小客户提供优质的互联网建站和软件开发服务。
1 简介
Springboot
是最简单的使用Spring
的方式,而MongoDB
是最流行的NOSQL
数据库。两者在分布式、微服务架构中使用率极高,本文将用实例介绍如何在Springboot
中整合MongoDB
的两种方法:MongoRepository
和MongoTemplate
。
代码结构如下:
2 项目准备
2.1 启动MongoDB实例
为了方便,使用Docker
来启动MongoDB
,详细指导文档请参考:基于Docker的MongoDB实现授权访问的方法 ,这里不再赘述。
2.2 引入相关依赖
主要的依赖为Web
和MongoDB
的starter
,把下面代码加入到pom.xml
中即可:
org.springframework.boot spring-boot-starter-data-mongodb org.springframework.boot spring-boot-starter-web
2.3 配置数据库连接信息
与配置MySQL
或Oracle
一样,MongoDB
也需要配置连接信息,配置在application.properties
中如下:
server.port=8080 spring.data.mongodb.authentication-database=admin spring.data.mongodb.database=testdb spring.data.mongodb.username=user spring.data.mongodb.password=123456 spring.data.mongodb.host=localhost spring.data.mongodb.port=27017
2.4 创建数据模型实体
创建User
类如下:
package com.pkslow.mongo.model; import org.springframework.data.annotation.Id; import java.util.Date; public class User { @Id private String userId; private String name; private Integer age; private Date createTime = new Date(); public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } }
不需要在MongoDB
中创建对应的Collections
(表),当通过Web应用新增时会自动创建。
3 方式1:MongoRepository
3.1 定义数据访问层UserRepository
使用过Spring Jpa
的都清楚,Repository
实际就是用于操作数据库的类。在非关系型数据库MongoDB
的整合中,也是一样的。Spring
会帮我们实现好对应接口的方法,开发人员连SQL
都不用写,非常省心。代码如下:
package com.pkslow.mongo.dal; import com.pkslow.mongo.model.User; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.stereotype.Repository; @Repository public interface UserRepository extends MongoRepository{ }
注意MongoRepository
后面接的泛型
第一个为实体类,第二个为主键ID
。
3.2 实现Controller
Controller
比较基础,就不讲解了,常用的注解是必须要掌握的,直接上代码吧:
package com.pkslow.mongo.contrlloer; import com.pkslow.mongo.dal.UserRepository; import com.pkslow.mongo.model.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequestMapping("/user") public class UserController { @Autowired private final UserRepository userRepository; public UserController(UserRepository userRepository) { this.userRepository = userRepository; } @GetMapping("") public ListgetAllUsers() { return userRepository.findAll(); } @GetMapping("/{userId}") public User getByUserId(@PathVariable String userId) { return userRepository.findById(userId).orElse(new User()); } @PostMapping("") public User addNewUser(@RequestBody User user) { return userRepository.save(user); } @DeleteMapping("/{userId}") public String delete(@PathVariable String userId) { User user = new User(); user.setUserId(userId); userRepository.deleteById(userId); return "deleted: " + userId; } @PutMapping("") public User update(@RequestBody User user) { return userRepository.save(user); } }
注意代码没有做异常情况的判断和处理,这里为了快速演示,就先不管了。
3.3 测试
用Postman
测试后,每个接口均调用成功。就不一一截图了。
4 方式2:MongoTemplate
4.1 定义数据访问层UserDAL
先定义接口为:
package com.pkslow.mongo.dal; import com.pkslow.mongo.model.User; import java.util.List; public interface UserDAL { ListfindAll(); User findById(String userId); User save(User user); void deleteById(String userId); }
然后实现该接口如下:
package com.pkslow.mongo.dal; import com.pkslow.mongo.model.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Repository; import java.util.List; @Repository public class UserDALImpl implements UserDAL { @Autowired private MongoTemplate template; @Override public ListfindAll() { return template.findAll(User.class); } @Override public User findById(String userId) { return template.findById(userId,User.class); } @Override public User save(User user) { return template.save(user); } @Override public void deleteById(String userId) { Query query = new Query(); query.addCriteria(Criteria.where("userId").is(userId)); template.remove(query, User.class); } }
4.2 实现另一个Controller
这个Controller
的代码与之前的基本一样,只是数据访问类不一样,代码如下:
package com.pkslow.mongo.contrlloer; import com.pkslow.mongo.dal.UserDAL; import com.pkslow.mongo.model.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequestMapping("/userTemplate") public class UserTemplateController { @Autowired private final UserDAL userDAL; public UserTemplateController(UserDAL userDAL) { this.userDAL = userDAL; } @GetMapping("") public ListgetAllUsers() { return userDAL.findAll(); } @GetMapping("/{userId}") public User getByUserId(@PathVariable String userId) { return userDAL.findById(userId); } @PostMapping("") public User addNewUser(@RequestBody User user) { return userDAL.save(user); } @DeleteMapping("/{userId}") public String delete(@PathVariable String userId) { User user = new User(); user.setUserId(userId); userDAL.deleteById(userId); return "deleted: " + userId; } @PutMapping("") public User update(@RequestBody User user) { return userDAL.save(user); } }
4.3 测试
测试一样也是全部通过:
以上就是关于Springboot怎么整合MongoDB进行CRUD操作的内容,如果你们有学习到知识或者技能,可以把它分享出去让更多的人看到。