一、SpringBoot的入门程序开发
spring boot其设计目的是用来简化Spring应用的搭建以及开发过程
pom文件中的坐标是勾选添加的。
开发SpringBoot程序可以根据向导进行联网快速制作
运行SpringBoot程序通过运行Application程序入口进行
1.idea联网版
2.官方创建版
3.阿里云版(我只能操作这个)
步骤:选择自定义URL,输入阿里云start地址(https://start.aliyun.com),创建项目
4.手动制作:
①手动导入坐标(继承与依赖)
②手动添加引导类
5.手动导入外界项目
二、解析
1.parent(减少依赖冲突)
2.Start(减少依赖配置)
就是一个包含了若干个坐标的pom管理文件
3.引导类(启动程序)
①spring的容器
SpringApplication.run(Springboot0103QuickstartApplication.class, args);
②主要靠注解@SpringBootApplication(配置类)
扫描引导类所在包及其子包加载bean
4.内嵌服务器
服务器是用java语言写的,java语言靠对象运行,其对象可以交给Spring管理
内置服务器:tomcat,jetty,undertow
三、REST开发
REST(Representational State Transfer),表现形式状态转换
根据REST风格对资源进行访问称为RESTful
1.@RequestBody,@RequestParam,@PathVariable的区别
@RequestBody用于接收json数据
@RequestParam用于接收url地址传参或表单传参
@PathVariable用于接收路径参数
2.@RestController等同于@Controller,@ResponseBody
四、基础配置
1.复制工程
保留工程基础结构,抹掉原始工程痕迹
2.属性配置方式
修改服务器端口为http://localhost/
即在springboot默认配置文件application.properties,通过键值对配置对应的属性
server.port=80
# 应用服务 WEB 访问端口
server.port=80
#修改banner
#spring.main.banner-mode=off/# 关闭springboot的logo
#spring.banner.image.location=/设置logo
#日志
#logging.level.root=info/打印日志信息
3.配置文件的类型
properties,yml,yaml
4.配置文件加载优先级
5.属性提示消失解决方案
6.yaml数据格式
xml,properties,yaml都是数据存储格式
YAML(YAML Ain't Markup Language),一种数据序列化格式
以数据为核心,重数据轻格式
同样的名称只能出现一次
①核心规则:数据前面要加空格与冒号隔开
数组表示方式:在属性名书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔
likes:
- game
- music
等同于:
likes2: [game,music,sleep]
users:
- name: zhangsan
age:18
- name: lisi
age:18
等同于
users3: [{name:zhangsan,age:18},{name:lisi,age:18}]
②字面值表示方式
7.读取yaml单一属性数据
@Value("${country}")
private String country1;
读取数组类型
@Value("${likes[1]")
private String like1;
8.yaml文件中的变量引用
baseDir: c:\window
使用${属性名}引用数据
tempDir: ${baseDir}\temp
支持转义字符,只不过需要用双引号包裹
9.读取yaml全部属性数据
使用自动装配将所有数据封装到一个对象Environment中
@Autowired
private Environment env;
方法中输出:
System.out.println(env.getProperty("server.port"))
10.读取yaml引用类型属性数据(封装局部数据)
①定义数据模型封装yaml文件中对应的数据
②定义为Spring管控的bean(@Component)
③指定加载的数据(@ConfigurationProperties(“datasource”))意为前缀叫datasource的对象,可获取其中的属性
定义在Controller类中
@Autowired
private MyDataSource myDataSource;
五、整合第三方技术
1.整合JUnit
①关键是@SpringBootTest
2.整合MyBatis
SpringBoot版本低于2.4.3(不含),Mysql驱动版本大于8.0时,需要在url连接串中配置时区
3.整合MybatisPlus
报错了,所以我不决定学了
4.整合Druid
第一种配置:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
第二种配置:
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm
username: root
password: 123456
5.整合第三方技术通用的方式
六、SSMP
1.模块创建
勾选SpringMVC与MySQL坐标
在pom文件中添加mybatisPlus和druid的依赖
2.实体类的开发
Lombok,一个java类库,提供了一组注解,简化POJO实体类开发
在pom中加lombok的坐标
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
加在实体类上的注解@Data(getter,setter,tostring,hashcode,equals方法都有,但没构造器的方法@Constructor)
3.数据层标准开发
添加测试报错后,在yml文件中加id-type即可
mybatis-plus:
global-config:
db-config:
table-prefix: tbl_
id-type: auto
@Test
void testGetAllBook() {
System.out.println(bookDao.selectList(null));
}
4.开启MP运行日志
为了方便调试,使用配置方式开启日志,设置日志输出方式为标准输出
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
5.分页
设置一个拦截器对象,在测试类中添加一个IPage对象
IPage对象中封装了分页操作中所有数据(当前页码,每页数据总量,数据总量,数据)
package com.zhou.config;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MPConfig {
//第三方bean的配置方式
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
//定义MP拦截器
MybatisPlusInterceptor interceptor=new MybatisPlusInterceptor();
//添加具体的拦截器
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
测试类
@Test
void testGetPage() {
IPage page=new Page(1,5);
bookDao.selectPage(page,null);
}
6.条件查询
@Test
void testGetByCondition() {
QueryWrapper<Book> qw=new QueryWrapper<>();
qw.like("name","Spring");
bookDao.selectList(qw);
}
@Test
void testGetByCondition2() {
String name=null;
LambdaQueryWrapper<Book> lqw=new LambdaQueryWrapper<>();
lqw.like(name!=null,Book::getName,name);
bookDao.selectList(lqw);
}
7.业务层标准开发
@Autowired
private BookDao bookDao;
@Override
public Boolean save(Book book) {
return bookDao.insert(book)>0;
}
@Override
public Boolean update(Book book) {
return bookDao.updateById(book)>0;
}
@Override
public Boolean delete(Integer id) {
return bookDao.deleteById(id)>0;
}
更新时要设置id的值
标准开发一般在定义接口时写名前加个I
如果@Override报错,则证明方法没被覆盖
public interface IBookService extends IService<Book>{
@Override
boolean save(Book book);
}
使用MyBatisPlus提供有业务层通用接口(ISerivce<T>)与业务层通用实现类(ServiceImpl<M,T>)【M为继承BaseMapper的Mapper接口】
8.表现层标准开发
表现层数据一致性处理(R对象)
设计表现层返回结果的模型类,用于后端与前端进行数据格式统一,也称为前后端数据协议。
package com.zhou.utils;
import lombok.Data;
@Data
public class R {
private Boolean flag;
private Object data;
public R() {
}
public R(Boolean flag) {
this.flag = flag;
}
public R(Boolean flag, Object data) {
this.flag = flag;
this.data = data;
}
}
9.前后端的调用
前后端分离结构设计中页面归属前端服务器,
单体工程中页面放置在resources目录下的static目录中
methods: {
//列表
getAll() {
//发送异步请求
axios.get("/books").then(res=>{
console.log(res.data);
});
},
①列表功能
将查询的数据返回页面,利用前端数据双向绑定进行数据展示
//钩子函数,VUE对象初始化完成后自动执行
created() {
//调用查询全部数据的操作
this.getAll();
},
//列表
getAll() {
axios.get("/books").then((res)=>{
this.dataList = res.data.data;
});
},
②异常信息处理
package com.zhou.utils;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
//作为Springmvc的异常处理器
@RestControllerAdvice
public class ProjectExceptionAdvice {
//拦截所有的异常信息
@ExceptionHandler
public R doException(Exception ex){
ex.printStackTrace();
return new R(false,"服务器故障,请稍后再试!");
}
}
各个功能(前端)
爱咋咋地
10.基础篇完结
①pom.xml
配置起步依赖
②application.xml
设置数据源,端口,框架技术相关配置(自增,表名前缀,日志)
③dao
继承BaseMapper,设置@Mapper
④service
调用数据层接口或Mybatis-plus提供的接口快速开发
⑤controller
基于Restful开发
⑥页面
放置在resources目录下的static目录中