ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

springboot

2021-12-15 20:00:11  阅读:79  来源: 互联网

标签:拦截器 springboot -- 配置 bean mybatis



shift+shift==》查找功能/类...
在类上用ctrl+o==》查看改类所有方法。

创建一个springboot应用。
1.在maven配置springboot的父工程。 导入web包。
2.在主程序类上用@springBootapplication注解,将该类标识为springBoot应用,在该类中写main方法,springapplication.run(类的反射,args),运行main方法启动springboot。
3.业务逻辑类,controller层,在springBoot应用中,所有controller类都可以访问。 根据启动的端口号在浏览器打开,并进入对应请求中得到数据,一般为响应数据。
4.简化配置:application.properties配置文件,可以自定义配置,比如端口号 server.port=?....
5.简化部署:在pom文件中导入简化部署的插件,打成jar包,在target对应的文件下用cmd启动该jar包一样可以开启springboot应用。

6.依赖注入: springboot的-starter-*,*是一个版块,比如-starter-web,自动会导入web整个板块常见的jar包。
7.自动装配: 导入一个模块就会在底层自动配置其需要的配置文件,例如tomcat的web.xml,ss整合的配置。 修改配置在 application.properties里面修改即可。
8.自动扫描:默认自动扫描主程序入口类所在及以下包。 可以更改扫描位置。源码。

9.@configuration注解,配置类注解。 新建一个配置类的包,在类上添加@configuration标识为配置类。
在类方法上使用@Bean("value")给容器添加bean组件==<bean> 返回类型的bean类型,value值为bean id, 默认为方法名=bean id。
注意:@Bean创建bean是单实例的,即,每次创建相同name的组件都是一样的。

10.如果@Configuration(proxyBeanMethods = true) ,得到@Bean创建的组件都是单实例的。 即一个id,一个堆。 外部得到该配置类的bean对象调用类方法时,首先会从ioc容器中去找对应的bean,如果没有就会创建。
@Configuration(proxyBeanMethods = false),得到的bean不是单实例的,外部调用该类方法时,都会new一个bean。

区别: full(proxyBeanMethods=true)--全模式,组件依赖注入, @Bean之间有依赖关系,得到的组件都是单实例的。
lite(proxyBeanMethods=false)--轻量级模式, 其他类调用方法都会new一个新的组件。

11.@Import() :给容器中添加组件, 类.class, 是一个数组。 添加的组件的名字为全类名。

12.条件装配:@ConditionalOnbean(name=?)--当容器中含有()里的组件时才会装配。 1.写在类上,如果容器中没有该组件,则所有组件注册方法都不会注册。 2.写在@Bean上,针对该组件注册方法。
@ConditionalOnMissingbean(name=?),容器中不含有该组件时才会装配


13importResource("classthpath:bean.xml"),在任意类上使用,将配置的bean.xml导入到容器中,如果不添加注解的话springboot无法识别该文件。

14.配置绑定:@configurationProperties(prefix="?"),将bean类的属性值写在application.properties中,通过注解得到配置文件的绑定值。 需要组件bean在容器中存在。
法1.在bean类上添加@compnent--注册组件 @configurationProperties(prefix="配置文件内容的前缀")--绑定配置文件。
法2.在bean类上写@configurationProperties(prefix="?"),在配置类上添加@EnableconfigurationProperties(bean类.class)----将bean类注入容器中。(常用)

15.lombok插件: 简化javabean开发。 -导入jar包, 下载插件。 @data--所有set和get方法 。 @tostring , @AllArgscontroller--全参构造 , @NoArgscontroller--无参构造。
@slf4j--日志功能,用在controller类上。 在请求方法中,log.info("...")--请求成功在控制台打印内容。

16.dev-tools,导入spring-boot-devtools包,项目或者页面改变时,ctrl+F9 重新启动springboot。

17.创建springboot工程,spring initializr 。

18..yaml配置文件: 与properties配置文件是相同作用, 如果同一个属性配置在properties和yaml文件中都配置了,那么会优先应用properties中的配置,即 properties具有优先原则。
用法: key: value ,kv之间冒号空格隔开。使用缩进表示层级关系,缩进的空格数不重要,保证对齐就行。#表示注释。字符串无需加引号,如果要加,''与""表示字符串内容 会被 转义/不转义

数据类型
● 字面量:单个的、不可再分的值。date、boolean、string、number、null。k: v
● 对象:键值对的集合。map、hash、set、object 。 行写法: k: {k1:v1,k2:v2,k3:v3}。
列写法
k:
k1: v1
k2: v2
k3: v3

● 数组:一组按次序排列的值。array、list、queue。行写法: k: [v1,v2,v3]
列写法:k:
- v1
- v2
- v3

k表示对象

在对应类上写上@configurationProperties(prefix="?") 需要将该类注册到容器中。
19.开启自定义配置的提示。 大写字母是 -?(?表示对应的小写字母)

【重要】
20.静态资源访问:在类路径下, static, public ,resource, META-INF/resources 这四个都是默认静态资源的存放地址。
原理: 默认静态映射地址: 工程名/** 所有请求都会访问。 请求进来,先去找controller看能不能处理,如果不能处理则看静态资源处理器能不能处理,静态资源也不能处理,404。

改变默认静态资源前缀,默认无前缀。 --添加前缀:在配置文件中,static-path-patten: /前缀名/** ,访问静态资源时, 工程名/前缀名/资源名。 才能访问。 (常用), 便于拦截器使用。
改变默认资源路径: 默认为static, public ,resource, META-INF/resources,。static-locations: [classpath:/文件名/]


21.欢迎页设置:在静态资源下一般用static创建index.html ,即可。 注意需要使用默认的静态资源访问路径和前缀。

22.favicon.ico:ip图标,放在静态资源路径下即可,名字为favicon.ico。 ---浏览器ip图标。 f12 --network--搜索favicon--选all,浏览器刷新,即可查看每个网页图标

23.@requestattribute("?") ? :获取reuqest域中的数据,注解方式,在控制器方法形参使用,"?"=request域的key值, ?表示赋值给谁。 也可以用原生httpserveletreqeust对象获取。


24.springboot一般不支持jsp。

25.thymeleaf: web页面开发。 导入-starter-thymeleaf.
语法 1.th:txet="${}"--覆盖标签文本框内容。
2.th:href ="${}"覆盖超链接的内容
3.th:href="@{/?}" -- 为原有超链接的内容补全工程路径。 如果context-path改变,则会自动补齐,不用改浏览器地址。
【 -- 如果需要引入静态资源,用thymeleaf的话需要用@补全工程路径+资源路径:eg: <link th:href="@{/bootstrap/css/bootstrap.min.css}" rel="stylesheet">】---资源在static下
eg: <a href="b" th:href="@{/b}"> A1</a>--如果context-path为/word,则 A1=localhost:8080/word/b ,如果不改变href的地址,则建议用@/为其添加工程路径。

【thymeleaf的遍历】:th:each="obj ,satat:${key}" --obj=遍历后的名称, satat=遍历状态 属性1. index:当前迭代对象的index(从0开始计算)2. count: 当前迭代对象的index(从1开始计算) 等
${key}==遍历的对象,域中的数据。
eg:遍历书籍。1. 书籍数量: <td th:text="${satat.count}">xx<td> 从1开始,相当于foreach数组遍历。
2.书籍内容:<td th:text="${obj.name}">xx<td>
标签外写法:<td>[[${obj.name}]]</td>
标签内写法:<td th:text"${obj.name}">xx</td>--覆盖内容。

【重要】
26.web拦截器: 创建一个拦截器步骤。 1.写一个类implement HandlerIntorceepter(拦截规则) ,并重写里面所有方法。在prehandler中写拦截规则,满足规则return true,不满足,retrun false。

2.拦截器配置类(填写拦截请求等),实现WebMvcConfigurer接口,重写addIntorcepter,将1中的拦截器new一个加到addintorcepter中,addPathPatterns()--拦截请求,excludePathPatterns--不拦截哪些请求
eg:registry.addInterceptor(new Logintorcepter()).addPathPatterns("/**").excludePathPatterns("/th","/hello","/td").
拦截所有请求,不拦截/th,/hello,/td 。 ---拦截所有请求,静态资源也会被拦截。
【重要】在thymeleaf中,页面重定向时,如果需要session域中的值,需要写上session.key 才能获得。 th:text="${session.key}"。--------不知道为啥,好像thymeleaf解析默认找request域中的数据。

【重要】: 在thymeleaf中,如果在session域中放数据,得到session域中的数据需要添加域类型。 eg : th:text="${session.key}"。


27.拦截器原理,底层dispatcherservlet类中dodispatch方法中嵌套封装。 即,一个请求顺序进入所有拦截器中,然后倒序回到客户端,当所有拦截器都返回true时,显示页面。 如果有一个返回false,拦截请求。
映射请求的原理跟拦截器原理一样。都是在dodispatch中找到合适的请求,然后筛选符合的请求。



28.@webservlet(urlpattens="/请求路径")注解,将一个类声明为servlet,该类需要extends httpservlet,重写方法响应数据等。。。 专门请求该路径。

29.@webfilter(urlpattens=""/资源): 将一个类声明为过滤器,实现Filter接口,实现方法,在dofilter方法中编写拦截逻辑,如果满足逻辑就filterChain放行。 拦截访问url中的资源。

28,29需要在主程序类上添加@webcompnentscan注解标明类所在的包,才能开启@webservlet@webfilter的扫描。

30.spring配置类的方式,在@bean中配置servlet。。。。

31.springboot整合Druid:Druid-spring-boot-starter

在yml的配置文件中配置druid数据库连接信息: spring.datasource.druid.url/username/password/driver-class-name

32.springboot整合mybatis配置版: mybatis-spring-boot-starter. 1.导入 mybatis-spring-boot-starter
2.在yaml文件中绑定mapper的location(和mybatis-config.xml的位置,resource下【mybatis-config.xml可以不用配,用 configuration:
map-underscore-to-camel-case: true】)
3. 编写接口以及pojo类。
4.正常调用

eg:mybatis:
mapper-locations: classpath:mybatis/mapper/*.xml
(config-location: classpath:mybatis/mybatis-config.xml)
configuration:
map-underscore-to-camel-case: true ,写了configuration就不用配全局配置文件,直接在configuration下写需求就行。
如果pojo属性是_连接与表保持一致,则关闭驼峰命名-false。 否则打开true。

 

33.注解配置mybatis操作。 在接口方法上用@select(sql语句进行查询)就不用在sql映射文件中写sql。 简单查询用@select 复杂用sql.xml配置


34.springboot整合crud步骤:
1.创建springboot工程选择 web,thymelaeaf,jdbc,mysql,(druid可有可无,没有用springboot自带的连接池),mybatis。
2.在yml中配置连接数据库信息。
3.配置mybatis, 设置mabatis的mappersql的位置(建议放在类路径下)。 和configuration。
4.编写dao,service,controller。
5.在dao接口用@mapper注解注入ioc容器中,不然不能注入。与ssm整合不一样,ssm整合是配置扫描dao接口的包。
6.把mappersql.xml放在resource下。在3中配置。
7.正常crud操作。
8.thymeleaf自带视图解析器,看源码。

35.springboot整合mybatis-plus:
1.mybatis-plus是mybatis的强大版。只需要daomapper接口继承BaseMapper<表类型>即可,BaseMapper<表类型>里面封装了CRUD功能,泛型写操作数据库的表pojo类,与表名一致(如果不一致使用@TableName("表名"))。首字母不区分大小写。
不用写sqlmapper映射文件。 如果BaseMapper封装的操作不能完成操作,自己写sql映射文件操作即可,sql映射文件的位置:plus源码配置在resource下的mapper下的所有.xml。
2.导入mybatis-plus板块。

【注意:pojo 的属性与数据库表对应,如果有其他属性则在属性上用@tableField("exits=false")表明该属性不在表中。】

3.mybatisplus中,service层的接口继承 Iservce<pojo> , serviceImpl 继承ServiceImpl<M extends BaseMapper<T>。service层就有了封装的一些方法,就不用dao接口的方法。 如果有其他需求,自己写方法并调用。

4.mybatisplus的分页功能:在Iservice<>中封装了Page类封装分页功能。通过service调用page方法即可。 page方法的形参需要传入一个Page对象(自己new),和分页条件,没有就写null。
page方法得到的是一个泛型page对象,泛型为数据库对应的pojo类。 通过该对象可以得到current当前页,Records查询的分页数据,pages获取总页数等等。
【使用前提】需要自定义配置类中@Bean注入MybatisPlusInterceptor对象。 @Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor mybatisPlusInterceptor=new MybatisPlusInterceptor();
//分页拦截器
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(paginationInnerInterceptor);
return mybatisPlusInterceptor;

}

springboot项目不能通过getrealpath()获取工程路径。****获取的是springboot的位于c盘的临时路径,springboot会自动清除这些文件

37.项目 -- 租房网项目的问题------------------------------------------------
登录拦截器。

36.thymeleaf关于显示静态资源下的图片:
如果在某个请求中涉及到了静态资源下的资源获取(图片等),那么需要配置资源访问路径。
1.写一个配置类实现WebMvcConfigurer ,重写addResourceHandlers(ResourceHandlerRegistry registry){}方法。
2.在该方法中registry.addResourceHandler("/main/**").addResourceLocations("classpath:/static/"); 第一个为静态资源访问的路径(需要获取静态资源的路径)。 第二个为该路径访问的静态资源。


37.thymeleaf的遍历和基本用法:
【遍历在标签中用 th:each="..."】
1.遍历数组:【1-10】 : <span th:each="var:${#numbers.sequence(1,10)}"> <span>[[${var}]]</span> </span> 。 var为遍历的自定义名称。 用于页数的显示
2.遍历集合:【list】 :<span th:each="var:${list}"> <span th:text="${var}"></span> </span> 。 集合位于域中。 用于显示数据的展示。
3. 判断语句: <span th:if="判断语句">...........</span> 。 当满足if中的条件才会执行标签内的内容。 用于做<<上一页或者>>下一页翻页显示。
4.连接中传入请求参数:<a th:href="@{/请求(id=${..})}"> text</a> 。 连接带参数,用于翻页后找到对应页数。将遍历的页数值赋给id,进行页面展示。
5.@{}与${}嵌套使用: 用+号连接。 eg: @{'/'+${var.img}} -----------------获取数据库中的图片地址。 数据库图片地址存储为工程项目static下的文件夹里,存储地址为 /文件夹/**.jpg

 

 

拦截器过滤器执行顺序,先执行拦截器再执行过滤器,最后在经过请求映射。


-------------------------------------------------------------------------------

 

标签:拦截器,springboot,--,配置,bean,mybatis
来源: https://www.cnblogs.com/YuMartin/p/15694813.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有