SpringMVC+Spring+MyBatis整合笔记

1. 框架概念

程序的架子,可以快速的构建起程序的基本骨架,并为通用问题提供了便捷统一的解决方案。

2. EE开发中的框架

SSH
SSM - SpringMVC Spring MyBatis

3. Spring框架

IOC(DI) 控制反转(依赖注入)
AOP 面向切面编程
a. IOC - 低耦合
将对象创建的权利和生命周期管理的过程交由Spring容器来进行。
接口 + IOC 实现软件分层的解耦。

a. 配置文件
b. 注解方式
配置包扫描context:component-scan
通过注解将bean交由Spring管理
@Component
@Controller
@Service
@Repository
生成id的策略 - 看类名的第二个字母,如果第二个字母是小写则首字母小写作为id,如果第二个字母是大写,则首字母保持不变作为id。
也可以通过value属性手动指定id
b. DI实现
i. 配置文件
ii. 注解方式
开启注解方式DI
context:annotation-config</context:annotation-config>
通过注解实现DI
a. String 、基本数据类型
@Value(“xx”)
@Value("${xx}")
b. 集合、Map、Properties等
@Value("#{@xxx}")
3. 自定义Bean的注入
@Autowired
先按类型匹配,如果找到唯一的则自动注入,如果找不到或找到多个接着按id注入,用当前属性的属性名作为id寻找对应的bean如果找到就注入,还找不到就抛出异常。
可以通过@Qualifier(xxx)修饰,一旦修饰,则上来就按照指定id寻找bean,不再按类型寻找。
c. 其他注解
@Scope 单例/多例
@Lazy 懒加载
@PostConstruct 初始化方法
@PreDestory 销毁

d. AOP - 面向切面编程 - 高内聚
service增加了大量功能型代码造成代码混杂在一起,功能型代码重复。
通过动态代理为service创建代理,web调用的其实是代理对象,在代理对象内部调用目标service对象目标方法时,可以在方法执行之前和之后执行额外代码,从而增强service功能,可以将功能型代码从service中提取到动态代理即切面中。

i. 代理设计模式

  1. 静态代理
    简单
    所有方法都要手工实现代理,麻烦且代码重复
    ii. 动态代理
  2. java动态代理
    相对静态代理,代码不再重复,写一遍就行
    概念不好理解
    基于接口开发,如果目标方法不属于任何借口,则无法代理。
    ii. cglib动态代理
    基于继承实现,无需接口也可以实现代理。
    不是java原生的需要导入第三方开发包才可以使用。
    ii. SpringAOP中的重要概念
  3. 连接点
  4. 切入点
  5. 动态代理
  6. 切面
  7. 通知
  8. 目标对象 目标方法
  9. 织入
    iii. 切入点表达式
  10. within - 粗
  11. execution - 细
    iv. 通知
    前置
    环绕
    控制目标方法是否执行
    控制目标方法的返回值是否可以返回
    改变返回值
    后置
    异常
    最终
    v. 配置文件方式
    vi. 注解方式
    aop:aspectj-autoproxy
    @Aspect
    @Before
    @Around
    @AfterReturning
    @AfterThrowing
    @After
    @Pointcut

4. Spring-JDBC

Spring管理数据源
SpringJDBC - JDBCTemplate
SpringJDBC - 声明式事务管理
在这里插入图片描述在这里插入图片描述
@Transactional

5. SpringMVC

web层框架

6. SpringMVC工作流程

在这里插入图片描述

a. @RequsetMapping
将处理器方法映射到路径
可以用在类上 和 方法上
value
method
params
headers
b. 获取请求参数
通过request获取
直接获取
@RequestParam直接获取,手工指定
封装请求参数到bean
复杂类型处理
多个同名请求参数处理
中文乱码处理
日期处理
文件上传
表单的写法
必须有name属性
必须采用POST提交
必须设置enctype为multipart/form-data
后台处理程序的写法
在这里插入图片描述
RESTFul风格路径处理 - 将路径的一部分截取作为参数传入
在这里插入图片描述
c. 请求转发重定向 定时刷新的实现
forward:/index.jsp
redirect:/index.jsp
d. 域的使用
request域
通过request对象使用
通过Model对象使用
session与
通过session对象使用
通过Model对象配合@SessionAttributes
@ModelAttribute
xxx
e. 异常处理
配置控制器异常处理方法
配置全局异常处理
配置文件方式全局异常处理
f. 返回一段数据
@ResponseBody
g. 总结:可以用作控制器方法参数和返回值的类型

7. MyBatis

数据访问层框架 - 一行代码都不用事先CRUD

JDBC - Hibernate - MyBatis

sqlMapConfig.xml --> 配置数据源 别名 缓存开关
xxxMapper.xml -->映射文件

Map传递
bean传递
单值传递

#{} ${}的区别

增删改查的实现



手动映射结果集
如果查询的列名和bean属性名对不上 – 可以通过手工映射结果集完成封装

实现多表查询
笛卡尔积查询
内连接查询
外连接查询
左外
右外
全外

MyBatis的缓存机制
一级缓存默认开启,在一个事物内起作用
二级缓存默认关闭,全局起作用

基于接口开发MyBatis - 不写代码实现CRUD
接口的全路径名应为映射文件中声明的名称空间
接口中应该声明和映射文件中sql对应的id相同名称的方法
方法接收的参数应该和sql中接收的参数一致
方法的返回值应该和sql中声明的返回值类型一致
在这里插入图片描述

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页