Spring,Springmvc,MyBatis
最终形成 id in (1,2,3,4,5,6,7,8,9) 类似这种形式
最终形成, values (1,2) ,(1,3) ,(1,4) ,(1,5)
实体类中含有 list对象,其list中装着其他另外一个对象的 拼接方式
resultMap N+1的方式 实际就是多了select属性
同一个sqlSession 对象,操作同一个sql资源,是从缓存中读取的,
不同的sqlSession对象,操作同一个sql资源,都会缓存,资源浪费
使用sqlSession对象操作数据库的时候,会现在sqlSession自己的缓存中查看是否有现成的数据
,有就返回,没有则继续查看factory的缓存中是否拥有,有返回,没有则去数据库中获取资源,
将资源返回的同时,在sqlSession的缓存中存储,当sqlSession被 commit或者close的时候,会将缓存
解决问题是,不同线程获取的factory对象是相同的,但是获取的sqlSession对象是不同的
SpringIOC 也叫控制反转, 控制:容器创建对象的过程,反转: 将对象返回给调用代码的过程
核心原理: 创建一个容器对象,将责任链中需要解耦的对象全部存储到容器中,由本来的直接创建
变成现在的从容器中获取,如果需要对对象进行升级,对容器中的对象进行替换就可以
实现不修改源代码的功能扩展, AOP依赖IOC,要扩展的切点,必须被spring管理
SpringAOP帮助我们实现代码功能的扩展是使用了代理设计模式
实现了 InvocationHandler 接口 ,有代理对象,代理方法,代理对象接受的实参
2.cglib动态代理 : 必须继承真实对象,是真实对象的子类
创建一个实现了MethodInterceptor接口的java类,并且复写方法intercept
Spring整合了mybatis之后,SqlSession对象由我们自己创建变成了spring管理,实现事务管理
的方法有2种,1. 从Spring中获取被管理的mybatis对象,然后使用对象自己完成事务管理代码的编写 ----- 编程式事务
2.让Spring进行事务的管理,我们只需要声明哪些代码需要被事务管理-----声明式事务
default,默认使用全局的注入的方式,在beans标签中配置,
1.singletom 单利,同一个id无论获取多少次都是同一个对象
2.prototype,在获取getBean的时候,就算是同一个id每次获取的对象都不一样
5.application 在application对象内饰单例的
1. @Component 创建类对象,相当于配置<bean/>
bean的ID默认为类名首字母小写,也可以指定ID,例如@Component("stu")
3. @Repository 与@Component功能相同.
4. @Controller 与@Component功能相同.
5.2 默认按照byName注入,如果没有名称对象,按照byType注入
12. @AfterReturning 后置通知,必须切点正确执行
<context:component-scan base-package="包名路径"></context:component-scan>
SpringMVC 就是用来实现 servlet和其他层解耦的,出现了controller层
1.首先在web.xml中 配置,加载springMVC 配置文件的方式
请求转发:forward:默认可以不写,/代表当前项目 如果不写forward 自定义视图解析器会添加前缀和后缀
SpringMVC上传,设置form表单的属性为 multipart/form-data
DispatcherServlet : servlet分发器,整个SpringMVC框架的入口
HandlerMapping:寻找URL所请求的HanDlerMethod,验证合法性