磨磨蹭蹭初步学完了springboot,乘热复习一下,总结一下几个重要的知识点。。
我是看雷丰阳老师的视频学的,所以是跟着他的笔记以及我个人需求所总结的,只能算学会springboot最低要求。至于还有例如单元测试,指标监控等知识点,可以根据需求自行学习。。
一,学会利用springInitializr创建一个springboot项目.
二,掌握各种注释的用法
三,掌握yml文件的书写规则
四,学会静态资源配置和请求参数处理
五,掌握一种模板引擎(如:freemarker,thymeleaf…)
六,学会配置拦截器
七,掌握文件上传功能
八,掌握导入Jdbc及数据库驱动
九,学会Druid
十,掌握整合Mybatis/MybatisPlus
十一,在第十项基础上掌握对数据库操作相关方法以及分页等功能
这些知识点掌握后可以先做一些小的项目,然后再尝试学着看springboot相关的源码
———————————————————————————————————————
每条知识点中比较重要的内容:
使用springInitializr创建项目还是很简单的,基本使用过一次就能学会。需要注意的是在创建的时候,server url可以换成 start.aliyun.com防止依赖无法下载或者下载速度过慢。
在创建时还可以添加一些会用到的依赖(例如:freemarker,mysql…),这样在项目创建完成后会自动导入,不用手动导入了。
一些常用的注释:
@Component //把普通pojo实例化到spring容器中,可以在配置文件中对该实例赋值
@Bean //给容器添加一个组件,方法名是id,返回类型是组件类型,返回的值就是保存的对象
@Autowired //它可以对类成员变量、方法及构造函数进行标注,让 spring 完成 bean 自动装配的工作
@Configuration //表明这是一个配置类
@Conditional //在满足某种情况下运行
@ResponseBody //作用其实是将java对象转为json格式的数据
@RestController //相当于@Controller+@ResponseBody
@RequestMapping //通过它来指定控制器可以处理哪些URL请求
@GetMapping,@PostMapping,@DeleteMapping,@PutMapping
@RequestParam //将请求参数绑定到你控制器的方法参数上
@PathVariable //获取请求路径上的值
@RequestBody //将前端返回的数据转换成bean类型
@MapperScan //扫描指定路径下的mapper
yml文件的书写规则,没啥好说的。注意格式k: v就行
静态映射原理:请求进来,先去找Controller看能不能处理。不能处理的所有请求又都交给静态资源处理器。静态资源也找不到则响应404页面。
静态资源一般放在/static目录下。Springboot将从如下位置按如下优先级(从高到低)加载jar包对应前端静态资源:
1.jar包同级static目录
2.jar包同级public目录
3.jar包同级resource目录
4.jar包/META-INF/resources
spring:
mvc:
static-path-pattern: #设置访问静态资源的前缀
resources:
static-locations: #自定义静态资源路径
在静态资源路径下添加favicon.ico文件,可以设置网站小图标
我选择使用的是freemarker,只要在pom.xml里导入依赖即可使用(可在创建项目开始时选择自动添加)。
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-freemarkerartifactId>
dependency>
可在application.yml中添加设置
spring:
freemarker:
cache: false #缓存设置
charset: UTF-8 #编码格式
suffix: .ftl #后缀名
具体使用规范参考 https://www.cnblogs.com/linjiqin/p/3388298.html
1、编写一个拦截器实现HandlerInterceptor接口
2、拦截器注册到容器中(实现WebMvcConfigurer的addInterceptors)
3、指定拦截规则【如果是拦截所有,静态资源也会被拦截】
拦截器原理:
文件上传功能
controller层实现:
@PostMapping("/upload")
//MultipartFile 单文件上传 MultipartFile[] 多文件上传
public String upload(@RequestPart("singlefile") MultipartFile singlefile,
@RequestPart("multyfile") MultipartFile[] multyfile) throws IOException {
if (!singlefile.isEmpty()){
String originalFilename = singlefile.getOriginalFilename();
singlefile.transferTo(new File("D:\\"+originalFilename));
}
if (multyfile.length > 0){
for (MultipartFile multipartFile : multyfile) {
if (!multipartFile.isEmpty()){
String originalFilename = multipartFile.getOriginalFilename();
multipartFile.transferTo(new File("D:\\"+originalFilename));
}
}
}
return "main";
}
需要注意的是,需要在application.yml里设置上传文件大小设置。
spring:
servlet:
multipart:
max-file-size: 10MB #单个文件上传最大体积
max-request-size: 1000MB #多个文件上传最大体积
创建项目时可以选择,会自动添加.可以在配置文件中配置相关属性:
spring:
datasource:
url: jdbc:mysql://localhost:3306/springboot?serverTimezone=UTC
username: root
password: 123456
druid官方文档: https://github.com/alibaba/druid
主要是一些配置需要知道怎么用
druid:
#监控页相关配置(例如:需要登陆,设置用户名密码,是否可重置)
stat-view-servlet:
enabled: true
login-username: admin
login-password: 123456
reset-enable: false
# 监控web
web-stat-filter:
enabled: true
#监控SpringBean
aop-patterns: com.example.event01.*
#底层开启功能,stat(sql监控),wall(防火墙)
filters: stat,wall
#设置防火请和sql监控具体属性
filter:
stat:
enabled: true
wall:
enabled: true
Mybatis
mybatis的整合同样可以在创建项目开始时便选择导入.还是需要掌握一些常用配置
mybatis:
#mybatis的配置文件位置,但不可与yml中的配置configration同时使用
#config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mybatis/mapper/*.xml
configuration:
#驼峰命名
map-underscore-to-camel-case: true
值得注意的是,mybatis有两种写配置的方式.
第一种,创建mybatis-config.xml,在这里面写配置,然后在application.yml里指定配置文件的路径.
第二种,直接在application.yml里配置.
这两种只可选用一种,不可一起使用.
Mybatis有三种写sql的方式(其实我觉得只能算两种).
第一种,配置模式.先编写Mapper接口,标注@Mapper注解,再编写sql映射文件并绑定mapper接口.要注意Mapper接口名要与sql映射文件名相同.
第二种,注解模式.编写Mapper接口,标注@Mapper注解,然后在接口内的方法上添加例如@Select,@Insert等注解直接编写sql.
第三种,混合模式.以上两种一起用.复杂的sql用第一种,简单的sql用第二种.
MybatisPlus
Mybatis Plus在开始选择后会包含Mybatis以及Jdbc的相关依赖.
Mybatis Plus主要提供了一些常用的方法供我们使用.只需要我们的Mapper继承 BaseMapper 就可以拥有crud能力.
//尖括号里写需要操作的类名
@Mapper
public interface CityMapper extends BaseMapper<City> {
}
在service接口可以继承Iservice:
//尖括号里写需要操作的类名
public interface CityService extends IService<City> {
}
在service实现类中可以继承ServiceImpl
//尖括号里填写相应的Mapper类名和需要操作的类名
@Service
public class CityServiceImpl extends ServiceImpl<CityMapper,City> implements CityService {
}
完成以上操作,便可以直接使用其提供的一些方法.在Idea插件商店还可以下载MybatisX插件,可以很方便地在Mapper类与其绑定的映射文件间跳转.
数据库操作没啥好说的,主要第一次用freemarker做分页功能,记录一下.
Controller层:
@Controller
public class TableController {
@Autowired
DbPersonService dbPersonService;
@GetMapping("/second_table")
public String secondTable(Model model, @RequestParam(value = "pn",defaultValue = "1") Integer pn) {
//表格遍历
List<Person> list = dbPersonService.list();
//分页
//构造分页参数
Page<Person> personPage = new Page<>(pn, 3);//拿出第pn页的数据,每页展示3条数据
//调用page进行分页
Page<Person> page = dbPersonService.page(personPage, null);//把上面拿到的数据做条件筛选,这里不做筛选
model.addAttribute("ppage",page);
return "table/second_table";
}
}
controller层没啥说的,这里的page方法是MybatisPlus提供的.
ftl页面代码:
<table id="users">
<thead>
<tr>用户名tr>
<tr>密码tr>
thead>
<tbody>
<#list ppage.records as p>
<tr>tr>
<td>${p.name}td>
<td>${p.uid}td>
tr>
#list>
<tr>
<td>当前第${ppage.current}页td>
<td>总共${ppage.pages}页td>
<td>共有${ppage.total}条记录td>
tr>
tbody>
table>
<#import "../page.ftl" as fpage/>
<@fpage.page totalPage=ppage.pages currentPage=ppage.current />
page.ftl页面代码:
<#macro page currentPage totalPage >
<ul>
style="display: none" #if>> <a href="/second_table?pn=1">首页a> li>
style="display: none" #if>><a href="/second_table?pn=${currentPage-1}">上一页a>li>
<#assign start = 1/>
<#assign pages=start..totalPage/>
<#list pages as p>
style="color: darkorange" #if>> <a href="/second_table?pn=${p}">${p}a>li>
#list>
style="display: none" #if> ><a href="/second_table?pn=${currentPage+1}" >下一页a>li>
style="display: none" #if> ><a href="/second_table?pn=${totalPage}" >尾页a>li>
ul>
#macro>
代码只负责功能实现,css样式都没写。。还有就是freemarker学得不精,代码写的比较丑。。
自我总结,学得还不是很好。若有不好的地方,欢迎批评指正。