一、创建一个springboot web项目
二、核心配置文件.yml与 .proprties文件
核心配置文件必须命名application
application.yml(或yaml)文件与application.proprties文件二选一,只有展现方式不一样
两个文件同时存在时,proporties文件优先级更高
#application.proprties文件必须为该名字与格式
server.port = ...
server.servlet.context-path = ...
application.yml文件格式
server:
port: ...
servlet:
context-path: ...
三、多环境下的核心配置文件的使用
开发环境,测试环境,准生产环境,生产环境等
为每个环境各编写一个配置文件
名称格式:application-任意名称.proporties(或.yml和.yaml)
在主配置文件中声明要使用的配置文件
spring.profiles.active = 配置文件名称中-后面的名称
spring:
profiles:
active: 配置文件名称中-后面的名称
四、springboot 在核心配置文件application.proporties自定义配置
变量名=变量值
@Value("${变量名}")
定义变量
将自定义配置集成到对象
对象名.变量名1=...
对象名.变量名2=...
@Component//将此类交给spring容器管理
@ConfigurationProporties(prefix="对象名")
五、springboot集成jsp
如何下载依赖到maven仓库中?
六、集成MyBatis
1.添加MyBatis依赖,MySQL驱动
<!--Mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--mybatis整合springboot框架起步依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
2.使用mybatis提供的逆向工程生成实体bean,映射文件,dao接口
<?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">
<generatorConfiguration>
<!-- 指定连接数据库的 JDBC 驱动包所在位置,指定到你本机的完整路径 -->
<classPathEntry location="D:\maven\apache-maven-3.8.4\mysql\mysql-connector-java\8.0.27\mysql-connector-java-8.0.27.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/springboot"
userId="root"
password="1234">
</jdbcConnection>
<!-- 生成 model 类,targetPackage 指定 model 类的包名, targetProject 指定
生成的 model 放在 eclipse 的哪个工程下面-->
<javaModelGenerator targetPackage="com.example.model1"
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.example.mapper1"
targetProject="src/main/java">
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- 生成 MyBatis 的 Mapper 接口类文件,targetPackage 指定 Mapper 接口类的包
名, targetProject 指定生成的 Mapper 接口放在 eclipse 的哪个工程下面 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.example.mapper1" targetProject="src/main/java">
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 数据库表名及对应的 Java 模型类名 -->
<table tableName="test1" domainObjectName="Account"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false"/>
</context>
</generatorConfiguration>
<!--在pom.xml中加入mybatis代码自动生成插件-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<!--配置文件位置-->
<configurationFile>GeneratorMapper.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
使用插件即可得到实体类与数据库操作接口
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7GZH8L1m-1651418546984)(C:\Users\zzdcn\AppData\Roaming\Typora\typora-user-images\image-20211205005821030.png)]
错误原因:没有编译studentMapper.xml配置文件,要手动指定文件夹为resources
七、springmvc常用注解
@RestController
相当与控制层类上添加@Controller,方法上添加@ResponseBody, 意味当前控制层类中所有方法返回类都是json对象
@GetMapping(value = “…”)
相当于@RequestMapping(value=“…”, methon = RequestMethon.GET),该注解通常在查询数据的时候使用
@PostMapping(value = “…”)
相当于@RequestMapping(value=“…”, methon = RequestMethon.POST),该注解通常在新增数据的时候使用
@DeleteMapping(value=“…”)
相当于@RequestMapping(value=“…”, methon = RequestMethon.DELETE),该注解通常在删除数据的时候使用
@PutMapping(value=“…”)
相当于@RequestMapping(value=“…”, methon = RequestMethon,PUT),该注解同在在修改数据时使用
八、springboot实现RESTFul
http地址:http://localhost:8080/student?id=1001&staus=1
RESTFul架构风格http地址:http://localhost:8080/student/1001/1
九、springboot集成Thymelef
1、关闭页面缓存
application.properties核心配置文件关闭thymeleaf缓存
spring.thymeleaf.cache=false
编辑配置->运行应用程序更新策略全部换为更新资源
2、变量表达式
标准变量表达式 ${}
选择变量表达式 *{}
*{}必须使用th:object属性来绑定对象
<div th:object="${data}">
用户编号:<span th:text="*{id}"></span><br>
用户名称:<span th:text="*{name}"></span><br>
</div>
URL路径表达式 @{…}
用在图片,文件等有路径的地方,a标签中的绝对路径
<a th:href="@{http://www.baidu.com}"></a>
<a th:href="@{相对路径(没有参数),如/user/detail}"></a>
<a th:href="@{相对路径,如/user/detail?参数}"></a>
<!--相对路径,参数从后台获取-->
<a th:href="@{'相对路径,如/user/detail?参数名'+${变量值}+...}"></a>
<a th:href="@{相对路径(参数名=${变量名},参数名=${变量名},...)}"></a>
从后台取值时用 th:前缀,否则解析不了,值固定时可用可不用
3、遍历循环list组合
lombok插件
pom.xml添加依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
在类上方添加注释,自动生成构造函数,get方法和set方法等
import lombok.Data;
@Data
public class MyUser
{
...
}
4、校验规则
依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
import lombok.Data;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List;
@Data
public class Taco {
@NotNull //不为空
@Size(min=5, message="Name must be at least 5 characters long") //字符串长度要求
String name;
@Size(min=1, message="you must choose at least 1 ingredient") //数组长度
private List<String> ingredients;
}
package com.example.taco;
import lombok.Data;
import org.hibernate.validator.constraints.CreditCardNumber;
import javax.validation.constraints.Digits;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
@Data
public class Order {
@NotBlank(message="Name is required") //非空
private String name;
...
@Pattern(regexp = "^(0[1-9]|1[0-9]|2[0-2])([\\/])([1-9][0-9])",
message = "Must be formatted MM/YY") //regexp属性使用正则表达式
private String ccExpiration;
@Digits(integer = 3, fraction = 0, message = "Invalid CVV") //值包含三位数字
private String ccCVV;
}
在要进行校验的参数前使用注解@Valid
@PostMapping
public String processOrder(@Valid Order order, Errors errors){
if(errors.hasErrors())
{
return "orderForm";
}
log.info("Order submitted: " + order);
return "redirect:/";
}
十、使用JDBC读取和写入数据
1、使用jdbcTemplate
jdbc依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
2、配置h2服务器
注入h2依赖
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
application.properties配置
spring.thymeleaf.cache=false
spring.resources.cache-period=0
server.port=80
#数据库链接,文件或内存
#文件数据库不能自动运行sql文件,使用内存数据库
spring.datasource.url=jdbc:h2:file:./db/test01
#spring.datasource.url=jdbc:h2:mem:test
#spring.datasource.url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
#spring.datasource.schema=classpath:db/schema.sql
#resources/db/schema.sql
#spring.datasource.data=classpath:db/data.sql
#resources/db/data.sql
#web访问
spring.h2.console.settings.web-allow-others=true
spring.h2.console.path=/h2
spring.h2.console.enabled=true
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.generate-ddl=true
spring.jpa.show-sql=true
#当数据库链接为文件时update才有效,如果为内存,每次也会删除
spring.jpa.hibernate.ddl-auto=update
spring.datasource.platform=h2
logging.level.root=INFO
logging.level.org.hibernate=INFO
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
logging.level.org.hibernate.type.descriptor.sql.BasicExtractor=TRACE
logging.level.com.sguess=DEBUG
spring.jpa.database=h2
spring.jpa.show-sql=true
# ddl执行方式,update create 等
spring.jpa.hibernate.ddl-auto=update
spring.datasource.platform=h2 #表明使用的数据库平台是h2
spring.datasource.url=jdbc:h2:./data/test;AUTO_SERVER=TRUE
spring.datasource.username=sa
spring.datasource.password=123456
spring.datasource.driverClassName=org.h2.Driver
# 进行该配置后,h2 web consloe就可以在远程访问了。否则只能在本机访问。
spring.h2.console.settings.web-allow-others=true
# 进行该配置,你就可以通过YOUR_URL/h2访问h2 web consloe。YOUR_URL是你程序的访问URl。
spring.h2.console.path=/h2-consloe
# 进行该配置,程序开启时就会启动h2 web consloe。当然这是默认的,如果你不想在启动程序时启动h2 web consloe,那么就设置为false。
spring.h2.console.enabled=true
3、sql文件
创建表的sql:保存在src/main/resources/schema.sql文件
预加载数据的sql:保存在src/main/resources/data.sql文件
4、定义jdbc repository
使用jdbc Tempate将数据写入数据库
编写获取和保存Ingredient数据的repository,IngredientRepository接口与其实现类
5、插入数据
taco和order的Repostory功能只有保存对应对象,声明一个save()方法。但保存taco的同时要将与该taco对应的配料保存到taco_Ingredients表中
直接使用update()方法
如代码中的JdbcTacoRepository类
使用SimpleJdbcInsert()方法
如代码中的JdbcOrderRepository类
十一、过滤器Filter
1、注解方式:
在拦截器类中
声明一个拦截器
@WebFIlter(urlPattren, filterName)
声明拦截器的使用顺序
@Order(value)
package com.example.projectdemo.filter;
import org.springframework.core.annotation.Order;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//声明拦截器的注解
@WebFilter(urlPatterns = "/api/*", filterName = "myFilter")
//声明过滤器顺序的注解
@Order(1)
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
String url = request.getRequestURI();
String method = request.getMethod();
filterChain.doFilter(servletRequest, servletResponse);
System.out.println("拦截的接口:" + url + ",拦截的方法:" + method);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("初始化拦截器");
}
@Override
public void destroy() {
Filter.super.destroy();
System.out.println("销毁拦截器");
}
}
启动函数添加注解扫描拦截器
@ServletComponentScan
2、Bean创建容器方式
在配置类创建
package com.example.projectdemo.config;
import com.example.projectdemo.filter.MyFilter;
import lombok.val;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FilterConfig {
@Bean
public MyFilter myFilter(){
return new MyFilter();
}
@Bean
public FilterRegistrationBean getFilterRegistrationBean(MyFilter myFilter){
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(myFilter);
filterRegistrationBean.setOrder(1);
filterRegistrationBean.addUrlPatterns("/api/*");
filterRegistrationBean.setName("myFilter");
return filterRegistrationBean;
}
}
十二、拦截器Interceptor
1、
public MyFilter myFilter(){
return new MyFilter();
}
@Bean
public FilterRegistrationBean getFilterRegistrationBean(MyFilter myFilter){
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(myFilter);
filterRegistrationBean.setOrder(1);
filterRegistrationBean.addUrlPatterns("/api/*");
filterRegistrationBean.setName("myFilter");
return filterRegistrationBean;
}
}
## 十二、拦截器Interceptor
1、