目录
SpringBoot简介
Spring Boot概念
搭建普通项目的springboot工程
1、创建普通的maven工程 2、继承spring-boot-starter-parent
3.添加依赖spring-boot-starter-web 4、制作引导类Application
内置服务器
REST开发
RESTful快速开发
@RestController
SpringBoot修改配置
基础配置
属性配置
整合第三方技术*
SpringBoot - Junit
SpringBoot - Mybatis
SpringBoot - Mybatis Plus
SpringBoot - Druid(数据源)
整合第三方技术通用方式
整合SSMP案例
模块创建
实体层开发
数据层开发
分页
按条件查询
业务层开发
快速开发
表现层开发
基于Restful进行表现层接口开发
使用Postman测试表现层接口功能
表现层信息一致性处理(便于前端开发读取数据)
前后端协议联调
springBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程
#Spring程序的缺点 *依赖配置繁琐 *配置繁琐
#SpringBoot程序优点 *起步依赖(简化依赖配置) *自动配置(简化常用工程相关配置) *辅助功能(内置服务器,.....)
注意事项:基于idea开发SpringBoot程序需要确保联网且能够加载到程序框架结构
springboot联网网址: https://start.aliyun.com https://start.spring.io
Spring Boot概念
Spring Boot 是spring公司的一个顶级项目, 和Spring Framework是一个级别的。
Spring Boot实际上是利用Spring Framework4自动配置特性完成。编写项目时不需要编写xml文件。发展到现在,Spring Boot已经具有很很大的生态圈,各种主流技术已经提供了Spring Boot的启动器。
1、创建普通的maven工程 2、继承spring-boot-starter-parent
3.添加依赖spring-boot-starter-web 4、制作引导类Application
Tomcat(默认) Apache出品,粉丝多,应用面广,负载了若干较重的组件
Jetty 更轻量级,负载性能远不及Tomcat
undertow undertow,负载性能勉强跑赢Tomcat
内嵌Tomcat服务器是SpringBoot辅助功能之一
内嵌Tomcat工作原理是将Tomcat服务器作为对象运行,并将该对象交给Spring容器管理
变更内嵌服务器思想是去除现有服务器,添加全新的服务器
REST(Representational State Transfer):表现形式状态转换
传统风格:
http://localhost/user/getById?id=1
http://localhost/user/saveUser
REST风格:
http://localhost/user/1
http://localhost/user
优点:
隐藏资源的访问行为
,无法通过地址得知资源是何种操作
书写简化
注意事项:上述行为是约定方式,约定不是规范,可以打破,所以称REST风格,而不是REST规范。描述模块的名称通常使用复数,也就是加s的格式描述,表示此类资源,而非单个资源,列如:users、books、accounts.....
名称:@RequestMapping
类型:方法注解
位置:SpringMVC控制器方法定义上方
作用:设置当前控制器方法请求访问路径
范例:
属性:
value(默认):请求访问路径
method:http请求动作,标准动作(GET/POST/PUT/DELETE)
名称:@PathVariable
类型:形参注解
位置:SpringMVC控制器方法形参定义前面
作用:绑定路径参数与处理器方法形参间的关系,要求路径参数与形参名一一对应
范例:
四种请求动作映射名称:@GetMapping @PostMapping @DeleteMapping @PutMapping
类型:方法注解
位置:基于SpringMVC的RESTful开发控制器方法定义上方
作用:设置当前控制器方法请求访问路径与请求动作,每种对应一个请求动作,列如 @GetMapping对应GET请求
属性:value(默认):请求访问路径
用来简化@Controller和@ResponseBody
复制工程 原则
保留工程基础结构
抹掉原始工程痕迹
SpringBoot默认配置文件application.properties,通过键值对配置对应属性
修改配置
修改服务器端口号:server.port=809
SpringBoot提供了多种属性配置方式
application.properties(起主导作用)
server.port=809 >
application.yml(主流格式,推荐使用)
server: port:810 >
application.yaml
server: port:811
核心规则:数据前面要加空格与冒号隔开
port: 8080
##对象
user:
name: itcast
age: 19
##数组
likes:
- game
- music
- sleep
likes2: [王者荣耀,生产者]
##对象数组
users:
- name: admin
age: 80
- name: like
age: 19
users:
-
name: admin
age: 80
-
name: like
age: 19
获取配置文件中的数据
//读取yaml数据中的单一数据
@Value("${country}")
private String country1;
@Value ("${likes[1]}")
private String likes1;
@Value ("${users[1].age}")
private String age1;
@Value ("${tempDir}")
private String tempDir;
//使用自动装配将所有的数据封装到一个对象Environment中
@Autowired
private Environment env;
@GetMapping
public String getById(){
System.out.println ("springboot is runningTwo");
System.out.println (country1);
System.out.println (likes1);
System.out.println (age1);
System.out.println (tempDir);
System.out.println ("--------------------------------");
System.out.println (env.getProperty ("users[1].age"));
return "springboot is runningTwo...";
}
名称:@SpringBootTest 类型:测试类注解
位置:测试类定义上方 作用:设置JUnit加载的SpringBoot启动类
范例:
@SpringBootTest(classes = SpringbootJunit01Application.class)
class SpringBoot05JunitApplicationTests{}
相关属性:classes:设置SpringBoot启动类
建立Spring Initializr工程时选择SQL下的:
Mybatis Framework MySQL Driver
核心配置:数据库连接相关信息(连什么?连谁?什么权限)
映射配置:SQL映射(XML/注解)
在application.yml里配置
#2.配置相关信息
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis
username: root
password: 123
定义数据层接口与映射配置
@Mapper
public interface StudentMapper{
@Select("select * from student")
public List getAll();
}
测试类中注入mapper接口,测试功能
@SpringBootTest
class SpringbootMybatis01ApplicationTests {
@Autowired
private StudentMapper sm;
@Test
void contextLoads() {
sm.getById ().forEach (e-> System.out.println (e));
}
}
springboot整合mybatis降版本处理错误
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
Mybatis-Plus 与 Mybatis 的区别
导入坐标不同 数据层实现简化
使用getById方法,实体定义要有主键、要有@TableId注解,才能使用MP的getById
由于mybatis-plus是国内发布的,需要在pom.xml中导入对应的坐标,若版本太高可以切换
https://mvnrepository.com/ 获取Mybatis-Plus坐标
com.baomidou
mybatis-plus-boot-starter
3.5.3
#设置Mp相关的配置
mybatis-plus:
global-config:
db-config:
table-prefix: tbl_
数据层接口继承BaseMappe;
结合Mybatis和MySQL一起使用
https://mvnrepository.com 获取Druid坐标
配置数据源
指定方式
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis
username: root
password: 123
变更Druid配置方式
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
username: root
password: 123
type: com.alibaba.druid.pool.DruidDataSource
导入对应的starter 根据提供的配置格式,配置非默认对应的配置项
勾选SpringMVC和MySQL坐标 手动添加Mybatis-Plus和Druid的坐标 修改配置文件为yml格式 设置端口为809方便访问
Lombok,一个Java类库,提供了一组注解,简化POJO实体类的开发(在pom.xml中加入如下配置)
org.projectlombok
lombok
不需要指定版本号,由SpringBoot提供版本
通过@Data注解(包括get、set、toString、hashCode、equals方法),实现对实体类属性的封装 @NoArgsConstructor为无参构造函数 @AllArgsConstructor为有参构造函数
导入Mybatis-Plus与Druid对应的starter
为方便调试可以开启MybatisPlus的日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
分页操作是在MybatisPlus的常规操作上增强得到,内部是动态的拼写SQL,需要使用MP提供的拦截器
创建一个类:config包下创建MpConfig类
@Configuration
public class MpConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
//1、定义Mp拦截器
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor ();
//2、添加具体的拦截器
interceptor.addInnerInterceptor (new PaginationInnerInterceptor ());
return interceptor;
}
}
Service层接口定义与数据层接口定义具有较大区别,不要混用
1、selectByUserNameAndPassword(String username,String password);(数据层接口对应的名称)
2、login(String username,String password);(业务层接口对应的名称)
1、使用MybatisPlus提供有业务层接口(IService
2、在通用类基础上做功能重载或功能追加
3、注意重载时不要覆盖原始操作,避免原始提供的功能丢失
//定义接口快速开发Service
public interface IUserService extends IService {
}
//定义接口实现类快速开发ServiceImpl
@Service
public class UserServiceImpl extends ServiceImpl implements IUserService {
}
基于Resultful制作表现层接口
新增:POST 删除:DELETE
修改:PUT 查询:GET
接收参数
实体数据:@RequestBody
路径变量:@PathVariable
数据库id由于是自增需要加指定的注解
@TableId(value = "id" ,type = IdType.AUTO)
private Integer id;
设计表现层返回结构的模型类,用于后端与前端进行数据格式同意,也被称为前后端数据协议(建立在controller包下的util包)
@Data
public class R{
private boolean flag;//true代表查询成功,false代表查询失败
private Object data;//表示返回的数据
public R(){
}
public R(boolean flag){
this.flag=flag;
}
public R(boolean flag,Object data){
this.flag=flag;
this.date=data;
}
}
前后端分离结构中页面归属前端服务器
单体工程中页面放置在resources目录下的static目录中(建议执行clean)