博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springBoot系列(2)整合MongoDB实现增删改查(完整版)
阅读量:4034 次
发布时间:2019-05-24

本文共 5422 字,大约阅读时间需要 18 分钟。

自己本科时候一直使用的是Mysql,目前的课题组使用的是MongoDB,因此就花了一部分时间整理了一下,实现springboot与MongoDB的整合,并且实现基本的增删改查操作,从头到尾给出一个完整的案例。

一、环境配置

对于环境配置我是用了一张表来展示,版本之间差异不大,你可以基于其他版本进行测试。

名称 版本
Idea 2018专业版(已破解)
Maven 4.0.0
SpringBoot 2.1.3
MongoDB 4.0.4
Robo3T(可视化工具) 1.2
jdk 1.8

二、代码整合

我们在这里举的例子是对用户类user的增删改查操作。现在我们先看一下现在的项目结构:

在这里插入图片描述

下面我们就来看一下具体实现步骤。

第一步:在pom中添加依赖

org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-data-mongodb
org.springframework.boot
spring-boot-devtools
true
true
com.alibaba
fastjson
1.2.38
org.springframework.boot
spring-boot-starter-freemarker
org.springframework.boot
spring-boot-starter-test
test

第二步:在pom中启动热部署

org.springframework.boot
spring-boot-maven-plugin
true

第三步:在application.properties文件中添加全局配置信息

##项目配置server.port=8888server.servlet.context-path=/mongotest##mongodb相关配置spring.data.mongodb.database=testspring.data.mongodb.host=127.0.0.1spring.data.mongodb.port=27017

第四步:新建bean包并创建User类

public class User {
private int id; private String name; private String password; //getter和setter方法}

第五步:新建dao包并创建UserRepository接口

public interface UserRepository extends MongoRepository
{
//查询操作,自己定义实现 User getByName(String name); User getByNameLike(String name);}

注意:getByName中的name要和User中的name名字一样,比如这里就不能写成getByUserName,因为匹配的是userName和User中的字段name不同,运行的时候就会出错。

第六步:新建service包并创建UserService接口

public interface UserService {
//增删改查接口 public void saveUser(User user); public void removeUserByUserName(String name); public void updateUser(User user); public User getByUserName(String name); public User getByUserNameLike(String name);}

第七步:在service包创建UserServiceImpl类

@Service//这个标志不要忘记了public class UserServiceImpl implements UserService {
//由于我们添加了依赖,可以使用注解直接注入 @Resource private MongoTemplate mongoTemplate; @Resource private UserRepository userRepository; //保存用户 @Override public void saveUser(User user) {
userRepository.save(user); } //通过用户名字删除 @Override public void removeUserByUserName(String name) {
Query query=new Query(new Criteria("name").is(name)); mongoTemplate.remove(query,User.class); } //通过用户id来更新名字 @Override public void updateUser(User user) {
Query q=new Query(new Criteria("id").is(user.getId())); Update update=new Update().set("name", user.getName()); mongoTemplate.updateMulti(q, update, User.class); } //通过用户名查询 @Override public User getByUserName(String name) {
return userRepository.getByName(name); } //通过相似用户名查询 @Override public User getByUserNameLike(String name) {
return userRepository.getByNameLike(name); }}

在这里你可能有一些疑问,一会使用mongoTemplate,一会又使用userRepository,在每一种情况下到底用哪个,在这里我们就给出一个对比,

(1)使用MongoRepository

使用Repository已经提供了基本的增删改查功能。

对于查询操作:你不用写相关的查询组合语句,它会内部为我们实现这样的一个类。 你只需要按照相关规则就好。

对于增加操作:要有主键才可以,并且不能是date日期类型的。

但是他的缺点是不够灵活,这时候就可以使用MongoTemplate了。

(2)使用MongoTemplate

Spring Data给我们提供了MongoTemplate类,是非常强大的,里面提供了大量的操作数据库的方法,而且是线程安全的。可是它的很多方法都涉及到了Class,和CollectionName。针对不同的实体类,我们需要重复写不同的方法。

第八步:创建controller包并创建Usercontroller类

@RestControllerpublic class UserController {
//注入service @Resource private UserService userService; //多增加几个用户 @RequestMapping("/save") @ResponseBody public String saveUser() {
for(int i=0;i<3;i++){
User user=new User(); user.setId(i); user.setName("fdd"+i); user.setPassword("12345"+i); userService.saveUser(user); } return "插入用户成功"; } //删除fdd0 @RequestMapping("/remove") @ResponseBody public String removeUserByUserName() {
userService.removeUserByUserName("fdd0"); return "删除用户成功"; } //把1号名字改一下 @RequestMapping("/update") @ResponseBody public String updateUser() {
User user=new User(); user.setId(1); user.setName("java的架构师技术栈"); user.setPassword("123456"); userService.updateUser(user); return "更新用户信息成功"; } //通过名字查询 @RequestMapping("/getUserByName") @ResponseBody public User getUserByName() {
User user=userService.getByUserName("fdd2"); return user; } //通过相似名字查询 @RequestMapping("/getUserByNameLike") @ResponseBody public User getUserByNameLike() {
User user=userService.getByUserNameLike("fdd"); return user; }}

到目前为止我们代码就实现完了。

最后一步,那就是测试:

在这里插入图片描述

我们可以在浏览器输入不同的路径测试。当然roto3T也有我们的插入的结果,其他的自己测试一下就好:

在这里插入图片描述

OK,这就是整合的整个过程,在这里其实也只是给出一个基础案例,希望对你有帮助。

欢迎关注微信公众号:java的架构师技术栈,回复关键字可获取各种视频教程和新手到架构师的学习路线。

在这里插入图片描述

转载地址:http://kmbdi.baihongyu.com/

你可能感兴趣的文章
备忘:java中的递归
查看>>
DIV/CSS:一个贴在左上角的标签
查看>>
通过/proc/PID/status查看进程内存占用情况
查看>>
/proc文件系统读出来的数据是最新的吗?
查看>>
Solr及Spring-Data-Solr入门学习
查看>>
Vue组件
查看>>
python_time模块
查看>>
python_configparser(解析ini)
查看>>
selenium学习资料
查看>>
python单元测试unittest学习
查看>>
Errors running builder 'Validation' on project 'jumi_3.0'
查看>>
SpringMVC学习笔记
查看>>
springMVC如何接收前端传递的数组数据
查看>>
查看当前占用端口、关闭当前端口所暂用的进程
查看>>
Eclipse中有用的快捷键
查看>>
mysql将表字段信息拼接转换成实体类中的属性书写格式
查看>>
有return的情况下try catch finally的执行顺序
查看>>
input文本框中value值有双引号的问题
查看>>
java多线程简介
查看>>
web.xml配置加载顺序
查看>>