- 一,spring mvc
- 二,mybatis
- ">
- 三,spring
- IOC:就是把创建对象的控制权转移给spring容器,正常情况下我们新建一个对象,才可以调用对象。当把控制权交给spring容器后,new一个对象的工作就交给了spring了,我们就可以直接调用不需要我们自己
- DI:就是实现控制反转的一种方式,只需要在程序中提供使用对象的名称,至于对象是如何创建、赋值都是容器完成的。
- 它有构造器注入、setter注入、接口注入。它降低了依赖和被依赖之间的耦合,就比如@Autowired、@Component等都体现了依赖注入。
- AOP:就是面向切面编程,就是在不改变代码原有的功能的基础上对代码的类和方法就行增强的一种做法。它可以用来做日志、做权限、,当一个类包含了连接点、切点和通知那这个类就是一个切面,它的通知包括前置通知、后置通知、环绕通知、异常通知、最终通知。
- spring注解:
一,spring mvc
1,Spring MVC的主要组件?
- DispatcherServlet:前端控制器,用于请求到达前端控制器,由它处理用户的请求。
- HandlerMapping:处理器映射器,负责根据用户请求找到Handler(处理器)。
- Handler:处理器,对具体的用户请求进行处理。
- HandlerAdapter:处理器适配器,通过HandlerAdapter对处理器进行执行。
- View Resolver:视图解析器,负责将处理结果生成view视图。
浏览器向服务器发送请求,被前端控制器拦截,将请求交给处理器映射器,处理器映射器根据请求的URL去找到处理器,处理器匹配一个controller名字然后将controller的名字返回给前端控制器,然后把controller的名字交给处理适配器,然后处理适配器去调用controller这个类的对象(spring创建的),然后controller返回一个modelandview的结果,然后将modelandview交给视图解析器解析,视图解析器根据jsp或者HTML的名字把名字返回给前端控制器,最后前端控制器把model数据渲染到jsp或HTML上。
拦截器
实现拦截器的方法
1.通过实现HandlerInterceptor接口,或继承HandlerInterceptor接口的实现类(如HandlerInterceptorAdapter)来定义。
自定义拦截器实现了HandlerInterceptor接口,并实现了接口中的三个方法:
- preHandle() 方法:该方法会在控制器方法前执行,其返回值表示是否中断后续操作。当其返回值为true时,表示继续向下执行;
当其返回值为false时,会中断后续的所有操作(包括调用下一个拦截器和控制器类中的方法执行等)。 - postHandle()方法:该方法会在控制器方法调用之后,且解析视图之前执行。可以通过此方法对请求域中的模型和视图做出进一步的修改。
- afterCompletion()方法:该方法会在整个请求完成,即视图渲染结束之后执行。可以通过此方法实现一些资源清理、记录日志信息等工作。
1.程序先执行preHandle()方法,如果该方法的返回值为true,则程序会继续向下执行处理器中的方法,否则将不再向下执行。
2.在业务处理器(即控制器Controller类)处理完请求后,会执行postHandle()方法,然后会通过DispatcherServlet向客户端返回响应。
3.在DispatcherServlet处理完请求后,才会执行afterCompletion()方法。
二,mybatis
1,MyBatis 是半ORM(对象关系映射框架)支持定制化 SQL、存储过程以及高级映射的持久层框架。
Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?
mybatis仅支持关联对象association和关联集合对象collection的延迟加载。
association 指的就是一对一,collection 指的就是一对多查询。
2,MyBatis传递多个参数:
cache
– 给定命名空间的缓存配置。cache-ref
– 其他命名空间缓存配置的引用。resultMap
– 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。sql
– 可被其他语句引用的可重用语句块。insert
– 映射插入语句update
– 映射更新语句delete
– 映射删除语句-
4,MyBatis 日志
mybatis内置的日志工具:
SLF4J
- Apache Commons Logging
- Log4j
-
5,resultType和resultMap的区别
resultType用于返回值只有一个字段的类型。
-
6,Mybatis和ORM的区别
-
7,mybatis实现分页功能
逻辑分页:使用limit。
-
8,MyBatis 中#{}和${}区别
#{} 是预编译处理,像传进来的数据会加个” “,#将传入的数据都当成一个字符串。
${} 就是字符串替换。直接替换掉占位符。$方式一般用于传入数据库对象,例如传入表名.使用 ${} 的话会导致 sql 注入。什么是 SQL 注入呢?比如 select * from user where id = ${value},value 应该是一个数值吧。然后如果对方传过来的是 001 and name = tom。这样不就相当于多加了一个条件嘛?把SQL语句直接写进来了。如果是攻击性的语句呢?001;drop table user,直接把表给删了
9,MyBatis接口绑定的几种方式
1、使用注解,在接口的方法上面添加@Select@Update等注解,里面写上对应的SQL语句进行SQL语句的绑定。
- 2、通过映射文件xml方式进行绑定,指定xml映射文件中的namespace对应的接口的全路径名
10,Batis缓存机制
mybatis的缓存分为两级:一级缓存、二级缓存,一级缓存为sqlsesson
缓存,二级缓存是mapper
级别的缓存.11,mybatis中实体类属性名和表中字段名不一致解决方法
3种方法:
- mapper文件中写SQL语句时起别名
- mybatis-config.xml中开启驼峰命名规则
- 自定义高级映射
mybatis提供的功能:
- Mabatis是JDBC的增强,它提供了创建Connection,Statement的能力,提供了执行SQL的能力。
- 提供了循环SQL,把SQL的结果转为java对象,List集合的能力。
- 提供了关闭资源的能力,不需要你关闭Connection,Statement。
- 开发人员提供SQL语句—-mybatis处理SQL—-开发人员得到List集合或者java对象(表中的数据)
总结:mybatis是一个SQL映射框架,提供数据库的操作能力。内部封装了JDBC,使用mybatis让开发人员只注重sql,不必关心Connection、Statement,Resultset的创建、销毁和SQL的执行。
mybatis全局配置文件
properties标签:引入外部配置文件,比如连接数据库信息
setting标签:开启驼峰命名
typeHandles标签:类型处理器
plugins标签:插件
environments标签:环境们,mybatis可以配置多种环境
transactionManager标签:事务管理器
使用 MyBatis 的 mapper 接口调用时有哪些要求?
1、Mapper 接口方法名和 mapper.xml 中定义的每个 sql 的 id 相同;
2、Mapper 接口方法的输入参数类型和 mapper.xml 中定义的每个 sql 的
parameterType 的类型相同;
3、Mapper 接口方法的输出参数类型和 mapper.xml 中定义的每个 sql 的
resultType 的类型相同;
4、Mapper.xml 文件中的 namespace 即是 mapper 接口的类路径
三,spring
APP先读取配置文件,读到一个bean标签,bean标签里面有id,和class,然后根据class的全路径到硬盘上加载到内存中,利用反射创建该类的实例,然后将id作为key,把类的实例作为value,存到Map中,Map在Bean池里面,Bean池又在IOC容器里面。最后app使用getBean()方法获取bean。
IOC:就是把创建对象的控制权转移给spring容器,正常情况下我们新建一个对象,才可以调用对象。当把控制权交给spring容器后,new一个对象的工作就交给了spring了,我们就可以直接调用不需要我们自己
DI:就是实现控制反转的一种方式,只需要在程序中提供使用对象的名称,至于对象是如何创建、赋值都是容器完成的。
它有构造器注入、setter注入、接口注入。它降低了依赖和被依赖之间的耦合,就比如@Autowired、@Component等都体现了依赖注入。
AOP:就是面向切面编程,就是在不改变代码原有的功能的基础上对代码的类和方法就行增强的一种做法。它可以用来做日志、做权限、,当一个类包含了连接点、切点和通知那这个类就是一个切面,它的通知包括前置通知、后置通知、环绕通知、异常通知、最终通知。
spring注解:
@Controller用于标记一个类,是这个类成为一个控制器类,但是仅仅只有@Controller还不足以作为一个能能处理请求的处理器,需要和@RequestMapping配合使用,这个时候才能真正的作为处理器对请求进行处理。
@Autowired在bean需要注入的时候使用。
spring的依赖注入有哪几种方式
1. 接口注入
2.set注入
3.构造注入
IOC创建对象的几种方式
1)调用无参数构造器
2)带参数构造器
3)工厂创建对象
工厂类:静态方法创建对象
工厂类:非静态方法创建对象