SSM框架学习
目录
1. 定义:可重用的、半完成的应用程序、通过类互相组合而成的........................................... 1
① 业务逻辑组件:程序要处理的具体业务逻辑(方法)...................................................... 2
② 应用系统服务组件:程序就像控制、事务处理、安全性、输入校验、异常处理..... 2
a) 提醒:需要程序员开发的是要程序员做一下配置就可以。........................................... 5
(1) 海纳百川:作为资源的整合、管理软件中的对象...................................................... 12
a. 构造注入:构造方法中的属性参数赋值............................................................................ 17
a. 两者的区别:编程式事务侵入性比较强,但处理力度更精细.................................... 20
一、 什么是框架:
1.**定义:可重用的、半完成的应用程序、通过类互相组合而成的**
2.**为什么要开发框架:**
(1)**抽取应用程序通用功能:应用程序大体由两类不同性质的组件组成;**
①**业务逻辑组件:程序要处理的具体业务逻辑(方法)**
②**应用系统服务组件:程序就像控制、事务处理、安全性、输入校验、异常处理**
1)**例如:一个银行系统和一个学生管理系统,他们处理业务方面大不相同,不可得到重复利用,而应用系统服务组件在不同的系统中可以得到很好的重,从而被做成一个半成品程序**
(2)**统一J2EE架构和技术:所以规范J2EE技术来实现自己的架构,可以规范B/S页面规范、Java编码规范、日志规范,一旦统一编码规范就可以提高程序的可读性。J2EE技术多样如果不统一,会造成三不利:**
1)**不利后续维护和管理**
2)**不利开发人员的沟通交流**
3)**不利应用程序的维护和管理**
a.**J2EE:分布式的服务器应用程序设计环境,拥有很对技术集合体,如:HTML、JSP、JDBC、XML、WebService,一个java环境,它提供了:1、程序应用的一个运行基础框架环境;2、一套用来创建应用的javaAPI,所有J2EE是以Java为规范的一门技术**
二、**SpringMVC**
1.**SpringMVC概述**
(1)**概述:是一个基于mvc的web框架,是spring框架的一个模块,所以Spring和SpringMVC无需通过中间整合层进行整合,如下图:**

(2)**SpringMVC设计模式**
①**控制程序流转的控制器(controller)**
②**封装数据处理的数据模型(Model)**
③**负责展示数据的视图(view)**
符合MVC设计思想的软件应该保证上面三部分相互独立、互不干扰,每一个部分只负责自己擅长的部分
④
2.**Sping MVC工作原理**

a.**向服务器发送Http request请求,请求被前端控制器(DispatcherServlet)捕获**
b.**前端控制器根据xml文件中的配置(或者注解)对请求的URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用处理器映射器(HandlerMapping)获得处理该请求的Handler以及Handler对应的拦截器,最后以 HandlerExecutionChain 对象的形式返回。**
c.**前端控制器根据获得的Handler,选择一个合适的处理器适配器(HandlerAdapter)去执行该Handler。**
d.**处理器适配器提取request中的模型数据,填充Handler入参,执行处理器(Handler)(也称之为Controller)(Controller--> service --> Dao -->** 数据库).
e.**Handler(Controller)执行完成后,向处理器适配器返回一个ModelAndView对象,处理器适配器再向前端控制器返回该ModelAndView对象(ModelAndView只是一个逻辑视图)。**
f.**根据返回的ModelAndView,前端控制器请求一个适合的视图解析器(ViewResolver)(必须是已经注册到Spring容器中的ViewResolver)去进行视图解析,然后视图解析器向前端控制器返回一个真正的视图View(jsp)。**
g.**前端控制器通过Model解析出ModelAndView中的参数进行解析,最终展现出完整的View并通过Http response返回给客户端。**
a)**提醒:需要程序员开发的是要程序员做一下配置就可以。**
i.**前端控制器DispatcherServlet(不需要程序员开发)**
作用:接收请求,响应结果,相当于转发器,中央处理器。有了DispatcherServlet减少了其它组件之间的耦合度
ii.**处理器映射器HandlerMapping(不需要程序员开发)**
作用:根据请求的url查找Handler
iii.**处理器适配器HandlerAdaper(不需要程序员开发)**
作用:按照特定规则(HandlerAdaper要求的规则)去执行Handler
iv.**处理器Handler(需要程序员自己开发)**
v.**视图解析器ViewResolver(不需要程序员开发)**
作用:进行试图解析,根据逻辑试图名解析成真正的视图(view)
vi.**试图View(需要程序员开发的jsp)**
View**是一个接口,实现类支持不同的View类型(jsp\pdf)**
3.**SpringMVC的应用**
(1)**在pom.xml中引入SpringMVC所需的jar包**
(2)**在web.xml中配置SpringMvc,主要配置:**

1)**(servlet)SpringMVC前端控制器**
2)**(servlet)配置SpringMVC的核心配置文件位置,默认在WEB-INF,默认名字为springmvc-servlet.xml**
3)**(servlet-mapping)配置拦截所有请求(除jsp外),所有请求都要经过前端控制器**
(3)**在main/resource中创建springmvc-config.xml文件,主要配置:**

1)**配置前端放行静态资源html/js/css等,否则静态资源无法访问**
2)**配置注解驱动,用于识别注解**
3)**配置需要扫描的包,如果扫描到的类上有@Controller的类会去自动注册Bean对象**
4)**配置内部资源视图解析器**
(4)**在main/java中创建测试类,方法名要与注释一样,返回值有三种:**
1)**返回pags中的文件,直接返回pags中的视图**
2)**转发:地址不变,返回另一个页面**
3)**重定向:获取另一个资源,地址发生改变**
4.**SringMVC中的web.xml和springmvc-config.xml一些不知道的**
(1)**War工程为什么要有web.xml:**
该servelt会在服务启动的时候立即加载,并且在加载时需要一个springMVC配置文件,默认情况下,会去应用程序文件夹的web-info下找[servlet-name].xml文件,也可以把springMVC配置文件放到程序文件夹的任何地方,用init-param描述,contextConfigLocation描述的就是配置文件所在位置,这样DispatcherServlet会去加载springmvc-config.xml文件,并根据该文件信息创建一个WebApplicationContext容器对象,也成为上下文环境。这个对象继承与ApplicationContext容器,他的初始化与BeanFactory、ApplicationContext有所区别,因为WebApplicationcontext需要ServletContext实例,也就是说他必须在拥有Web容器的前提下才能完成启动SpringWeb应用上下文的工作。有了WebApplicationcontext,就可以使用spring的IOC和AOP等其他功能了。
DispatcherSerlet**是前端控制器,核心功能是分发请求,分发给对应的java类,在springMVC中称为Handle**
spring2.5**之前控制器唯一的方法就是实现org.springframework.web.servlet.mvc.Controller接口,并且只能只处理单一动作的单一请求spring2.5之后控制器可以支持注解的方式,并且无需实现任何接口,可以支持同时处理多个请求.**
基于实现Controller接口的控制器的web应用,配置springmvc-config.xml。基于注解的控制器的web应用,配置springmvc-config.xml。视图解析器如果配置前缀和后缀,调用视图时会自动拼接前缀和后缀
三、**Mybatis**
1.**Mybatis框架**

1)**Mybati框架介绍**
a.**sqlMapConfig.xml的配置,该配置时Mybatis的核心配置,通过配置可以生成SqlSessionFactory对象,也就是SqlSession的工程**
b.**基于SqlSessionFactory可以生成SqlSession(会话)对象,类似于JDBC的Connection,用于连接数据库**
c.**Executor是SqlSession的底层对象,用于执行SQl语句**
d.**MapperStatment对象是sqlSession底层,用于接受输入映射(SQl语句参数),以及输出映射(SQL查询/修改的结果映射成相应结果)**

2)**Mybatis框架使用**
a.**创建SqlMapConfig.xml配置文件,规定在src即源码根下创建文件**
b.**创建pojo(简单的java对象)包,实际就是普通的javaBean(java容器),也叫实体类,用于封装数据库获取的一系列信息,例如Emp,封装表Emp中的id、name、jod、salary,而属性一般私有的,所以会提供set&get方法**
c.**创建Empmapper.xml,放在pojo包中与Emp实体类一起,用于映射是同类Emp**
a)**提醒:**
SqlMapConfig**。Xml属于全局配置文件,里面有执行mybatis的环境、管理事务、连接池、连接数据库、引入Mapper.xml等配置;**
Mapper.xml**编写sql语句,里面配置该文件的名字namespce,程序执行会根据名字找到该文件;id值,用于程序找到文件后执行哪个id的语句,所以要求值不重复**
b)**其中有where元素、set元素、foreach元素**
c)**两种执行程序方法:**
i.**自己编写映射文件的位置**

ii.**通过接口的映射让程序返回映射文件的位置(接口名要与Mapper.xml中的namespace一样),如下Mapper.xml**


执行类

iii.
2.**Mybatis的优缺点**
①**优点:SQL写在XML中,便于统一管理的优化,提供映射标签,支持对象和数据库的orm字段关系映射,可以对SQL进行优化**
②**SQL工作量大,mybatis的移植性不好,不支持级联**
四、**Spring**
1.**spring概述**
(1)**海纳百川:作为资源的整合、管理软件中的对象**
2.**Spring架构图介绍**
| 模块 | 说明 | |
|---|---|---|
| 1. | 核心容器Spring Core | 核心容器,提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转(IOC)模式,将应用程序的配置和依赖性规范与实际的应用程序代码分开。 |
| 2. | Spring Context | Spring**上下文,是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。** |
| 3. | Spring AOP | 通过配置管理特性,Spring AOP 模块直接将面向切面的编程功能集成到了 Spring 框架中。可以很容易地使 Spring框架管理的任何对象支持AOP。Spring AOP模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,就可以将声明性事务管理集成到应用程序中。 |
| 4. | Spring DAO | JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。 |
| 5. | Spring ORM | Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括JDO、Hibernate和iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。 |
| 6. | Spring Web | Web**上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以Spring 框架支持与 Jakarta Struts的集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。** |
| 7. | Spring MVC**框架** | MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现**。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。** |
Spring 框架的功能可以用在任何J2EE服务器中,大多数功能也适用于不受管理的环境。Spring 的核心要点是:支持不绑定到特定J2EE服务的可重用业务和数据访问对象。毫无疑问,这样的对象可以在不同J2EE环境(Web或EJB)、独立应用程序、测试环境之间重用。
3.**主要jar组成**
| 模块 | 说明 | |
|---|---|---|
| 1. | org.springframework.core | 核心工具包,其他包依赖此包 |
| 2. | org.springframework.beans | 核心,包括:配置文件,创建和管理bean等 |
| 3. | org.springframework.aop | 面向切面编程,提供AOP的实现 |
| 4. | org.springframework.context | 提供IoC功能上的扩展服务,此外还提供许多企业级服务的支持,邮件、任务调度、JNDI定位、EJB集成、远程访问、缓存以及多种视图层框架的支持 |
| 5. | org.springframework.web.mvc | 包含SpringMVC应用开发时所需的核心类 |
| 6. | org.springframework.transaction | 为JDBC、Hibernate、JDO、JPA提供一致的声明式和编程式事务管理 |
| 7. | org.springframework.web | 包含Web应用开发时所需支持类 |
| 8. | org.springframework.aspects | 提供对AspectJ框架的支持 |
| 9. | org.springframework.test | 对junit等测试框架的简单封装 |
| 10. | org.springframework.asm | 3.0后提供自己独立的,反编译 |
| 11. | org.springframework.context.support | Context的扩展支持,用于mvc方面 |
| 12. | org.springframework.expression | Spring表达式语言 |
| 13. | org.springframework.instument | 对服务器的代理接口 |
| 14. | org.springframework.jdbc | 对jdbc的简单封装 |
| 15. | org.springframework.jms | 为简化jms api的使用而做的简单封装 |
| 16. | org.springframework.orm | 整合第三方orm,如hibernate/mybatis |
| 17. | org.springframework.web.servlet | 增强servlet |
4.**Spring使用**
(1)**IOC通过spring容器创建对象**
a.**在Maven中的pom.xml:配置spring相关依赖包**
b.**在main/resource源目录:创建applicationContext.xml**
i)**文件内容主要有:声明bean对象,标志id,类目录bean对象的全路径**

b)**在main/java中:创建测试类**
i.**加载spring核心文件applicationContext,**
ii.**从spring容器中获取bean对象**

(2)**DI通过注入依赖为属性赋值**
a.**构造注入:构造方法中的属性参数赋值**
b.**Setter注入:方法中的属性参数赋值**
5.**Spring基础主要是IOD/DI**
(1)**IOC(Inversion of Controller):它是把传统程序代码直接操控对象的调用全交给容器(Bean),通过容器来实现对象组件的装配和管理,所谓控制反转就是对组件对象权的转移,从程序代码转移到容器中**
| 传统方式 | 创建一个老师,并输出 | 传统和传统的改进对输出都一样没有变化,只不过接口可以有很多人的共性 |
|---|---|---|
| 传统改进 | 创建一个接口人,老师的类可以实现接口,学生的类也可以实现接口 | |
| spring**方式** | a. 先在类包里创建一个spring的配置文件spring-crg.xml,内容略······ b. 需要把一些bean设定到spring的配置文件中,例如把老师的类的这个bean设定进取,然后配置文件内容,列出主要部分<bean id="thePerson" class="com.liumiao.demo.spring.Teacher"> </bean> | 使用spring来设定人物对象是老师还是学生都很方便,且编写代码很少 |

(2)**DI(Dependency Injection):DI称为注入依赖,传统中需要自己new对象,调用者和被调用这耦合度高,这样不利于软件的移植和维护。在spring中通过IOC容器中会动态的向某个对象提供它所需的其它对象,不想以前new出来,脱俗点通过容器就是给属性赋值。注入有:构造注入、setter注入、值注入、propertier方式值注入、注解注入、java配置注入**
①**构造注入:在一个类构造方法中有一个属性需要需要赋值,我们可以通过spring的依赖注入,通俗就是给构造方法传参数,优点强制你注入;缺点:构造参数多看起来不好看**

②**setter注入:给类中的方法传参数,可能会有空值的注入,使用时可以给默认值**

③**值注入:通过set方法给属性赋值,其中controller也可以值注入,而且有三种索引方法赋值**
a.**根据下标索引**
b.**根据属性名索引 张三**
c.**根据属性类型索引**

④
6.**为什么要使用Spring**
①**方便、解耦**
②**spring能够很好的和各大框架整合**
③**Spring通过IOC容器管理了对象的创建和销毁 工厂模式(设计模式 )**
④**声明式事务的支持:在使用hiberna、mybatis的时候,不用每次都编写提交事务的代码,可以用spring的AOP来管理事务**
⑤**本质是管理软件中的对象,即创建对象和维护对象之间的关系**
7.**什么是事务?**
(1)**定义:事务由一种机制,可以将一系列数据库更改归入一个逻辑单元,所以事务具有(ACID)原子性、一致性、隔离性、持久性这几种属性**
(2)**什么是分布式事务?**
8.**编程式事务和声明式事务的区别?**
(1)**编辑式事务:需要在代码中直接加入处理事务的逻辑,在代码中显示调用commit()、rollback、等事务相关方法,需要自己开启事务和关闭事务**
(2)**声明式事务:在方法外围添加注解或直接在配置文件中定义,方法需要事务处理的时候,spring会在方法前后拦截并添加事务**
a.**两者的区别:编程式事务侵入性比较强,但处理力度更精细**
五、**SSM框架**
1.**对ssm框架的认识**
目录
1. 定义:可重用的、半完成的应用程序、通过类互相组合而成的........................................... 1
① 业务逻辑组件:程序要处理的具体业务逻辑(方法)...................................................... 2
② 应用系统服务组件:程序就像控制、事务处理、安全性、输入校验、异常处理..... 2
a) 提醒:需要程序员开发的是要程序员做一下配置就可以。........................................... 5
(1) 海纳百川:作为资源的整合、管理软件中的对象...................................................... 12
a. 构造注入:构造方法中的属性参数赋值............................................................................ 17
a. 两者的区别:编程式事务侵入性比较强,但处理力度更精细.................................... 20
一、 什么是框架:
1.**定义:可重用的、半完成的应用程序、通过类互相组合而成的**
2.**为什么要开发框架:**
(1)**抽取应用程序通用功能:应用程序大体由两类不同性质的组件组成;**
①**业务逻辑组件:程序要处理的具体业务逻辑(方法)**
②**应用系统服务组件:程序就像控制、事务处理、安全性、输入校验、异常处理**
1)**例如:一个银行系统和一个学生管理系统,他们处理业务方面大不相同,不可得到重复利用,而应用系统服务组件在不同的系统中可以得到很好的重,从而被做成一个半成品程序**
(2)**统一J2EE架构和技术:所以规范J2EE技术来实现自己的架构,可以规范B/S页面规范、Java编码规范、日志规范,一旦统一编码规范就可以提高程序的可读性。J2EE技术多样如果不统一,会造成三不利:**
1)**不利后续维护和管理**
2)**不利开发人员的沟通交流**
3)**不利应用程序的维护和管理**
a.**J2EE:分布式的服务器应用程序设计环境,拥有很对技术集合体,如:HTML、JSP、JDBC、XML、WebService,一个java环境,它提供了:1、程序应用的一个运行基础框架环境;2、一套用来创建应用的javaAPI,所有J2EE是以Java为规范的一门技术**
二、**SpringMVC**
1.**SpringMVC概述**
(1)**概述:是一个基于mvc的web框架,是spring框架的一个模块,所以Spring和SpringMVC无需通过中间整合层进行整合,如下图:**

(2)**SpringMVC设计模式**
①**控制程序流转的控制器(controller)**
②**封装数据处理的数据模型(Model)**
③**负责展示数据的视图(view)**
符合MVC设计思想的软件应该保证上面三部分相互独立、互不干扰,每一个部分只负责自己擅长的部分
④
2.**Sping MVC工作原理**

a.**向服务器发送Http request请求,请求被前端控制器(DispatcherServlet)捕获**
b.**前端控制器根据xml文件中的配置(或者注解)对请求的URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用处理器映射器(HandlerMapping)获得处理该请求的Handler以及Handler对应的拦截器,最后以 HandlerExecutionChain 对象的形式返回。**
c.**前端控制器根据获得的Handler,选择一个合适的处理器适配器(HandlerAdapter)去执行该Handler。**
d.**处理器适配器提取request中的模型数据,填充Handler入参,执行处理器(Handler)(也称之为Controller)(Controller--> service --> Dao -->** 数据库).
e.**Handler(Controller)执行完成后,向处理器适配器返回一个ModelAndView对象,处理器适配器再向前端控制器返回该ModelAndView对象(ModelAndView只是一个逻辑视图)。**
f.**根据返回的ModelAndView,前端控制器请求一个适合的视图解析器(ViewResolver)(必须是已经注册到Spring容器中的ViewResolver)去进行视图解析,然后视图解析器向前端控制器返回一个真正的视图View(jsp)。**
g.**前端控制器通过Model解析出ModelAndView中的参数进行解析,最终展现出完整的View并通过Http response返回给客户端。**
a)**提醒:需要程序员开发的是要程序员做一下配置就可以。**
i.**前端控制器DispatcherServlet(不需要程序员开发)**
作用:接收请求,响应结果,相当于转发器,中央处理器。有了DispatcherServlet减少了其它组件之间的耦合度
ii.**处理器映射器HandlerMapping(不需要程序员开发)**
作用:根据请求的url查找Handler
iii.**处理器适配器HandlerAdaper(不需要程序员开发)**
作用:按照特定规则(HandlerAdaper要求的规则)去执行Handler
iv.**处理器Handler(需要程序员自己开发)**
v.**视图解析器ViewResolver(不需要程序员开发)**
作用:进行试图解析,根据逻辑试图名解析成真正的视图(view)
vi.**试图View(需要程序员开发的jsp)**
View**是一个接口,实现类支持不同的View类型(jsp\pdf)**
3.**SpringMVC的应用**
(1)**在pom.xml中引入SpringMVC所需的jar包**
(2)**在web.xml中配置SpringMvc,主要配置:**

1)**(servlet)SpringMVC前端控制器**
2)**(servlet)配置SpringMVC的核心配置文件位置,默认在WEB-INF,默认名字为springmvc-servlet.xml**
3)**(servlet-mapping)配置拦截所有请求(除jsp外),所有请求都要经过前端控制器**
(3)**在main/resource中创建springmvc-config.xml文件,主要配置:**

1)**配置前端放行静态资源html/js/css等,否则静态资源无法访问**
2)**配置注解驱动,用于识别注解**
3)**配置需要扫描的包,如果扫描到的类上有@Controller的类会去自动注册Bean对象**
4)**配置内部资源视图解析器**
(4)**在main/java中创建测试类,方法名要与注释一样,返回值有三种:**
1)**返回pags中的文件,直接返回pags中的视图**
2)**转发:地址不变,返回另一个页面**
3)**重定向:获取另一个资源,地址发生改变**
4.**SringMVC中的web.xml和springmvc-config.xml一些不知道的**
(1)**War工程为什么要有web.xml:**
该servelt会在服务启动的时候立即加载,并且在加载时需要一个springMVC配置文件,默认情况下,会去应用程序文件夹的web-info下找[servlet-name].xml文件,也可以把springMVC配置文件放到程序文件夹的任何地方,用init-param描述,contextConfigLocation描述的就是配置文件所在位置,这样DispatcherServlet会去加载springmvc-config.xml文件,并根据该文件信息创建一个WebApplicationContext容器对象,也成为上下文环境。这个对象继承与ApplicationContext容器,他的初始化与BeanFactory、ApplicationContext有所区别,因为WebApplicationcontext需要ServletContext实例,也就是说他必须在拥有Web容器的前提下才能完成启动SpringWeb应用上下文的工作。有了WebApplicationcontext,就可以使用spring的IOC和AOP等其他功能了。
DispatcherSerlet**是前端控制器,核心功能是分发请求,分发给对应的java类,在springMVC中称为Handle**
spring2.5**之前控制器唯一的方法就是实现org.springframework.web.servlet.mvc.Controller接口,并且只能只处理单一动作的单一请求spring2.5之后控制器可以支持注解的方式,并且无需实现任何接口,可以支持同时处理多个请求.**
基于实现Controller接口的控制器的web应用,配置springmvc-config.xml。基于注解的控制器的web应用,配置springmvc-config.xml。视图解析器如果配置前缀和后缀,调用视图时会自动拼接前缀和后缀
三、**Mybatis**
1.**Mybatis框架**

1)**Mybati框架介绍**
a.**sqlMapConfig.xml的配置,该配置时Mybatis的核心配置,通过配置可以生成SqlSessionFactory对象,也就是SqlSession的工程**
b.**基于SqlSessionFactory可以生成SqlSession(会话)对象,类似于JDBC的Connection,用于连接数据库**
c.**Executor是SqlSession的底层对象,用于执行SQl语句**
d.**MapperStatment对象是sqlSession底层,用于接受输入映射(SQl语句参数),以及输出映射(SQL查询/修改的结果映射成相应结果)**

2)**Mybatis框架使用**
a.**创建SqlMapConfig.xml配置文件,规定在src即源码根下创建文件**
b.**创建pojo(简单的java对象)包,实际就是普通的javaBean(java容器),也叫实体类,用于封装数据库获取的一系列信息,例如Emp,封装表Emp中的id、name、jod、salary,而属性一般私有的,所以会提供set&get方法**
c.**创建Empmapper.xml,放在pojo包中与Emp实体类一起,用于映射是同类Emp**
a)**提醒:**
SqlMapConfig**。Xml属于全局配置文件,里面有执行mybatis的环境、管理事务、连接池、连接数据库、引入Mapper.xml等配置;**
Mapper.xml**编写sql语句,里面配置该文件的名字namespce,程序执行会根据名字找到该文件;id值,用于程序找到文件后执行哪个id的语句,所以要求值不重复**
b)**其中有where元素、set元素、foreach元素**
c)**两种执行程序方法:**
i.**自己编写映射文件的位置**

ii.**通过接口的映射让程序返回映射文件的位置(接口名要与Mapper.xml中的namespace一样),如下Mapper.xml**


执行类

iii.
2.**Mybatis的优缺点**
①**优点:SQL写在XML中,便于统一管理的优化,提供映射标签,支持对象和数据库的orm字段关系映射,可以对SQL进行优化**
②**SQL工作量大,mybatis的移植性不好,不支持级联**
四、**Spring**
1.**spring概述**
(1)**海纳百川:作为资源的整合、管理软件中的对象**
2.**Spring架构图介绍**
| 模块 | 说明 | |
|---|---|---|
| 1. | 核心容器Spring Core | 核心容器,提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转(IOC)模式,将应用程序的配置和依赖性规范与实际的应用程序代码分开。 |
| 2. | Spring Context | Spring**上下文,是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。** |
| 3. | Spring AOP | 通过配置管理特性,Spring AOP 模块直接将面向切面的编程功能集成到了 Spring 框架中。可以很容易地使 Spring框架管理的任何对象支持AOP。Spring AOP模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,就可以将声明性事务管理集成到应用程序中。 |
| 4. | Spring DAO | JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。 |
| 5. | Spring ORM | Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括JDO、Hibernate和iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。 |
| 6. | Spring Web | Web**上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以Spring 框架支持与 Jakarta Struts的集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。** |
| 7. | Spring MVC**框架** | MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现**。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。** |
Spring 框架的功能可以用在任何J2EE服务器中,大多数功能也适用于不受管理的环境。Spring 的核心要点是:支持不绑定到特定J2EE服务的可重用业务和数据访问对象。毫无疑问,这样的对象可以在不同J2EE环境(Web或EJB)、独立应用程序、测试环境之间重用。
3.**主要jar组成**
| 模块 | 说明 | |
|---|---|---|
| 1. | org.springframework.core | 核心工具包,其他包依赖此包 |
| 2. | org.springframework.beans | 核心,包括:配置文件,创建和管理bean等 |
| 3. | org.springframework.aop | 面向切面编程,提供AOP的实现 |
| 4. | org.springframework.context | 提供IoC功能上的扩展服务,此外还提供许多企业级服务的支持,邮件、任务调度、JNDI定位、EJB集成、远程访问、缓存以及多种视图层框架的支持 |
| 5. | org.springframework.web.mvc | 包含SpringMVC应用开发时所需的核心类 |
| 6. | org.springframework.transaction | 为JDBC、Hibernate、JDO、JPA提供一致的声明式和编程式事务管理 |
| 7. | org.springframework.web | 包含Web应用开发时所需支持类 |
| 8. | org.springframework.aspects | 提供对AspectJ框架的支持 |
| 9. | org.springframework.test | 对junit等测试框架的简单封装 |
| 10. | org.springframework.asm | 3.0后提供自己独立的,反编译 |
| 11. | org.springframework.context.support | Context的扩展支持,用于mvc方面 |
| 12. | org.springframework.expression | Spring表达式语言 |
| 13. | org.springframework.instument | 对服务器的代理接口 |
| 14. | org.springframework.jdbc | 对jdbc的简单封装 |
| 15. | org.springframework.jms | 为简化jms api的使用而做的简单封装 |
| 16. | org.springframework.orm | 整合第三方orm,如hibernate/mybatis |
| 17. | org.springframework.web.servlet | 增强servlet |
4.**Spring使用**
(1)**IOC通过spring容器创建对象**
a.**在Maven中的pom.xml:配置spring相关依赖包**
b.**在main/resource源目录:创建applicationContext.xml**
i)**文件内容主要有:声明bean对象,标志id,类目录bean对象的全路径**

b)**在main/java中:创建测试类**
i.**加载spring核心文件applicationContext,**
ii.**从spring容器中获取bean对象**

(2)**DI通过注入依赖为属性赋值**
a.**构造注入:构造方法中的属性参数赋值**
b.**Setter注入:方法中的属性参数赋值**
5.**Spring基础主要是IOD/DI**
(1)**IOC(Inversion of Controller):它是把传统程序代码直接操控对象的调用全交给容器(Bean),通过容器来实现对象组件的装配和管理,所谓控制反转就是对组件对象权的转移,从程序代码转移到容器中**
| 传统方式 | 创建一个老师,并输出 | 传统和传统的改进对输出都一样没有变化,只不过接口可以有很多人的共性 |
|---|---|---|
| 传统改进 | 创建一个接口人,老师的类可以实现接口,学生的类也可以实现接口 | |
| spring**方式** | a. 先在类包里创建一个spring的配置文件spring-crg.xml,内容略······ b. 需要把一些bean设定到spring的配置文件中,例如把老师的类的这个bean设定进取,然后配置文件内容,列出主要部分<bean id="thePerson" class="com.liumiao.demo.spring.Teacher"> </bean> | 使用spring来设定人物对象是老师还是学生都很方便,且编写代码很少 |

(2)**DI(Dependency Injection):DI称为注入依赖,传统中需要自己new对象,调用者和被调用这耦合度高,这样不利于软件的移植和维护。在spring中通过IOC容器中会动态的向某个对象提供它所需的其它对象,不想以前new出来,脱俗点通过容器就是给属性赋值。注入有:构造注入、setter注入、值注入、propertier方式值注入、注解注入、java配置注入**
①**构造注入:在一个类构造方法中有一个属性需要需要赋值,我们可以通过spring的依赖注入,通俗就是给构造方法传参数,优点强制你注入;缺点:构造参数多看起来不好看**

②**setter注入:给类中的方法传参数,可能会有空值的注入,使用时可以给默认值**

③**值注入:通过set方法给属性赋值,其中controller也可以值注入,而且有三种索引方法赋值**
a.**根据下标索引**
b.**根据属性名索引 张三**
c.**根据属性类型索引**

④
6.**为什么要使用Spring**
①**方便、解耦**
②**spring能够很好的和各大框架整合**
③**Spring通过IOC容器管理了对象的创建和销毁 工厂模式(设计模式 )**
④**声明式事务的支持:在使用hiberna、mybatis的时候,不用每次都编写提交事务的代码,可以用spring的AOP来管理事务**
⑤**本质是管理软件中的对象,即创建对象和维护对象之间的关系**
7.**什么是事务?**
(1)**定义:事务由一种机制,可以将一系列数据库更改归入一个逻辑单元,所以事务具有(ACID)原子性、一致性、隔离性、持久性这几种属性**
(2)**什么是分布式事务?**
8.**编程式事务和声明式事务的区别?**
(1)**编辑式事务:需要在代码中直接加入处理事务的逻辑,在代码中显示调用commit()、rollback、等事务相关方法,需要自己开启事务和关闭事务**
(2)**声明式事务:在方法外围添加注解或直接在配置文件中定义,方法需要事务处理的时候,spring会在方法前后拦截并添加事务**
a.**两者的区别:编程式事务侵入性比较强,但处理力度更精细**
五、**SSM框架**
1.**对ssm框架的认识**
(1)**整个系统分为表现层、controller层,service层,DAO层四层,springMVC负责请求的转发和视图管理,spring实现业务对象管理,mybatis作为数据对象的持久话引擎(1)
浙公网安备 33010602011771号