一、基础理论
1、产生背景
SSM开发web应用配置复杂,springboot极大地简化了配置,让开发人员更多关注与业务逻辑的实现。
2、Springboot特性
A。能够快速创建基于spring的应用程序。
B。java main方法可启动内嵌的tomcat服务器来运行springboot程序,不需要部署war包文件。
C。起步依赖简化maven配置。
D。根据maven依赖自动配置spring、springmvc。
E。完全弃用XML配置,采用注解配置。
3、Springboot四大核心
自动配置:自动配置spring、springmvc。
起步依赖:起简化maven配置。
Actutor:健康检查,检测程序运行状况,一般用不到。
命令化界面:一般也用不到。
一般只用得到前两种。
4、springboot零碎知识点
resources目录下:
static:存放图片、js、cs等静态资源。
templates:存放前端模板。
application.properties:springboot核心配置文件。
SpringBootApplication:
springboot项目入口类中的核心注解,没有该注解,该入口类就是普通的java类。
注意:
springboot项目的所有代码类必须在入口类同级或下一级的目录位置。
5、springboot核心配置文件
可以是*.properties文件,也可以是*.yml(*.ymal)文件,都是键值对形式
两个同时存在,以*.properties为准
*.yml虽然也是键值对形式,但是书写格式还是有不同的,用到的时候百度
配置文件常用做法:
application-dev.properties:开发环境配置文件
application-tes.properties:测试环境配置文件
application-pro.properties:生产环境配置文件
然后在application.properties中设置:
spring.profiles.active=dev //表明当前生效的是开发环境的配置文件
6、自定义配置
A、将自定义配置映射到属性
aplication.properties中:
#自定义配置,将配置的属性自动注入到属性中
name=lily
age=18
代码中:
@Value("${name}") //自动注入配置文件的中name的值
private String name;
@Value("${age}") //自动注入配置文件的中age的值
private int age;
//获取自动注入的属性值,打印在前台
@RequestMapping(value="intro")
@ResponseBody
public String intro(){
return "I'm "+name+","+age+" years old!!";
}
B、将自定义配置映射到对象
aplication.properties中:
#自定义配置,将配置的对象属性自动注入到属性中
school.name=CAUC
school.address=Tianjin
对应配置类:
@Component //将此类交给Spring容器进行管理,方便诸如对象
@ConfigurationProperties(prefix = "school") //本类只读取配置文件中前缀为school的属性
public class School {
private String name;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
代码中:
@Autowired //自动注入对象
private School school;
//获取自动注入的对象的属性值,打印在前台
@RequestMapping(value="intro2")
@ResponseBody
public String intro2(){
return school.getName()+" is a university in "+school.getAddress();
}
7、注意事项
ConfigurationProperties警告:
在使用@ConfigurationProperties注解时,会报一个警告:
Spring Boot Configuration Annotation Processor not Configured。算该警告不影响运行,但看着烦,如何解决??
解决方式,在pom.xml文件中添加如下依赖即可:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
application.properties中文乱码问题 :
见图片A
二、Springboot集成jsp
1、前置设置:
main-->new-->directory-->webapp(创建web资源文件夹)
file-->project structure-->modules-->找到该项目-->web-->将刚刚创建的webapp设置为web资源文件路径
具体见图B
2、添加jsp依赖
<!--引入springboot内嵌tomcat对jsp的解析依赖,不引入不能解析jsp-->
<!--如果要使用jstl\el还需要引入其他的依赖才行-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
3、指定jsp文件编译路径
在<build>标签中添加:
<!--执行jsp文件编译路径-->
<resources>
<resource>
<!--源文件夹-->
<directory>src/main/webapp</directory>
<!--目标文件夹-->
<targetPath>META-INF/resources</targetPath>
<includes>
<!--源文件夹所有内容均要被编译-->
<include>*.*</include>
</includes>
</resource>
</resources>
4、设置SpringMC的视图解析器
在web项目的目录中,只有web-inf是对外不可见的,为了安全性,我们需要将所有静态资源放在web-inf
目录下,然后以请求转发的方式跳转到目标资源。但是浏览器访问还是紧接着的请求转发跳转web-inf目录下的
资源时,路径太长,故需要配置视图解析器定义前后缀来简化书写。
aplication.properties中:
#配置springmvc的视图解析器
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp
webapp/show1.jsp文件:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>show1.jsp</title>
</head>
<body>
<H1>${message}</H1>
</body>
webapp/show2.jsp文件:
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>show2.jsp</title>
</head>
<body>
<H1>${message}</H1>
</body>
</html>
代码中:
/*
视图解析器
*/
@RequestMapping(value="show1")
public ModelAndView show1(){//ModelAndView可以返回一个jsp页面,且可用来设置jsp内容
ModelAndView model=new ModelAndView();
model.addObject("message","hello,springboot");
model.setViewName("show1");
return model;
}
@RequestMapping(value="show2")
public String show2(Model model){
model.addAttribute("message","hello2,springboot");
return "show2";
}
三、springboot集成mybatis
1、修改pom.xml文件
<!--集成mybatis,需要添加mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--springboot集成mybatis的起步依赖,版本号自己加-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
2、利用mybatis的逆向工程对单表生成实体bean、映射文件、mapper接口
在项目根目录新建文件GeneratorMapper.xml,添加如下内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<!--dtd文件报红没关系-->
<generatorConfiguration>
<!-- 指定连接数据库的JDBC驱动包所在位置,指定到你本机的完整路径 -->
<classPathEntry location="G:\SoftwareInstall\maven\apache-maven-3.3.9\repository\mysql-connector-java-5.1.38.jar"/>
<!-- 配置table表信息内容体,targetRuntime指定采用MyBatis3的版本 -->
<context id="tables" targetRuntime="MyBatis3">
<!-- 抑制生成注释,由于生成的注释都是英文的,可以不让它生成 -->
<commentGenerator>
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!-- 配置数据库连接信息 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/d_student"
userId="root"
password="123456">
</jdbcConnection>
<!--三个重要的生成器-->
<!-- 生成model类(实体类),targetPackage指定model类的包名, targetProject指定生成的model放在eclipse的哪个工程下面-->
<javaModelGenerator targetPackage="com.farben.springboot.model" targetProject="src/main/java">
<property name="enableSubPackages" value="false" />
<property name="trimStrings" value="false" />
</javaModelGenerator>
<!-- 生成MyBatis的Mapper.xml文件,targetPackage指定mapper.xml文件的包名, targetProject指定生成的mapper.xml放在eclipse的哪个工程下面 -->
<sqlMapGenerator targetPackage="com.farben.springboot.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- 生成MyBatis的Mapper接口类文件,targetPackage指定Mapper接口类的包名, targetProject指定生成的Mapper接口放在eclipse的哪个工程下面 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.farben.springboot.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!--表名和实体类名 -->
<table tableName="t_student"
domainObjectName="Student"
enableCountByExample="false"
enableUpdateByExample="