相信你还在为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入口之后,就检查是否包含了必要的依赖。我们给出最核心的一段:
也就是说我们在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中添加依赖
org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-data-mongodborg.springframework.bootspring-boot-devtoolstruetruecom.alibabafastjson1.2.38org.springframework.bootspring-boot-starter-freemarkerorg.springframework.bootspring-boot-starter-testtest
第二步:在pom中启动热部署
org.springframework.bootspring-boot-maven-plugintrue
第三步:在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类
publicclassUser{privateintid;privateString name;privateString password;//getter和setter方法}
第五步:新建dao包并创建UserRepository接口
publicinterfaceUserRepositoryextendsMongoRepository{//查询操作,自己定义实现 User getByName(String name); User getByNameLike(String name);}
注意:getByName中的name要和User中的name名字一样,比如这里就不能写成getByUserName,因为匹配的是userName和User中的字段name不同,运行的时候就会出错。
第六步:新建service包并创建UserService接口
publicinterfaceUserService{//增删改查接口 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) { Queryq=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) {returnuserRepository.getByName(name); } //通过相似用户名查询 @Override public User getByUserNameLike(String name) {returnuserRepository.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(inti=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");returnuser; } //通过相似名字查询 @RequestMapping("/getUserByNameLike") @ResponseBody public User getUserByNameLike() { User user=userService.getByUserNameLike("fdd");returnuser; }}
到目前为止我们代码就实现完了。
最后一步,那就是测试:
我们可以在浏览器输入不同的路径测试。当然roto3T也有我们的插入的结果,其他的自己测试一下就好:
OK,这就是整合的整个过程,在这里其实也只是给出一个基础案例,希望对你有帮助。
觉得文章不错的小伙伴,可以点赞,收藏,好好学习哈~