后端框架之springboot第二弹~
嗨害嗨,我又来了
我又来了,一大早来办公室马不停蹄整理的,关于springboot框架,以及部分mybatis和Thymlef的知识点。欢迎大家批评指正~
有需要的同学记得收藏、点赞、转发哦~
1. javaconfig
JavaConfig: 使用Java类作为xml配置文件的替代,是配置spring容器的纯Java的方式。在这个Java类可以创建Java对象,把对象放入spring容器中(注入到容器)使用两个注解:
@Configuration:放在一个类的上面,表示这个类是作为配置文件使用的
@Bean: 声明对象,把对象注入到容器中
@importResource: 导入其他的xml配置文件,等于在xml
<import resources="其他配置文件"/
@PropertyResource是读取properties属性配置文件,使用配置文件可以实现外部化配置,在程序代码之外提供数据。步骤:
1).在resources目录下,创建properties文件,使用k=v的格式提供数据;
2).在propertyResource指定properties文件的位置;
3).使用@Value(value="$[key)”)
特点:内嵌的tomcat, jetty, undertow;提供了starter起步依赖,简化应用的配置。比如使用mybatis框架,需要早spring项目中,配置mybatis的对象SqlSessionFactory, Dao的代理对象,在springboot项目中,在pom.xml里面加入-个mybatis-pring-boot-starter依赖;
尽可能去配置spring和第三方库,叫做自动配置(就是把spring中的第三方库中的对象都创建好,放到容器中,开发人员可以直接使用;
不用生成代码,不再使用xml做配置。
2.注解
使用了@SpringBootConfiguration注解标注的类,可以作为配置文件使用的,可以使用Bean声明对象,注入到容器.
@EnableAutoConfuguration,启用自动配置,把Java对象配置好,注入到spring容器中
@ComponentScan,扫描器,找到注解,根据注解的功能创建对象,给属性赋值等。
默认扫描的包:@ComponentScan所在的类所在的包和子包。
3.项目创建方式
spring提供的初始化器,就是向导创建springboot应用,http://start.springboot.io;
使用springboot提供的初始化器使用maven向导创建项目。
4.配置文件
配置文件名称: application
扩展名: properties (k=v) ,application.yml
设置端口和上下文路径
例: application.preperties
#设置端口号
server.port=8080
#设置访问上下文路径, contextpath
server.servlet.context-path=/myboot
5. web组件
拦截器:是springMVC中的一种对象,能拦截对controller的请求。拦截器框架中有系统的拦截器,还可以自定义拦截器,实现对请求预先处理。
实现自定义拦截器:
.创建类实现springMVC框架的Handlerlnterceptor接口;
.在springMVC配置文件中,声明拦截器;
.创建拦截器对象,指定拦截的请求url地址,指定不拦截的地址;
servlet: 使用步骤
1).创建servlet对象,创建类继承HttpServlet;
2).注册servlet,让框架能找到Servletfilter:过滤器,可以处理请求,对请求的参数、属性进行调整,常常在过滤器中处理字符编码;
字符集过滤器
解决post请求中乱码的问题,在springMVC框架,在web.xml注册过滤器,配置它的属性。
使用步骤:
1).配置字符集过滤器;@Bean
public FilterRegisrationBean filterRegistrationBeanO[
FilterRegisrationBean reg=new FilterRegisrationBean();
//使用框架中的过滤器类
CharacterEncodingFilter filter=newCharacterEncodingFilter();//指定使用的编码方式
filter.setEncoding("utf-8");
//指定request, response都使用encoding的值
filter.setForceEncoding(true);reg.setFilter(filter);return reg;
2).修改application.properties文件,让自定义的过滤器起作用
#springBoot中默认已经配置了CharacerEncodingFilter, 编码默认ISO-8859-1
#设置enabled=false作用是关闭系统中配置好的过滤器,使用自定义的CharacterEncodingFilter
server.servlet.encoding.enable=false;
#指定使用的编码方式
server.servlet.enoding.charset=utf-8#强制request, response都使用charset属性的值
server.servlet.encoding.force=true
6.ORM操作MySQL
使用MyBatis框架操作数据,在SpringBoot框架集成MyBatis。
使用步骤:
1).mybatis起步依赖:完成mybatis对象自动配置,对象放在容器中;
2).pom.xml指定把src/main/java目录中的xml文件包含到calsspath中;
3).创建实体类Student;
4).创建Dao接口StudentDao,创建一个查询学生的方法;
5).创建Dao接口对应的Mapper文件,xml文件,写sql语句;
6).创建Service层对象,创建StudentService接口和他的实现类,去Dao对象的方法,完成数据库的操作;
7).创建Controller对象,访问Service
8).写application.properties文件配置数据库的连接信息
@Mapper和@MapperScan
@Mapper,放在dao接口的上面,每个接口都需要使用这个注解,告诉mybatis这是dao接口,创建此接口的代理对象
@MapperScan,在Dao接口上面加入@Mapper,需要在每个接口都加入注解,当Dao接口多的时候不方便。可以使用如下的方式解决:
主类上添加注解包扫描: @MapperScan (“com.example.dao");找到Dao接口和Mapper文件;
Mapper文件和Dao接口分开管理;
把Mapper文件放在resources目录下
1)把resources目录中创建子目录(自定义的) ,例如mapper(自定义的);
2)把mapper文件放到mapper目录中;
3)在application.properties文件中,指定mapper文件的目录
#指定mapper文件的位置
mybatis.mapper-location=classpath:mapper/*.xml;
#指定mybatis的日志
mybatis.confifuration.log-impl=org.apache.ibatis.logging.stdout.stdOutlmpl
4)在pom.xml中指定把resources目录中的文件,编译到目标目录中<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/**</include
</includes></resource></resources>
7.事务
1)管理事务的对象:事务管理器(接口,接口有很多的实现类)。
例如:使用jdbc或mybatis访问数据库,使用的事务管理器: DataSourceTransactionManager
2)声明式事务:在xml配置文件或者使用注解说明事务控制的内容。控制事务:隔离级别,传播行为,超时时间
3)事务处理方式
spring框架中的@Transactional,aspectj框架可以在配置文件中,声明事务控制的内容。
springBoot中使用事务,上面两种都可以。
1)在业务方法的上面加入@Transactional,加入注解后,方法有事务功能了;
2)明确地在主启动类的上面,加入@EnableTransactionManager。
8.接口架构风格-RESTful
接口(API):可以指访问servlet, controller的url,调用其他程序的函数。
架构风格: api组织方式,传统的就是在地址上提供了访问的资源名称addStudent,在其后使用了get方式传递参数。
RESTful架构风格:
1) REST: (RepresentationalStateransfer,表现层状态转移)
REST:时一种接口的架构风格和设计的理念,不是标准;
优点:更简洁,更有层次。
2) REST中的要素:
用REST表示资源和对资源的操作,在互联网中,表示一个资源或者一个操作;资源是用url表示的,在互联网,使用的图片,视频,文本,网页等等都是资源;对资源可以进行增删改查操作,即POST(创建资源),DELETE,GET(查询资源),PUT (更新资源)。
9.注解
@PathVariable,获取url中的数据
@GetMapping, 支持GET的请求方式,等同于@RequestMapping (method =RequestMethod.GET)
@PostMapping,接收和处理post方式的请求,等同于@RequestMapping(method =RequestMethod.POST)@PutMapping,支持put请求方式,等同于@RequestMapping (method =RequestMethod.PUT)
@DeleteMapping,接收delete方式的请求,可以使用GetMapping代替,等同于@RequestMapping (method =RequestMethod.DELETE)
@RestController: 是@Controller@ ResponseBody组合,在类上面使用@RestController, 表示当前类的所有方法都加入了@ResponseBody
10.postman
使用postman:可以测试get,push,put,delete请求;
在页面中或者ajax中,支持put,delete请求;
在springMVC中有一个过滤器(org.springframework.web.filter.HiddenHttpMethodFilter) ,支持post请求转为put,delete。
实现步骤:
1).application.properties: 开启使用HiddenHttpMethodFilter过滤器
2).在请求页面中,包含_method参数,它的值是put,delete,发起这个请求使用的是post方式
11.打包
11.1打包为jar
创建了一个包含jsp的项目
修改pom.xml:
指定打包后的文件名称
<build><finalName>myboot</finalname></build>
2)指定spring boot-maven-plugin版本(打包jar,有jsp文件时,必须指定maven-plugin插件的版本是1.4.2.RELEASE)
3) 最后执行maven clean package在target目录中,生成jar文件
执行独立的springboot项目,在cmd中 java-jar myboot.jar
11.2打包为war
创建一个jsp应用
修改pom.xml
1)指定打包后的文件名称;2)执行打包是war3;主启动类是集成SpringBootServletinitializer
4)部署war.把war放在tomcat等服务器的发布目录中, tomcat为例,myboot.war放在tomcat/webapps目录
12.Thymeleaf模板
是使用java开发的模板技术,在服务端运行,把处理后的数据发送给浏览器。
模板是作视图层工作的,显示数据的,Thymeleaf语法是应用在html标签中, springboot框架集成Thymeleaf,使用它代替jsp。
可以用在web环境下,也可以用在非web环境下,在非web环境下,能直接显示模板上的静态数据,在web环境下,能像jsp一样从后台接收数据并替换掉模板上的静态数据。是基于HTML的,以HTML标签为载体。
12.1表达式
标准变量表达式
是在页面获取数据的一种thymeleaf语法,类似$[key), key是request作用域中的key,使用request.setAttribute(),model.addAttribute().
在页面标签中,使用th:text=""是thymeleaf的一个属性,用于文本的显示。
选择变量表达式
语法:*[key).需要和th:object一起使用,用来绑定对象,其中的值是此对象中的属性,也叫星号变量表达式。
链接表达式
语法:[链接url),主要用于链接、地址的展示,可用于<script src="...">,<link href="...">,<a href="">,<form action="">,<img src="">,可以在URL路径中动态获取数据
12.2属性
是放在html元素中的,就是html元素的属性,加入了th前缀,属性的作用不变。加入th,属性的值由模板引擎处理了,在属性可以使用变量表达式。
th:action
定义后台控制器的路径,类似form标签的action属性,主要结合URL表达式,获取动态变量
<form id="login" th:action="@{/login}" th:methosd="post"></form>
th:method
设置请求方法<form id="login" th:action="@{/login}" th:menthod="post"</form>
th:href
<a th:href="@{/query/student}">相对地址没有传参数</a>
th:src
用于外部资源引入,比如<script>, <img>标签的src属性,常与@表达式结合使用,在springboot项目的静态资源都放到resources的static目录下,放到static路径下的内容,写路径时不需要加上static
<script type="text/javascript" th:src="@{/js/jquery-3.4.1.js}"></script>
th:text
用于文本的显示,该属性显示的文本在标签体中,如果是文本框,数据会在文本框外显示,要想在框内显示,使用
th:value
<input type="text" id="realName" name="realName" th:text="$(realName)"
th:each
属性较常用,比如从后台传来一个对象集合那么就可以使用此属性遍历输出,它与JSTL中的<c:forEach>类似,此属性既可以循环遍历集合,也可以循环遍历数组及Map.
th:if
语法:th:if="boolean条件",条件为true显示体内容(空字符是true, null是false), th:unless是th:if的一个相反操作
<p th:if="$(sex=='m')">性别是男</p><p th:if="$[sex=='m')">性别是男</p><p th:if="$(fisLogin)">已经登录系统</p>
th:switch
<div th:switch="$(sex)">
<p th:case="f">性别是女</p><p th:case="m">性别是男</p><p th:case="*">未知</p></div>
th:inline
三个取值类型,分别是text, JavaScript, none
text: 可以让thyme leaf表达式不依赖于html标签,直接使用内敛表达式即可获取动态数据,要求在父级标签上加上th:inline="text"
javascript:可以在js中,获取模板中的数据