SpringBoot系列基础入门与MongoDB实现增删改查
connygpt 2024-11-12 10:08 9 浏览
相信你还在为SSM框架繁琐的搭建过程而苦恼,还在为复杂的配置文件而忧心,现在SpringBoot终于来了,它化繁为简,让开发变得极其简单而快速,短短几年时间已经成为了开发的主流框架。作为一个与时俱进的程序员,当然要把握时代的潮流,因此将从这篇文章开始,由基础到进阶,开始对springboot进行一个全面的分析。
一、什么是Springboot
其实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,这就是整合的整个过程,在这里其实也只是给出一个基础案例,希望对你有帮助。
相关推荐
- 3分钟让你的项目支持AI问答模块,完全开源!
-
hello,大家好,我是徐小夕。之前和大家分享了很多可视化,零代码和前端工程化的最佳实践,今天继续分享一下最近开源的Next-Admin的最新更新。最近对这个项目做了一些优化,并集成了大家比较关注...
- 干货|程序员的副业挂,12个平台分享
-
1、D2adminD2Admin是一个完全开源免费的企业中后台产品前端集成方案,使用最新的前端技术栈,小于60kb的本地首屏js加载,已经做好大部分项目前期准备工作,并且带有大量示例代码,助...
- Github标星超200K,这10个可视化面板你知道几个
-
在Github上有很多开源免费的后台控制面板可以选择,但是哪些才是最好、最受欢迎的可视化控制面板呢?今天就和大家推荐Github上10个好看又流行的可视化面板:1.AdminLTEAdminLTE是...
- 开箱即用的炫酷中后台前端开源框架第二篇
-
#头条创作挑战赛#1、SoybeanAdmin(1)介绍:SoybeanAdmin是一个基于Vue3、Vite3、TypeScript、NaiveUI、Pinia和UnoCSS的清新优...
- 搭建React+AntDeign的开发环境和框架
-
搭建React+AntDeign的开发环境和框架随着前端技术的不断发展,React和AntDesign已经成为越来越多Web应用程序的首选开发框架。React是一个用于构建用户界面的JavaScrip...
- 基于.NET 5实现的开源通用权限管理平台
-
??大家好,我是为广大程序员兄弟操碎了心的小编,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标!??今天小编推荐一款基于.NE...
- StreamPark - 大数据流计算引擎
-
使用Docker完成StreamPark的部署??1.基于h2和docker-compose进行StreamPark部署wgethttps://raw.githubusercontent.com/a...
- 教你使用UmiJS框架开发React
-
1、什么是Umi.js?umi,中文可发音为乌米,是一个可插拔的企业级react应用框架。你可以将它简单地理解为一个专注性能的类next.js前端框架,并通过约定、自动生成和解析代码等方式来辅助...
- 简单在线流程图工具在用例设计中的运用
-
敏捷模式下,测试团队的用例逐渐简化以适应快速的发版节奏,大家很早就开始运用思维导图工具比如xmind来编写测试方法、测试点。如今不少已经不少利用开源的思维导图组件(如百度脑图...)来构建测试测试...
- 【开源分享】神奇的大数据实时平台框架,让Flink&Spark开发更简单
-
这是一个神奇的框架,让Flink|Spark开发更简单,一站式大数据实时平台!他就是StreamX!什么是StreamX大数据技术如今发展的如火如荼,已经呈现百花齐放欣欣向荣的景象,实时处理流域...
- 聊聊规则引擎的调研及实现全过程
-
摘要本期主要以规则引擎业务实现为例,陈述在陌生业务前如何进行业务深入、调研、技术选型、设计及实现全过程分析,如果你对规则引擎不感冒、也可以从中了解一些抽象实现过程。诉求从硬件采集到的数据提供的形式多种...
- 【开源推荐】Diboot 2.0.5 发布,自动化开发助理
-
一、前言Diboot2.0.5版本已于近日发布,在此次发布中,我们新增了file-starter组件,完善了iam-starter组件,对core核心进行了相关优化,让devtools也支持对IAM...
- 微软推出Copilot Actions,使用人工智能自动执行重复性任务
-
IT之家11月19日消息,微软在今天举办的Ignite大会上宣布了一系列新功能,旨在进一步提升Microsoft365Copilot的智能化水平。其中最引人注目的是Copilot...
- Electron 使用Selenium和WebDriver
-
本节我们来学习如何在Electron下使用Selenium和WebDriver。SeleniumSelenium是ThoughtWorks提供的一个强大的基于浏览器的开源自动化测试工具...
- Quick 'n Easy Web Builder 11.1.0设计和构建功能齐全的网页的工具
-
一个实用而有效的应用程序,能够让您轻松构建、创建和设计个人的HTML网站。Quick'nEasyWebBuilder是一款全面且轻巧的软件,为用户提供了一种简单的方式来创建、编辑...
- 一周热门
- 最近发表
- 标签列表
-
- kubectlsetimage (56)
- mysqlinsertoverwrite (53)
- addcolumn (54)
- helmpackage (54)
- varchar最长多少 (61)
- 类型断言 (53)
- protoc安装 (56)
- jdk20安装教程 (60)
- rpm2cpio (52)
- 控制台打印 (63)
- 401unauthorized (51)
- vuexstore (68)
- druiddatasource (60)
- 企业微信开发文档 (51)
- rendertexture (51)
- speedphp (52)
- gitcommit-am (68)
- bashecho (64)
- str_to_date函数 (58)
- yum下载包及依赖到本地 (72)
- jstree中文api文档 (59)
- mvnw文件 (58)
- rancher安装 (63)
- nginx开机自启 (53)
- .netcore教程 (53)