SSM框架(相关概念)

导入:

1.SSM(SpringMVC + Spring + MyBatis)
SpringMvc:入口为前端控制器;针对于方法级别的请求的,也就是一个方法对应于一个请求。
MyBatis:创建SqlSessionFactory

2.SSH(struts2 + spring + Hibernate) ---- Web应用程序开源框架(不过听说已过时。)
struts2:入口为filter过滤器;是针对一个Action类来进行请求的,即一个Action类对应于一个请求。
Hibernate:创建SessionFactory

一,spring

1.概念:Spring是一栈式的轻量级开源框架

  • 一栈式:意思就是spring可以很方便的和其他企业级开源框架或者第三方核心类库整合;
  • 轻量级:在使用spring时不需要依赖其相关的API(也就是说不需要实现任何的接口);
  • 容器:spring就是一个容器,主要用来创建和管理对象。

2.两大核心
1)IoC(Inverse Of Control:控制反转)

Bean的依赖注入:依赖注入(Dependency Injection),简称DI。它是 Spring 框架核心 IOC 的具体实现。在编写程序时,通过控制反转,把对象的创建权交给了 Spring。通过IOC 解耦只是降低他们的依赖关系,但不会消除。例如:业务层仍会调用持久层的方法,通过框架把持久层对象注入业务层,而不用我们自己去手动获取。

2)AOP(Aspect Oriented Programming:面向切面编程)

  • 概念:AOP 是 OOP 的延续。

  • 作用:在程序运行期间,在不修改源码的情况下对方法进行功能增强。

  • 优势:减少重复代码,提高开发效率,并且便于维护。

  • 底层实现:通过spring提供的动态代理方式来实现,在运行期间,Spring通过动态代理技术动态的生成代理对象,代理对象方法执行时进行增强功能的介入,再去调用目标对象的方法,从而完成功能的增强。
    常用的动态代理:
    1)JDK 代理 : 基于接口的动态代理技术
    2)cglib 代理:基于父类的动态代理技术

  • AOP的相关术语:
    1)Joinpoint(连接点):所谓连接点是指那些被拦截到的,有可能执行的方法。
    2) Pointcut(切入点):所谓切入点是指我们要对哪些连接点进行方法的执行。(连接点的范围广)
    3)Advice(通知/ 增强):所谓通知是指具体增强的方法。
    4)Aspect(切面):是切入点和通知的结合
    5)Weaving(织入):这是一个动词,是切入点和通知结合的过程。

  • 通知的五种类型:
    1)前置通知-before
    2)后置通知-afterReturning
    3)环绕通知-around
    4)异常抛出通知-afterThrowing
    5)最终通知-after(不论是否有异常,都会执行)
    注意:(异常抛出通知和后置通知只会执行其中的一个)
    try{

    前置通知
    目标方法
    后置通知

    }catch{

    异常抛出通知

    }finally{

    最终通知

    }

  • 切点表达式:切点表达式:execution("* 全包名.*.*(..)")

在这里插入图片描述
3.优势
1)方便解耦,简化开发
2)AOP 编程的支持
3)声明式事务的支持
4)可以方便和其他第三方框架整合

二,springMVC

  1. 概述:SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架。

  2. 执行流程:(盗的图哈哈哈)
    在这里插入图片描述

  3. 拦截器:Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。

拦截器和过滤器的区别

拦截器过滤器
使用范围:只有springMVC框架才能使用使用范围:servlet的规范,所有的web应用均可使用
拦截范围:/*只能拦截控制器方法(底层是AOP,只会对方法增强)拦截范围:/*拦截所有请求,包括静态资源,js,css等
运行环境:只要有JDK即可运行环境:必须依赖servlet容器

4.处理器映射器和处理器适配器的概念
处理器映射器 : 根据用户提交的url和自身的映射规则找到对应的处理器,返回处理器执行链。
处理器适配器 : 根据处理器类型找到对应的处理器适配器,然后调用处理器中的业务方法,也就是我们写的controller。
关系 : 都是由前端控制器控制,映射器是找到处理器类型,适配器是调用该处理器的方法。

三,Mybatis

1.概念:mybatis 是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。

mybatis框架通过ORM(对象关系映射)思想采用反射、内省等底层机制完成数据库表到实体类属性的映射。

  • 反射机制:在运行期,动态的获取类的方法和属性,进行操作

  • 内省机制:在反射的基础上,操作JavaBean对象。主要操作JavaBean对象的属性以及属性对应的get和set方法

2.使用Mybatis代理方式实现dao(或者mapper)时遵守的规则:
1、mapper配置文件中的namespace必须是接口的全限定类名;
2、mapper配置文件中的statement中的id必须和接口的方法名一致;
3、mapper配置文件中statement中的parameterType必须和方法的参数类型一致;resultType必须和方法的返回值真实类型(也就是泛型)一致;
4、接口的类名和mapper配置文件的名称是一致的
例如: UserMapper.java / UserMapper.xml;
5、接口所在的目录和mapper配置文件所在的目录结构一致 。

<mappers>
	<!--通过对包扫描,找到包下的所有接口,会根据这个接口的名称加上.xml组合再去resources目录下根据和接口一致的目录下寻找对应的映射文件-->
    <package name="域名.包名.mapper"/>
</mappers>

3.MyBatis核心配置文件常用标签:

  • properties标签:该标签可以加载外部的properties文件(例如:加载jdbc.properties);
  • typeAliases标签:设置类型别名;
  • environments标签:数据源环境配置标签;
  • typeHandlers标签:配置自定义类型处理器 (例如:Date日期类型->long类型的毫秒值);
  • plugins标签:配置MyBatis的插件 (例如:分页助手插件);
  • mappers标签:告诉 MyBatis 到哪里去找映射文件;
  • settings标签:
    1.使用mapUnderscoreToCamelCase(默认为false)—是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。
    2.使用useGeneratedKeys(默认为false) ----允许 JDBC 支持自动生成主键,需要驱动支持。 如果设置为 true 则这个设置强制使用自动生成主键,尽管一些驱动不能支持但仍可正常工作(比如 Derby)。
<settings>
	<setting name="useGeneratedKeys" value="true"/>
	<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

4. ${} 和 #{} 的区别
$表示的是sql的拼接,所有的sql语句必须程序员自己保证正确性。

  • 注意:表达式只能是 ${value}

#表示占位符,通过日志查看,先给定一个?来占位;可以防止sql注入。

  • 如果参数只有一个,表达式可以是任意的字符串— #{任意字符}
  • 如果参数是一个对象,表达式必须为对象的属性名

5.多表查询时的映射文件

 - 一对一配置:使用<resultMap>来配置  (或者 <resultMap>+<association>来配置) 
	--例如:一个订单对应一个用户
 - 一对多配置:使用<resultMap>+<collection>来配置
	--例如:一个用户有多个订单
 - 多对多配置:使用<resultMap>+<collection>来配置
 	--例如:一个人有多个角色,一个角色可以被多个人扮演

6.MyBatis的注解:

  • @Insert:实现新增
  • @Update:实现更新
  • @Delete:实现删除
  • @Select:实现查询
  • @Result:实现结果集封装
  • @Results:可以与@Result 一起使用,封装多个结果集
  • @One:实现一对一结果集封装
  • @Many:实现一对多结果集封装

其他有关概念:
1.关于el表达式的param隐含对象:
1)request.getParameter(): 是通过提交表单时类似post,get等方式传过来的数据,从页面传到服务器端,返回string类型的数据。
2)request.getAttribute(): 只会存放到web容器中,request域中,再通过request域来获取数据。
3)el表达式中的隐含对象:param
${param.name}实际上相当于request.getParameter(“name”);

未完待续…

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值