余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

SpringBoot系列基础入门与MongoDB实现增删改查

xiyangw 2023-05-13 16:05 12 浏览 0 评论

相信你还在为SSM框架繁琐的搭建过程而苦恼,还在为复杂的配置文件而忧心,现在SpringBoot终于来了,它化繁为简,让开发变得极其简单而快速,短短几年时间已经成为了开发的主流框架。作为一个与时俱进的程序员,当然要把握时代的潮流,因此将从这篇文章开始,由基础到进阶,开始对springboot进行一个全面的分析。

一、什么是Springboot

SpringBoot系列基础入门与MongoDB实现增删改查

其实Springboot是Spring家族中的一个全新的框架,它是用来简单应用程序的创建和开发过程,化繁为简,简化SSM框架的配置。比如说在使用SSM框架开发的时候,我们需要配置web.xml,配置spring,配置mybatis,并将它们整合到一起,而是用Springboot就不同了,它采用了大量的默认配置来简化这些文件的配置过程。我们在百度指数看看这几年springboot和SSM框架的搜索指数:


在2017年下半年,spingboot就是出于一个喷发的状态,因此学习springboot是多么的有必要。

说实话在学习springboot的时候千万不要把他想象的太麻烦,因为它确实太简单,而且也不是什么全新框架,只是把很多其他的框架整合了进来,不需要自己去配置而已。有了这个概念,你就可以带着轻松的心情去学习了。

二、springboot的特点

其实上面已经对其特点进行了一个总结,那就是简化程序搭建过程和开发过程,现在对其细说一下:

(1)可以不使用xml配置文件,全部采用注解的方式开发

(2)能快速构建spring的web程序

(3)可以使用内嵌的Tomcat、jetty等服务器去运行SpringBoot程序

(4)使用maven来配置依赖

(5)可以对程序进行健康检查

(6)等等

既然Springboot这么厉害,我相信你已经迫不及待的想要去看看它到底长什么样了吧,下面我们在我们的开发工具IDEA中创建一个springBoot项目,如果你使用的是eclipse,那么你需要去安装一个spring Tool suite插件就好了

三、创建一个springBoot项目

当然在创建项目之前,我们要先做一些预备工作,开发工具使用IDEA,要提前掌握maven的知识,java版本推荐是8,springboot的版本使用最新的就好了。

由于IDEA工具中封装了Springboot,因此我们可以直接拿来创建,创建的过程我使用了一张gif图来演示一下。如果看不懂配合着图下面的解释多看几遍,自己动一下手基本上就能搞定。


上面的动图已经很详细了,为了你看着混乱,我们再去梳理一下:

第一步:选择 File -> New —> Project

第二步:选择 Spring Initializr—>Next 会出现Idea 帮我们集成好的配置界面,我们在这一步选中java版本、语言等配置信息,接着点击最下面的next。

第三步:Dependencies界面—>web—>选择SpringWebStarter—>finish即可

上面点击finish之后,idea会自动下载和配置,等一会就创建项目成功了,下面我们介绍一下创建好的项目结构:


从上往下我们挨个分析:

(1)Spring Boot 的基础结构共三个文件夹:

  • src/main/java:程序开发文件夹,我们的在这里写程序代码。
  • src/main/resources:配置文件
  • src/test/java:测试程序

(2)src/main/java下的DemoApplication.java

主要作用就是主程序的入口,相当于main函数。

(3)src/main/resources下的static

里面保存了一些配置资源,比如图片等等。

(4)src/main/resources下的application.proties

它是全局配置文件,在这里定义一些接口的端口号等等各种信息。

(5)pom文件

这个文件极其重要,他定义了一些项目的依赖信息,

(6)mvnw和mvnw.cmd

一个是在linux下的shell执行脚本,一个定义了在windows下的bat执行脚本。

(7)其他的不重要我们这里就不说了

到目前为止我们已经能够创建一个项目了,也知道了项目的基本结构,现在我们就来演示一个案例看一下SpringBoot开的便捷性,同时也给出一些必要文件的信息。

四、第一个SpringBoot案例

1、简单小例子

第一步:我们在src/main/java文件夹下建立Controller包,新建HelloWorld类

@RestController

public class HelloWorld {

@RequestMapping("/hello")

public String hello(){

return "Hello World!";

}

}

第二步:点击DemoApplication文件运行

第三步:在浏览器中直接访问


就是这么简单。当我们创建一个web项目之后,写一下controller的短短几行代码,就能直接访问,没有了ssm框架那种繁琐的配置过程了,现在你应该能体验到springboot的快捷性了吧。不过学习知识就是要深入进去。现在我们来分析一下springboot项目的流程。

2、分析小例子

(1)项目入口DemoApplication

首先我们先从项目的入口类DemoApplication说起,它是整个项目的入口,相当于main函数。

@SpringBootApplication

public class DemoApplication {

public static void main(String[] args) {

SpringApplication.run(DemoApplication.class, args);

}

}

在这个类中我们可以看到最上面有一个@SpringBootApplication注解,它就相当于是一个入口的标志。应用程序启动之后看到这个注解就知道这是一个SpringBoot项目

(2)pom.xml文件

如果你是新手,你暂且可以这样理解(其实不是),项目启动demoApplication入口之后,就检查是否包含了必要的依赖。我们给出最核心的一段:

<dependencies>

<!--web项目核心依赖-->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<!--测试依赖-->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<scope>test</scope>

</dependency>

</dependencies>

也就是说我们在pom文件中的dependencies结构下,添加我们所需要的依赖就可以了。

(3)application.properties文件

在上面添加完依赖之后,我们可以在这个文件添加一些配置,比如说我们的8080端口被占用,那么我们修改项目的端口是8888,或者是项目的根目录我们更改成test。

server.port=8888

server.servlet.context-path=/test

我们再去去访问上面的controller的时候就会发生变化了


(4)controller、service等文件

对于我们具体的业务逻辑,我们只需要在相应的文件编码就可以和SSM框架一样。

OK,这就是SpringBoot,用起来超级简单。对于SpringBoot和其他框架的整合文章也将陆续推出,如有问题还请批评指正。

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

一、环境配置

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

名称版本Idea2018专业版(已破解)Maven4.0.0SpringBoot2.1.3MongoDB4.0.4Robo3T(可视化工具)1.2jdk1.8

二、代码整合

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



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

第一步:在pom中添加依赖

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--MongoDB相关依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <scope>true</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.38</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <!--测试依赖,可去掉--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency></dependencies>

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

<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!--如果没有该项配置,devtools不会起作用,应用不会restart --> <fork>true</fork> </configuration> </plugin> </plugins></build>

第三步:在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,Integer> { //查询操作,自己定义实现 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,这就是整合的整个过程,在这里其实也只是给出一个基础案例,希望对你有帮助。

相关推荐

辞旧迎新,新手使用Containerd时的几点须知

相信大家在2020年岁末都被Kubernetes即将抛弃Docker的消息刷屏了。事实上作为接替Docker运行时的Containerd在早在Kubernetes1.7时就能直接与Kubelet集成使...

分布式日志系统ELK+skywalking分布式链路完整搭建流程

开头在分布式系统中,日志跟踪是一件很令程序员头疼的问题,在遇到生产问题时,如果是多节点需要打开多节点服务器去跟踪问题,如果下游也是多节点且调用多个服务,那就更麻烦,再者,如果没有分布式链路,在生产日志...

Linux用户和用户组管理

1、用户账户概述-AAA介绍AAA指的是Authentication、Authorization、Accounting,即认证、授权和审计。?认证:验证用户是否可以获得权限,是3A的第一步,即验证身份...

linux查看最后N条日志

其实很简单,只需要用到tail这个命令tail-100catalina.out输入以上命令,就能列出catalina.out的最后100行。...

解决linux系统日志时间错误的问题

今天发现一台虚拟机下的系统日志:/var/log/messages,文件时间戳不对,跟正常时间差了12个小时。按网上说的执行了servicersyslogrestart重启syslog服务,还是不...

全程软件测试(六十二):软件测试工作如何运用Linux—读书笔记

从事过软件测试的小伙们就会明白会使用Linux是多么重要的一件事,工作时需要用到,面试时会被问到,简历中需要写到。对于软件测试人员来说,不需要你多么熟练使用Linux所有命令,也不需要你对Linux...

Linux运维之为Nginx添加错误日志(error_log)配置

Nginx错误日志信息介绍配置记录Nginx的错误信息是调试Nginx服务的重要手段,属于核心功能模块(nginx_core_module)的参数,该参数名字为error_log,可以放在不同的虚机主...

Linux使用swatchdog实时监控日志文件的变化

1.前言本教程主要讲解在Linux系统中如何使用swatchdog实时监控日志文件的变化。swatchdog(SimpleWATCHDOG)是一个简单的Perl脚本,用于监视类Unix系统(比如...

syslog服务详解

背景:需求来自于一个客户想将服务器的日志转发到自己的日志服务器上,所以希望我们能提供这个转发的功能,同时还要满足syslog协议。1什么是syslog服务1.1syslog标准协议如下图这里的fa...

linux日志文件的管理、备份及日志服务器的搭建

日志文件存放目录:/var/log[root@xinglog]#cd/var/log[root@xinglog]#lsmessages:系统日志secure:登录日志———————————...

运维之日志管理简介

日志简介在运维过程中,日志是必不可少的东西,通过日志可以快速发现问题所在。日志分类日志分类,对不同的日志进行不同维度的分析。操作系统日志操作系统是基础,应用都是在其之上;操作系统日志的分析,可以反馈出...

Apache Log4j 爆核弹级漏洞,Spring Boot 默认日志框架就能完美躲过

这两天沸沸扬扬的Log4j2漏洞门事件炒得热火朝天:突发!ApacheLog4j2报核弹级漏洞。。赶紧修复!!|Java技术栈|Java|SpringBoot|Spring...

Linux服务器存在大量log日志,如何快速定位错误?

来源:blog.csdn.net/nan1996jiang/articlep/details/109550303针对大量log日志快速定位错误地方tail/head简单命令使用:附加针对大量log日志...

Linux中查看日志文件的正确姿势,求你别tail走天下了!

作为一个后端开发工程师,在Linux中查看查看文件内容是基本操作了。尤其是通常要分析日志文件排查问题,那么我们应该如何正确打开日志文件呢?对于我这种小菜鸡来说,第一反应就是cat,tail,vi(或...

分享几款常用的付费日志系统,献给迷茫的你!

概述在前一篇文章中,我们分享了几款免费的日志服务器。他们各有各的特点,但是大家有不同的需求,有时免费的服务器不能满足大家的需要,下面推荐几款付费的日志服务器。1.Nagios日志服务器Nagio...

取消回复欢迎 发表评论: