Spring-Boot快速搭建web项目详细总结

最近在学习Spring Boot 相关的技术,刚接触就有种相见恨晚的感觉,因为用spring boot进行项目的搭建是在太方便了,我们往往只需要很简单的几步,便可完成一个spring MVC项目的搭建,感觉就是下图:

 好,下面就本人搭建项目的过程简单说说如何快速搭建一个spring MVC项目,相信我,spring-boot这趟车,你上了根本就停不下来了!

下面是这篇博客的主要内容:

1、spring boot 介绍

2、spring boot 项目快速搭建

3、spring-boot中单元测试

4、spring boot 与mybatis 的集成

 

一、初识spring boot

  1、web项目传统的搭建方式

  导入jar包,配置tomcat 的context.xml 、web.xml,配置class path ,启动。我靠,怎么一堆报错?classNotFoundException?尼玛哥不是导入了jar包吗,哦版本不对,那我使用maven管理jar包咯,千辛万苦终于配置好maven 并学会了如何使用,启动也没报错了,但是尼玛已经过去打半天了我都还没有开始正式代码的书写,赶紧开始写业务代码吧,又发现spring 中配置老是尼玛的报错,而我他妈只是想要搞个简单的发邮件功能啊。

  所以说,自己搭建web项目,很多步骤都是重复性的,有没有什么工具可以一步达成啊?我只想快点投入到实际业务开发中去,我再也不想折腾jar包版本问题,再也不想折腾那繁琐的配置过程(虽然这是一个很好的学习过程),那么,spring boot 估计是老铁你不二的选择!

  2、spring boot 是什么?

  什么是spring boot?直接copy官网的介绍:

   原谅我并不咋地的英文,官网说,spring boot 可以让你以一种非常简单的方式构建一个机遇Application 的spring 项目,而你索要做的仅仅是run 这个项目,spring boot  集成了主流的框架,我们构建项目大概只需要两三分钟,spring boot 项目,只需要很少的配置即可。

  用了spring boot 后,你会发现,什么配置问题,什么jar包问题统统没有了,你的生产效力会提高很多,因为,spring boot 已经帮你弄好了一个项目原型,你只需要在这个原型上添加自己的业务代码,自己的service 和dao就万事大吉了!

  spring boot 真的有那么厉害?好,下面就开始进入正题,说说怎么搭建利用spring boot搭建项目。

2、spring boot 项目快速搭建

  1、快速搭建一个spring MVC项目

  来开头来个Hello World先吧,下面紧跟我的步伐,利用spring boot 快速搭建一个MVC项目

  第一步,上官网,进行项目原始jar 包的选取,官网在线搭建地址如下:https://start.spring.io/,看图:

 

  特别说明下:在选择你要的jar 包中,一般包括三部分:web部分--包含 了spring、springboot 等常用的web开发必须jar包;spring提供的工具类部分(devTool),这个用于热部署效果;数据库部分,spring boot自动可以帮你继承各种数据库框架,我这里以mybatis 为演示例子,最后选完jar包的效果如下:

  第二步、下载项目并导入IDE,当然,需要版本管理工具的支持,这里推荐IntelliJ IDEA 开发工具(它简直就是web开发的标配!),具体看下面截图:

  

  解压后得到项目文件,然后,就可以打开我们的IDE,这里已我最爱的IntelliJ  idea为例子

  打开idea,找到file-->open-->选择项目的路径,找打pom文件-->以project 形式打开

 

   第三步、hello spring项目 大概长什么样子?打开项目之后,maven 会加载必须的jar包,这段时间,你可以去喝杯香醇的龙井茶或者咖啡,当项目构建完成之后,你会看到下面这样的典型maven目录结构:

  具体各个目录放什么,请参考截图,这里补充说明的是,HelloSpringbootApplication是整个项目的入口,我们启动项目不再是启动tomcat,而是运行这个类,这个类的main方法就是整个项目的main方法即执行入口,

  第四步,写hello demo了。新建一个package demo,然后新建一个类HelloSpringBoot,写入以下代码

@RestController
public class HelloSpringBoot {
    @RequestMapping(path = {"/helloSpringBoot"})
    public String HelloSpring (){
        System.out.println("hello spring boot");
        return "hello spring boot";
    }
}

  我们先不解释这个类里面的东西,先配置并启动网站,初步感受下spring boot的魔力:

  在启动网站前,由于spring boot 是默认自动注册加载数据库相关的类文件的,所以为了不报错,我们需要打开数据库并在resource目录下的application.property中加入数据库配置相关文件,这里以mysql为例子,配置文件如下:

  

spring.datasource.url=jdbc:mysql://localhost:3306/wenda?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

  配置文件中各个字段含义估计读者也能看懂,后面会再具体说明。

  当然,如果没有安装数据库,读者也可以在HelloSpringbootApplication 类中利用exclude属性声明不自动注册加载数据库相关文件,具体参考下面的代码:

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,MybatisAutoConfiguration.class})//这里的MybatisAutoConfiguration.class对应你的数据库框架
public class HelloSpringbootApplication {

    public static void main(String[] args) {
        SpringApplication.run(HelloSpringbootApplication.class, args);
    }
}

  然后,我们所有的工作就完成了,可以启动网站了,见证奇迹的时候到了。

  找到 HelloSpringbootApplication类,双击打卡,右击鼠标,run,然后项目就启动了。

 

  启动网站之后,输入http://localhost:8080/helloSpringBoot即可访问对应的方法。浏览器以及idea后台效果如图

  

  这里简单解释下这个类里面的东西的含义:

  首先是@RestController这个注解:用过spring的大佬估计知道是什么东西,当我们其他类要通过spring引用该类时,第一步就是要将该类注册到spring中,@RestController就是相当于将这个类注册到spring容器的意思当然,还有一种比较常用的就是@Controller,具体他们两区别后面再讨论吧。

  然后就是@RequestMapping,通过设置这个注解里面面的path属性,就可以声明相对于项目根路径(localhost:8080)的访问路径。

  

  2、spring boot 项目中利用springMVC实现传参

  上面的demo中的方法只是一个非常简单的实例,在实际生产中, 我们的应用不可能这么简单的,前端还需要传输参数到后台,所以,用spring boot 构造的项目中,又如何实现传参呢?(感觉下面的都是在总结sprign MVC相关的内内容了,所以大神勿喷我脱离主题,因为感觉spring boot 如果单独总结的话,貌似的确没什么好总结的,而且spring boot 天生就不可能和其他spring 组件分割)具体请参开下面代码例子:

@RestController
public class HelloSpringBoot {/**
     * url传参,访问的路径类似这样:localhost:8080/getParamDemo1/1
     * 方法体中的参数要在前面加注释,@PathVariable,代表url中的参数
     */
    @RequestMapping(path = {"/getParamDemo1/{id}"})
    public String getParamDemo1 (@PathVariable("id") int userId){
        System.out.println("get param " + userId);
        return "success get param";
    }
    /**
     * 当然,你也可以通过这种传参方式:localhost:8080/getParamDemo?param1=1或者直接表单提交参数
     * 当然,同时方法中参数声明的注释也要变成@RequestParam,代表请求参数,required属性说明了参数是否是必须的
     */
    @RequestMapping(path = {"/getParamDemo2"})
    public String getParamDemo2 (@RequestParam(value="param1",required = false) int param){
        System.out.println("get param " + param);
        return "success get param";
    }
}

  

  3、构建restful编程风格

   最近,resultful风格编程挺火的(虽然个人觉得不可盲目跟风),而spring boot中利用其内置的spring MVC等框架,可以非常简单地实现这种编程风格。

  例如说,我要请求查询一个数据,在resultful类的编程风格中,查询对应的是get请求,那么,spring boot(准确说是spring MVC) 可以针对不同的请求进行处理,请看下面代码:

@RestController
public class HelloSpringBoot {

    /**
     * 通过设置RequestMapping的method属性便可以设置该方法可处理的对应请求了,例如下面的getRequestDemo方法只会处理get请求
     */
    @RequestMapping(path = {"/getRequestDemo"},method = RequestMethod.GET)
    public String getRequestDemo (@RequestParam(value="param1",required = false) int param){
        System.out.println("get request test ,get param " + param);
        return "success get param";
    }
    /**
     * 下面的deleteRequestDemo方法只会处理delete请求
     */
    @RequestMapping(path = {"/deleteRequestDemo"},method = RequestMethod.DELETE)
    public String deleteRequestDemo (@RequestParam(value="param1",required = false) int param){
        System.out.println("delete request test ,get param " + param);
        return "success get param";
    }
}

  另外,利用上面说的url中的值(类似这个:path="/member/{userid}")进行资源定位,也非常符合resultful的风格要求,例如这path="/getParamDemo1/{userid}"的配置就是对应的就是对会员级别的某个用户(由userid定位)进行某些操作,如果要删除该用户,则对应http请求的delete请求即可。

  通过上面的那些步骤,估计读者对于如何用spring boot 进行一个简单的web项目快速搭建已经清楚了,下面在spring boot搭建的项目中如何进行单元测试。

 

三、spring boot 项目中的单元测试问题

  spring boot 中集成了junite框架,对于单元测试,也不用写各种繁琐的类了,只需要对测试类进行一定的注释,spring boot 便会帮你做好一切,就算是数据库相关的操作,spring boot 也能很好地进行测试,具体还是看代码例子,下面是一个简单的测试业务类方法的例子:

  首先,我们新建一个service 层,新增一个demo类,最后的demo代码如下:

@Component
public class ServiceDemo {
    public String testDemo(){
        String rtnAfterDosomething = "我是返回结果";
        //这里是业务代码
        return rtnAfterDosomething;
    }
}

  下面的代码是测试类

@RunWith(SpringRunner.class)
@SpringBootTest
public class ServiceDemoTest {
    @Autowired
    ServiceDemo serviceDemo;
    @Test
    public void testDemo() {
        String rtn = serviceDemo.testDemo();
        Assert.assertEquals(rtn, "我是返回结果");
    }

}

  如果要测试数据库dao,也是类似的,但是特别注意的是,测试之前必须启动项目(即HelloSpringbootApplication的run方法必须运行起来),否则将会包can not find ApplicationContext的错误。

 

四、spring boot中配置数据库框架(以mybatis为例子)

  在spring boot中集成数据库相关的开源框架也是很方便的(当然,记得在一开始新建项目的时候引用相关的jar包),当你上面的步骤都没什么错误的时候,你只需要简单地配置下applocation.properties文件即可

spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
#下面这条配置声明了mybatis的配置文件路径,classpath对应的是和这个文件统计的resources
mybatis.config-location=classpath:mybatis-config.xml

  目录的文件结构参考下面截图:

  ok,mybatis 的引用配置便弄好了,下面我们尝试利用mybatis 这个数据库框架,进行一个数据库的简单查询操作,首先,看下面的mybatis-config.xml的配置内容,读者可以以这个为模板进行配置,当然,想了解更具体的mybatis配置说明,建议去官网看看,这里不展开了:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <settings>
        <!-- Globally enables or disables any caches configured in any mapper under this configuration -->
        <setting name="cacheEnabled" value="true"/>
        <!-- Sets the number of seconds the driver will wait for a response from the database -->
        <setting name="defaultStatementTimeout" value="3000"/>
        <!-- Enables automatic mapping from classic database column names A_COLUMN to camel case classic Java property names aColumn -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!-- Allows JDBC support for generated keys. A compatible driver is required.
        This setting     forces generated keys to be used if set to true,
         as some drivers deny compatibility but still work -->
        <setting name="useGeneratedKeys" value="true"/>
    </settings>

    <!-- Continue going here -->

</configuration>

  恩,然后,就可以进行数据库的操作了,我简单用mysql建了个名字为springboot的数据库,在库里面建了一个简单的demo表(具体怎么建表那些不用我说了吧?实在没有接触过数据库的同学,可以自行百度或者谷歌去咯),然后,dao代码如下:

@Mapper
public interface DemoDao {
    @Select({"select demo_param from  demo "})
    String queryDemo();
}

  注意,mybatis 的dao是一个接口,关于mybatis更多的内容,请读者参开官方文档,这里不展开了。

  然后,就在原来的ServiceDemo类中调用一下吧,代码看下图吧:

  

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import springboot.hello.helloSpringboot.dao.DemoDao;

@Component
public class ServiceDemo {
    @Autowired
    DemoDao demoDao;
    public String testDemo(){
        String rtnAfterDosomething = "我是返回结果";
        //这里是业务代码
        return rtnAfterDosomething;
    }
    public String queryDemo(){
        return demoDao.queryDemo();
    }
}

  ok,简单写个测试类,出现小绿条,测试成功。

 

  然后,所有项目原型的工作完成了,然后,我们就可以进行我们核心业务开发了,很快有没有?很爽有木有?所以说,spring boot 搭建项目的确飞快,可以让我们省去很多机械的前期操作,读者们赶紧去探索下吧,spring boot ,你值得捅有!

  OK,今天总结到这里,这个项目的代码在gitHub上这个地址,需要的人自取:https://github.com/lcpandcode/helloSpringboot.git

  最后说一遍,spring boot ,用得真他妈爽!赶紧来吧!

 

posted @ 2017-08-21 19:35  CoderLcp  阅读(103530)  评论(0编辑  收藏  举报