SpringIOC
<html>
<head>
<title>html快速入门</title>
</head>
<body>
<font color="red">“乾坤未定,你我皆是黑马!//html语法中不区分大小写”</font>
</body>
</html>
基本格式 不区分大小写,
vue
v-model:在表单元素上创建双向绑定
v-bind:为html标签绑定属性值,如设置href css样式
v-on:为html标签绑定事件
v-if v-else v-else-if:条件性的渲染莫元素,判定为true时渲染,否则不渲染
v-show:根据条件展示某元素,区别在于切换的是display属性的值
v-for:列表渲染,遍历容器的元素或者对象属性
counted:vue的生命周期,挂载完成
创建mybatis核心配置文件主要用于配送链接数据库的环境以及mybatis的全局配置信息
日志的级别:
fatal致命 error错误 warn警告 info信息 debug调试从左到右依次级别降低
cong'zuo'dao'you'da'yin'de
分布查询的优点:可以实现延迟加载,但必须在和此乃配置文件中设置全局信息;
resultMap 设置自定义的映射关系 id:唯一标识 type 处理映射关系的实体类的类型 id:处理主键和实体类的映射关系 result 处理普通字段和实体类的映射关系 column:sql中的字段名 property:实体类中的字段名 association:处理多对一的映射关系
MyBatis获取参数值的两种方式:#{}和${} 前者的本质是占位符赋值,后者的本质是字符串拼接 1.若mapper接口方法的参数为单个的字面量类型 此时可以通过#{}和¥{}以任意的内容获取参数值,一定要注意${}的单引号问题 2.若mapper接口方法的参数为多个的字面量类型 此时mybatis会将参数放在map集合中,以两种方式存储数据 以arg0,arg1。。。,为键,以参数为值 以param1,param1,。。。 因此,只需要通过前面两种获取参数值的方式,访问集合的键,也可以获得相应的值 也可自己设置map集合,但数据需要我们手都刚在集合中
Mybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能,它存在的意义是为了解决拼接SQL语句字符串时的痛点问题。
关于分页的一些基本数据含义:
spring的生命周期
spring自动匹配
基于注解来管理bean
type:设置排除扫描的方式
//使用注解后各个类中不用设置set方法
* * 基于注解来管理bean之注解和扫描 * @Component:将类标识为普通组件 * @Controller:将类标识为控制层组件 * @Service:将类表识为业务层组件 * @Repository:将类标识为持久层组件 * 通过注解,扫描所配置的bean的id,默认值为类的小驼峰,即类名的瘦子莫为小写的结果 * 改变id可以通过在 标识组件的注解 后添加新的id * @Autowired注解能够表识的位置 * a.标识在成员变量上,此时不用设置成员变量的set方法 * b.标识在set方法上 * c。标识在为当前成员变量赋值的有参构造上= 构造器:(有参) * 原理:默认通过byType的方式,在ioc容器中通过类型匹配某个bean为属性赋值 * 若有多个类型匹配的bean,此时会自动转换为byName的方式实现自动装配的效果 * 即将要赋值的属性的属性名作为bean的id匹配某个bean的属性赋值 * 若bytype和byname的方式都无法实现自动装配,即ioc容器中有多个类型匹配的bean * 且这些bean的id和要赋值的属性的属性名都不一致,此时抛异常,nouniquebeandefinitionexception * 此时可以在赋值的属性上,添加一个注解@Qualifier * 通过注解的value属性,指定某个bean的id,将这个bean为属性赋值 */
AOP
面向切面编程
get和post的区别:
传送方式:get通过地址栏传输,而post通过报文传输
传送长度:get参数有长度限制(受限于url长度),而post没有限制,
安全性:原则上post比get安全,因为get请求的参数在url中可见,而post请求的参数在请求正文中传递,对用户是不可见的。
执行效率:get请求是可以缓存的,而post请求不可以缓存。
数据包:get产生一个TCP数据包,而post产生两个TCP数据包
SpringFramework五大功能模块:
Core Container:核心容器,在spring环境下任何功能都必须基于 IOC容器
AOP&Aspects:面向切面编程
Testing:提供了对junit或TestNG测试框架的整合。
Data Access/Integration:提供了对数据访问/集成的功能。
SpringMvc:提供面向Web应用程序的集成功能。
Myabtis与其他其它持久化层技术对比的优点
轻量级,性能出色
SQL 和 Java 编码分开,功能边界清晰。Java代码专注业务、SQL语句专 注数据
开发效率稍逊于HIbernate,但是完全能够接受
简述mybatis缓存查询顺序
先查询二级缓存,因为二级缓存中可能会有其他程序已经查出来的数据 可以拿来直接使用。
如果二级缓存没有命中,再查询一级缓存
如果一级缓存也没有命中,则查询数据库
SqlSession关闭之后,一级缓存中的数据会写入二级缓存
SpringMVC的特点:
·Spring家族原生产品,与IOC容器等基础设施无缝对接
·基于原生的Servlet,通过了功能强大的前端控制器DispatcherServlet,对请求和响应进行统一处理
·表述层各细分领域需要解决的问题全方位覆盖,提供全面解决方案
·代码清新简洁,大幅度提升开发效率
·内部组件化程度高可插拔式组件即插即用,想要什么功能配置相应组件即可
·性能卓著,尤其适合现代大型、超大型互联网项目要求
解决请求参数的乱码问题:
tomcat7.5或8.5post请求中都会有乱码
tomcat7中在server.xml中配置编码utf-8,可解决get请求方式的乱码
8.5版本中get请求是没有乱码的
注意:SpringMVC中处理编码的过滤器一定要配置到其他过滤器之前,否则无效
SpringMVC中向请求域中共享数据:
1,使用ServletAPI向request域对象共享数据
2,使用ModelAndView向request域对象共享数据
3,使用Mode向equest域对象共享数据
向session,application域中共享数据
使用servletAPI获取
Http协议里面四中请求方式的特点:
GET:查询获取资源
POST:新建资源
PUT:修改资源
DELETE :删除资源
RESTFUL简介
查询某个信息 :rest风格:前面路径没有变化,请求数据发生变化
rest风格
/* rest风格 查询所有的用户信息-->/user-->get 根据id查询所有的用户信息-->/user/1-->get 添加用户信息-->/user-->post 修改用户信息-->/user-->put 删除用户信息-->/user/1-->get 注意:浏览器目前只能发送get和post请求 若发送put和delete请求,需要在web.xml中配置HiddenHttpMethodFilter 配置了过滤器之后,发送的请求满足两个条件,才能将请求方式转换为put或delete 1.当前请求必须为post 2.当前请求必须传输请求参数_method,_method的值才是最终的请求方式 */
无法自动装配
@Autowired:注解加扫描
先看注解是否添加,再看是否扫描
json格式的转变
1,@RequestBody:将请求体中的内容和控制器方法的形参进行绑定
2,使用@RequestBody.注解将json格式的请求参数转换为java对象
a>导入jackson的依赖
b>在SpringMVC的配置文件中设置<mvc:annotation-driven/>
c>在处理请求的控制器方法的形参位置,直接设置json格式的请求参数要转换的java类型的形参,使用@RequestBody.注解
@ResponseBody:将所标识的控制器方法的返回值作为响应报文的响应体响应到浏览器
//将需要转换为json字符串的Java对象直接作为控制器方法的返回值,使用@ResponseBody注解标识控制器方法
//就可以将Java对象直接转换为json字符串,并响应到浏览器
拦截器:
配置方法:
<!-- 配置拦截器 方法一--> <!--<mvc:interceptors> <bean class="com.atguigu.interceptor.FirstInterceptor"/> </mvc:interceptors>--> <!-- 配置拦截器 方法二--> <!-- <bean id="firstInterceptor" class="com.atguigu.interceptor.FirstInterceptor"/> <mvc:interceptors> <ref bean="firstInterceptor"/> </mvc:interceptors>--> <!-- 配置拦截器 方法三 需要在拦截类中添加@Component注解, 及时浏览器路径没有匹配到控制器路径,及路径不存在,拦截器仍然执行 前面的默认是对所有的进行拦截 注解扫描 默认id为拦截器类名的小驼峰--> <mvc:interceptors> <mvc:interceptor> <!-- ”/*“ 只能表示上下文路径下的一层路径,若目录为多层的话,无法执行拦截器 要用“/**” 可以上下文路径下多层目录--> <mvc:mapping path="/**"/> <!-- 需要配置排除拦截的请求的请求路径--> <mvc:exclude-mapping path="/abc"/> <!-- 配置拦截器需要在上标注注解
@Component public class FirstInterceptor implements HandlerInterceptor {}默认为类名的小驼峰
--> <ref bean="firstInterceptor"/> </mvc:interceptor> </mvc:interceptors>
拦截器的执行顺序:
/* * 拦截器的三个方法: * preHandle:在控制器方法执行之前执行,其返回值表示对控制器方法的拦截(false)或放行(true) * postHandle:在控制器方法执行之后执行 * afterCompletion:在控制器方法执行之后,且渲染视图完毕之后执行 * 多个拦截器的执行顺序和在springmvc的配置文件中的配置顺序有关 * preHandle()按照配置的顺序执行 * 后两者按照配置的反序来执行 * 若拦截器中有某个拦截器的preHandle()返回false * 拦截器的preHandle()返回false和他之前的拦截器的preHandle()都会执行 * 拦截器的preHandle()返回false之前的拦截器的afterCompletion()会执行 */
使用xml配置和使用注解异常处理:
<!-- 数学运算异常
<prop>中的是异常的全类名和逻辑视图 key:设置要处理的异常(运算异常)value:设置出现异常是要跳转的页面所对应的逻辑视图
-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.ArithmeticException">error</prop>
</props>
</property>
</bean>
注解处理异常
/* 基于注解的异常处理 */ //将当前类表识为异常处理的组件 @ControllerAdvice public class ExceptionController { @ExceptionHandler(ArithmeticException.class) public String handleException(Throwable ex,Model model){ model.addAttribute("ex",ex); return "error"; } }
展示分页数据:
pageNum:当前页的页码
pageSize:每页显示的条数
size:当前页显示的真实条数
total:总记录数
pages:总页数
prePage:上一页的页码
nextPage:下一页的页码
isFirstPage/.isLastPage:是否为第一页/最后-页
hasPreviousPage/hasNextPage:是否存在上一页/下一页
navigatePages:导航分页的页码数
navigatepageNums:导航分页的页码,【1,2,3,4,5)]