spring boot

一、介绍

        spring boot并不是一个全新的框架,它被设计的目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使

用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。换句话说,spring boot 其实是默认配置了很

多框架的使用方式(减少你的配置),就像maven整合了所有的jar包一样。从而可以让项目快速跑起来

特点:

        以ssm项目为例,其搭建过程还是比较繁琐的,配置文件如下:

        ① 配置web.xml,加载spring和spring mvc

        ② 配置数据库连接、配置日志文件

        ③ 配置加载配置文件的读取,开启注解

        ④ 配置mapper文件

         ......

         而使用spring boot来开发项目则只需要非常少的几个配置就可以搭建起来一个web项目,并利用idea可以自动生成。

         ① 简单、快速、方便地搭建项目

         ② 对主流开发框架的无配置集成

         ③ 极大地提高了开发、部署效率

二、spring boot 项目搭建(maven构建)

1.访问http://start.spring.io/

2.选择构建工具Maven Project、Spring boot版本2.1.1(有多个版本,这里默认选最新版本)以及一些工程基本信息,点击

  “Switch to the full version.”java版本选择1.8(1.7也可以)并点击Generate Project下载项目压缩包。

 

3.解压之后将项目导入进来

   在eclipse中右键Import -> Existing Maven Projects -> Next ->选择解压后的文件夹-> Finsh

  

  Spring Boot的基础结构共三个文件:

      ① src/main/java 程序开发以及主程序入口

           SpringbootApplication:默认生成的一个带有main()方法的类,用于启动应用程序

      ②src/main/resources 配置文件

           application.properties:一个空的 properties 文件,可以根据需要添加配置属性

      ③src/test/java  测试程序

           SpringbootApplication:默认生成的一个空的 Junit 测试,它加载了一个使用 Spring Boot 字典配置功能的

                                               Spring 应用程序上下文。

  Sping boot建议的目录结果如下:

      root package结构:com.example.myproject    //myproject为自定义的项目名

com
  +- example
    +- myproject  //自定义的项目名
      +- Application.java               //建议放到根目录下,主要是做一些框架配置
      |
      +- domain                         //目录主要用于实体(Entity)与数据访问层(Repository)
      |  +- Customer.java
      |  +- CustomerRepository.java
      |
      +- service                        //层主要是业务类代码
      |  +- CustomerService.java
      |
      +- controller                     //负责页面访问控制
      |  +- CustomerController.java
      |

   以上是采用默认配置可以省去很多配置,也可根据个人喜好进行重新配置。项目的底层创建已经完成了,最后,启动 
   Application main方法,项目就启动了。后面步骤是该项目的完善。

4. 引入web模块

    1.pom.xml中添加支持web的模块:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
 </dependency>

      pom.xml文件中默认有两个模块:

          ① spring-boot-starter:核心模块,包括自动配置支持、日志和YAML。

          spring-boot-starter-test:测试模块,包括JUnit、Hamcrest、Mockito。

    2.编写controller

package com.example.springboot.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController  //该注解意为controller里面的方法都以json格式输出,不用再写什么jackjson的配置。
                 // @RestController是@Controller 和 @ResponseBody 注解的合体版
public class UserController {
	
	@RequestMapping("/name")
	public String name() {
		return "石破天";   //输出的数据
	}

}

    3.在地址栏中输出 localhost:8080/name

 

      

三、解析 Spring Boot 项目

1.解析 pom.xml 文件

   parent标签 :配置spring boot的父级依赖

  有了这个,当前的项目才是 Spring Boot 项目,spring-boot-starter-parent 是一个特殊的 starter ,它用来提

  供相关的 Maven 默认依赖,使用它之后,常用的包依赖就可以省去 version 标签。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

  Spring Boot 提供了哪些 jar 包的依赖,我们可以查看本地 Maven 仓库下:

  \repository\org\springframework\boot\spring-boot-dependencies\2.0.1.RELEASE\spring-boot-dependencies-
  2.0.1.RELEASE.pom 文件来查看。

2.应用入口类

   Spring Boot 项目通常有一个名为 *Application 的入口类,入口类里有一个 main 方法, 这个 main 方法其实就

   是一个标准的 Javay 应用的入口方法。

   @SpringBootApplication 是 Spring Boot 的核心注解,它是一个组合注解,该注解组合了:

   @Configuration、@EnableAutoConfiguration、 @ComponentScan;

    若不是用 @SpringBootApplication 注解也可以使用这三个注解代替。

   @EnableAutoConfiguration:让 Spring Boot 根据类路径中的 jar 包依赖为当前项目进行自动配置,例如,添加

                                                   了 spring-boot-starter-web 依赖,会自动添加 Tomcat 和 Spring MVC 的依赖,那

                                                   么Spring Boot 会对 Tomcat 和 Spring MVC 进行自动配置。

     Spring Boot 还会自动扫描 @SpringBootApplication 所在类的同级包以及下级包里的 Bean ,所以入口类建

     议就配置在 grounpID + arctifactID 组合的包名下(这里为 cn.wmyskxz.springboot 包)。

3.Spring Boot 的配置文件

    Spring Boot 使用一个全局的配置文件 application.properties 或 application.yml(需要安装YEdit插件),放置在

  【src/main/resources】目录或者类路径的 /config 下。

    Spring Boot 不仅支持常规的 properties 配置文件,还支持 yaml 语言的配置文件。yaml 是以数据为中心的语言,

    在配置数据的时候具有面向对象的特征。

    Spring Boot 的全局配置文件的作用是对一些默认配置的配置值进行修改。

    示例:

     

   我们同样的将 Tomcat 默认端口设置为 8080 ,并将默认的访问路径从 “/” 修改为 “/name” 时,使用 properties

   文件和 yml 文件(yml 需要在 “:” 后加一个空格)的区别如上图。

   ①我们可以自己配置多个属性:

       我们使用 .yml 文件来进行简单的配置,然后使用 @Value 来获取配置属性:

         

      注意如果$中的属性不加上server.,会报:Could not resolve placeholder 'xxxx' in value "${xxxx}"

      重启 Spring Boot ,输入地址:localhost:8080/name,结果如下:

     

  ②也可以在配置文件中使用当前配置:

     

      其结果如下:

     

    ③上面方式写配置文件繁琐而且可能会造成类的臃肿,因为有许许多多的 @Value 注解。

       所以可以用封装配置:

      

       

      

      其结果如下:

     

 

4.spring boot 热部署

在上面的 Spring Boot 项目中,当发生了任何修改之后都需要重新启动才能够正确的得到效果,而Spring Boot 提

供了热部署的方式,当发现任何类发生了改变,就会通过 JVM 类加载的方式,加载最新的类到虚拟机中,这样就

不需要重新启动也能看到修改后的效果了。

只需要在pom.xml中加入以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
</dependency>

正常启动保存修改之前:

保存修改之后:

 

 

5.单元测试的使用

   测试入口在 src/test/下,编写简单的http请求来测试;使用mockmvc进行,利用MockMvcResultHandlers.print()

   打印出执行结果,如下:

@RunWith(SpringRunner.class)
  @SpringBootTest
public class UserControlerTests {
    private MockMvc mvc;
    @Before
    public void setUp() throws Exception {
        mvc = MockMvcBuilders.standaloneSetup(new UserController()).build();
    }
    @Test
    public void getName() throws Exception {
    mvc.perform(MockMvcRequestBuilders.get("/name").accept(MediaType.APPLICATION_JSON))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andDo(MockMvcResultHandlers.print())
                .andReturn();
    }
}

6 开发环境的调试

   热启动在正常开发项目中已经很常见了吧,虽然平时开发web项目过程中,改动项目启重启总是报错;但

   springBoot对调试支持很好,修改之后可以实时生效,需要添加以下的配置:

<!--在该信息中,加入的部分是加入头注释的,其他部分已经存在不需要添加-->
<dependencies>
    <!--增加热部署相关包的依赖配置-->
    <dependency>

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

        <artifactId>spring-boot-devtools</artifactId>

        <optional>true</optional>

   </dependency>

</dependencies>

<build>

    <plugins>

        <plugin>

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

            <artifactId>spring-boot-maven-plugin</artifactId>
            
       <!--增加configuration-->
            <configuration>

                <fork>true</fork>

            </configuration>

        </plugin>

   </plugins>

</build>

该模块在完整的打包环境下运行的时候会被禁用。如果你使用java -jar启动应用或者用一个特定的classloader

启动,它会认为这是一个“生产环境”。

7.Spring Boot 支持 JSP

    Spring Boot 的默认视图支持是 Thymeleaf 模板引擎,但是一般常用的引擎是jsp,这也是大部分人熟悉的,如

    果想换成jsp,具体操作如下:

    ① 在pom.xml中增加对jsp的支持:

<!-- servlet依赖. -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>

<!-- tomcat的支持.-->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>

    ② 配置试图重定向 JSP 文件的位置:

       修改 application.yml 文件,将我们的 JSP 文件重定向到 /WEB-INF/views/ 目录(手动创建)下:

     

   ③修改 UserController

      修改 @RestController 注解为 @Controller ,然后将 name方法修改为:

     

  ④创建 .jsp文件

      在【src/main】目录下依次创建 webapp、WEB-INF、views 目录,并创建一个 name.jsp 文件:

     

  ⑤重启访问

     虽然说已经配置了热部署,但是在之后不断地创建了文件夹,可能自动重启的时候并没有加载进去,导致在

     跳转页面时出现了404。结果如下:

    

8.集成 MyBatis

  ① 在pom.xml中添加MySql和 MyBatis的支持

 <!-- mybatis -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.1.1</version>
</dependency>
<!-- mysql -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.21</version>
</dependency>

  ②新增数据库链接参数

#注释用#表示
#.yml文件对格式有要求:1.‘:’后如果有内容,必须加上一个空格  2.路径级别关系,同一级别缩紧空格相同,子目录时,父路径的‘:’后面是空的表示这是文件夹名,有内容说明这属于属性
#如果不遵循以上规则,可能在读取配置时失败
spring:
 mvc:
   view:
     prefix: /WEB-INF/views/
     suffix: .jsp
 datasource:
   url: jdbc:mysql://127.0.0.1:3306/springboot?characterEncoding=UTF-8
   username: root
   password: admin
   driver-class-name: com.mysql.jdbc.Driver
   jpa:
    hibernate:
        ddl-auto: update  #新增数据链接必备的参数

  ③创建实体类user以及映射类UserMapper

     在com.example.springboot目录下新建一个pojo包,存放新建的实体类User(不贴代码了)

     在com.example.springboot目录下新建一个mapper包,存放持久层的映射类

     注解形式:

     映射类 UserMapper

package com.example.springboot.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import com.example.springboot.pojo.User;
/**
 *这里用的是注解的形式建立映射关系,没有使用xml配置
 */
@Mapper
public interface UserMapper {
        
	@Select("select * from  user")
	List<User> findAll();
	
	@Insert("insert into user(name,age)values(#{name},#{age})")
	void insertUser(User user);
	
}

  xml配置形式:

     映射类 UserMapper:去掉接口方法中的注解,编写映射文件userMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 根节点:对应接口 -->
<!-- 为mapper指定唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,可保证唯一性 -->
<!-- 这里namespace必须是UserMapper接口的路径,不然运行的时候要报错 “is not known to the MapperRegistry” -->
<mapper namespace="com.springboot.mapper.UserMapper">
   <!--子节点:对应接口中的方法,id对应方法名,parameterType对应入参数类型,可以用数据类型、全限名或者别名表示  -->
   
   <insert id="insertUser"  parameterType="com.springboot.entity.User" >
       <!-- 这里sql结尾不能加分号,否则报“ORA-00911”的错误 -->
           insert into user(name,age) values(#{name},#{age})
    </insert>

    
    <!-- 这里的id必须和UserMapper接口中的接口方法名相同,不然运行的时候也要报错 -->
    <!-- 必须要加入resultType或者resultMap,否则会报错 -->
    <select id="getUser" resultType="com.springboot.entity.User"  parameterType="java.lang.String">
       select * from user
    </select>
     
</mapper>

    在application.yml中加上以下配置信息:

mybatis:
  #指定映射文件的路径
  mapper-locations: classpath:mapper/*.xml
   #对应实体类的路径
  type-aliases-package: com.springboot.pojo

④编写UserController

 在com.springboot.controller中创建UserController

package com.example.springboot.controller;

import java.text.DateFormat;
import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.example.springboot.mapper.UserMapper;
import com.example.springboot.pojo.User;

@Controller   //注意Controller与RestController的区别

//这里没有编写service,实际项目需要增加
public class UserController {
	
	@Autowired
	private UserMapper userMapper;
	
	@RequestMapping("/getalluser")
	public String getAllUser(Model m) {
		System.out.println("hahahh");
		   List<User> userList =userMapper.findAll();
		   m.addAttribute("userList", userList);
		return  "showUser";
	}
	
	@RequestMapping("/insertuser")
	public String insertUser() {
		User u = new User();
		u.setName("石破天");
		u.setAge(25);
		userMapper.insertUser(u);
	    
		return "redirect:/getalluser";
	}

}

⑤编写jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head></head>

<body>
<table align='left' border='1' cellspacing='0'>
    <tr>
        <td>编号</td>
        <td>姓名</td>
        <td>年龄</td>
    </tr>
    <c:forEach items="${userList}" var="u" varStatus="st">
        <tr>
            <td>${u.id}</td>
            <td>${u.name}</td>
            <td>${u.age}</td>
        </tr>
    </c:forEach>
</table>
</body>
</html>

⑥重启访问,结果如下:

 

  注意:热部署对pom.xml的修改以及Java文件夹的增加无效,所以这些都需要手动重启。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值