上期已经了SringBoot快速入门一:
如果想看全部的,可以去看下视频,讲的更为详细:
视频的效果更好,因此视频也安排了。
全部都进行了开源:
1 写个案例
1.1 编写 Controller 内容
@RestController 注解: 该注解是 @Controller 和 @ResponseBody 注解的合体版。
@RequestMapping 注解:访问地址。
@Controller public class StudentController { @Autowired StudentMapper studentMapper; @RequestMapping("/listStudent") public String listStudent(Model model) { List<Student> students = studentMapper.findAll(); model.addAttribute("students", students); return "listStudent"; } }
1.2 启动主程序
打开浏览器访问http://localhost:8080/hello,就可以看到效果了!
注意:我们之所以在上面的项目中没有手动的去配置 Tomcat 服务器,是因为 Spring Boot 内置了 Tomcat
2 解析 Spring Boot项目
2.1 解析pom.xml文件
我们可以看到一个比较陌生一些的标签 <parent> ,这个标签是在配置 Spring Boot 的父级依赖。有了这个,当前的项目才是 Spring Boot 项目,spring-boot-starter-parent 是一个特殊的 starter ,它用来提供相关的 Maven 默认依赖,使用它之后,常用的包依赖就可以省去 version 标签。
2.2 应用入口类
Spring Boot 项目通常有一个名为 *Application 的入口类,入口类里有一个 main 方法, 这个 main 方法其实就是一个标准的 Java 应用的入口方法。
@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.dahaiwuliang.springboot 包)。
3 开发环境的调试
热启动在正常开发项目中已经很常见了吧,虽然平时开发web项目过程中,改动项目启重启总是报错;但springBoot对调试支持很好,修改之后可以实时生效,需要添加以下的配置:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> </dependencies>
该模块在完整的打包环境下运行的时候会被禁用。如果你使用 java -jar启动应用或者用一个特定的 classloader 启动,它会认为这是一个“生产环境”。
使用 Spring Boot 可以非常方便、快速搭建项目,使我们不用关心框架之间的兼容性,适用版本等各种问题,我们想使用任何东西,仅仅添加一个配置就可以,所以使用 Spring Boot 非常适合构建微服务。
4 Spring Boot的配置文件
<dependencies> <dependency> <groupId> org.springframework.boot </groupId> <artifactId> spring-boot-devtools </artifactId> <optional> true </optional> </dependency> </dependencies>
4.1 配置文件基础
Spring Boot 使用一个全局的配置文件 application.properties 或 application.yml,放置在【src/main/resources】目录或者类路径的 /config 下。
Spring Boot 不仅支持常规的 properties 配置文件,还支持 yaml 语言的配置文件。yaml 是以数据为中心的语言,在配置数据的时候具有面向对象的特征。
Spring Boot 的全局配置文件的作用是对一些默认配置的配置值进行修改。
application.properties的配置如下所示:
server.port=8081 server.servlet.context-path=/prop
application.yml的配置如下所示:
server: port: 8082 servlet: context-path: /yml
·注意: yml 需要在 “:” 后加一个空格。
4.2 使用@Value来获取配置属性
server: port: 8080 servlet: context-path: /hello name: springmeng age: 20 controller类中: @Value("${name}") private String name; @Value("${age}") private Integer age; @RequestMapping("/valueMethod") public String value() { return name+age; }
• 注意:我们并没有在 yml 文件中注明属性的类型,而是在使用的时候定义的。
你也可以在配置文件中使用当前配置:
content: "name:${name},age:${age}" controller类中: @Value("${content}") private String content; @RequestMapping("/contentMethod") public String contentMethod() { return content; }
问题: 这样写配置文件繁琐而且可能会造成类的臃肿,因为有许许多多的 @Value 注解。
4.3 封装配置信息
我们可以把配置信息封装成一个类,首先在我们的 name 和 age 前加一个 student 前缀,然后新建一个 StudentProperties 的类用来封装这些信息,并用上两个注解:
@Component:表明当前类是一个 Java Bean
@ConfigurationProperties(prefix = "student"):表示获取前缀为 sutdent 的配置信息。
yml中:
student: name: 小海 age: 19 controller中: @Autowired private StudentProperties studentProperties; @RequestMapping("/studentMethod") public String studentMethod() { return studentProperties.getName()+studentProperties.getAge(); }
5 Spring Boot使用
上面已经完成了 Spring Boot 项目的简单搭建,我们仅仅需要进行一些简单的设置,写一个 HelloController 就能够直接运行了。接下来我们再深入了解一下 Spring Boot 的使用。
5.1 Spring Boot支持JSP
Spring Boot 的默认视图支持是 Thymeleaf 模板引擎,但我们还是想要使用 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/ 目录下:
spring: mvc: view: prefix: /WEB-INF/views/ suffix: .jsp
第三步:新建 JSPController
修改 @RestController 注解为 @Controller ,然后将 hello 方法修改为gotoJSP:
public String gotoJSP (Model m) { m.addAttribute("info", "Spring Boot后台传来的信息"); return "jspPage"; }
第四步:新建 hello.jsp 文件
在【src/main】目录下依次创建 webapp、WEB-INF、views 目录,并创建一个 jspPage.jsp 文件:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> HI,你好。 ${info}
5.2 集成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>
第二步:新增数据库连接参数:
spring: mvc: view: prefix: /WEB-INF/views/ suffix: .jsp datasource: url: jdbc:mysql://127.0.0.1:3306/spring?characterEncoding=UTF-8 username: spring password: spring driver-class-name: com.mysql.jdbc.Driver jpa: hibernate: ddl-auto: update # 新增数据库连接必备的参数
第三步:创建 Student 实体类和 StudentMapper 映射类
在【cn.dahaiwuliang.springboot】下新建一个【pojo】包,然后在其下创建一个 Student 类。
public class Student { private Integer id; private String code; private String sname; private Integer age; …/* getter and setter */ }
在【cn.dahaiwuliang.springboot】下新建一个【mapper】包,然后在其下创建一个 StudentMapper 映射类:
@Mapper public interface StudentMapper { @Select("SELECT * FROM student") List<Student> findAll(); }
第四步:编写 StudentController
在【cn.dahaiwuliang.springboot】下新建一个【controller】包,然后在其下创建一个 StudentController :
/** * Student 控制器 */ @Controller public class StudentController { @Autowired StudentMapper studentMapper; @RequestMapping("/listStudent") public String listStudent(Model model) { List<Student> students = studentMapper.findAll(); model.addAttribute("students", students); return "listStudent"; } }
第五步:编写 listStudent.jsp 文件
我们简化一下 JSP 的文件,仅显示两个字段的数据:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <table align='center' border='1' cellspacing='0'> <tr> <td>id</td> <td>name</td> </tr> <c:forEach items="${students}" var="s" varStatus="st"> <tr> <td>${s.code}</td> <td>${s.sname}</td> </tr> </c:forEach> </table>