2021-01-22 SSM和开源框架 & SpringMVC 基础入门


SSM和开源框架

MyBatis重要组件:

  • Mapper配置: 实体类Student.java - 数据表student , XML或注解
  • Mapper接口: DAO层接口。 (只需要写接口,不用写实现类 :需要遵循约定)

Mapper接口在编写时 需要遵循约定:
1.方法名和SQL配置文件(studentMapper.xml)中的id值必须相同
2.方法的输入参数,必须和SQL配置文件的 parameterType的类型相同;
3.方法的返回值,必须和SQL配置文件的resultType的类型相同

SQL配置文件

<select id="queryStudentByNo"  parameterType="int"  resultType="lanqiao.entity.Student" >
	select * from student where stuNo = #{stuNo}
</select>

接口

<select id=" queryStudentByNo" parameterType="int"  resultType="Student"> 
 select * from student where stuNo=#{stuNo} 
</select>

根据约定,编写接口

public interface StudentMapper
{
  Student queryStudentByNo(int stuNO)
   List<Student> queryStudentByNo()
}

特殊
1.如果不存在parameterType ,则代表是一个无参方法
2.如果不存在resultType,则代表返回值是void
3.如果方法的返回值是一个集合类型,则实际resultType仍然是元素类型,而不是集合类型。

MyBatis开发时的常用对象

1.SqlSessionFactory:SqlSesssion工厂。通过SqlSessionFactory:SqlSesssion中的openSession()产生SqlSesssion对象。

2.SqlSesssion:SqlSesssion对象(类似于JDBC中的Connection)

3.Executor:MyBatis中所有Mapper语句的执行 都是通过Executor进行的。

MyBatis四大核心对象

1.StatementHandler(负责sql语句):数据库的处理对象 select… from where id = #{} …

2.PrameterHandler(负责sql中的参数):处理SQL中的参数对象

3.Executor

4.ResultSetHandler:处理SQL的返回结果集

MyBatis四大处理器

StatementHandler、PrameterHandler、ResultSetHandler
剩下一个:TypeHandler (类型转换器)

在这里插入图片描述

执行流程

在这里插入图片描述

一对一、一对多,延迟加载

一对一

使用<resultMap><association>
一对一的延迟加载:
使用<resultMap><association>的select属性指定延迟加载的sql语句
<resultMap>	
		<association select="延迟加载的sql语句" >
		<<association>>
</resultMap>

一对多:将一对一中的改为

Spring

IOC/DI:控制反转/依赖注入
目的:解耦合

Student2 student = new Student2() 使用new会造成耦合度较高 ->工厂模式
类- >new ->对象
类- > 工厂模式->对象 ,可以实现解耦,问题是:需要自己编写工厂

IOC:IoC帮我们提供了一个工厂。 1.向工厂中注入对象 (配置[xml、注解]) 2.从工厂中获取对象

总结:Ioc可以让我们通过“配置的方式”来创建对象

AOP:面向方面编程

OOP的补充,不是替代。

使用oop的不足:
在这里插入图片描述
以上OOP两个不足,可以通过AOP进行改进。

在这里插入图片描述
使用AOP的实际场景:日志、安全统一校验

Spring用到了那些设计模式

工厂模式:创建bean、获取bean
单例模式/原型模式: 创建bean时,设置作用域 ,singleton/prototype
监听模式:自定义时间发布,监听模式。如ApplicationListener,当某个动作触发时,就会自动执行一个通知。
责任链模式:AOP
策略模式:创建代理

Spring Boot

最主要的功能:自动装配

以前(不用spring boot),需要自己配置框架的配置文件。
spring,mybatis ,SSM整合等情况 需要编写一大堆配置文件。
如果使用Spring Boot,则可以省略配置 。 好处:将开发重点放在业务逻辑上,而不是配置上。
自动装配的原理? 约定优于配置 (核心:将一些配置功能,前置到源码底层实现好)

自动装配两个特点:
1.版本仲裁中心:因此,以后引入依赖时,不用再写版本号。好处:1.不用记 2.避免冲突(防止引入多个引来时,由于各个依赖的版本不兼容造成的冲突)
2.提供了很多starter(场景启动器) :批量jar。

假设开发web项目 ( json.jar tomcat.jar hibernate-validator.jar, spring-web.jar … ) => spring-boot-starter-web.
以后使用web项目,只需要引入spring-boot-starter-web

自动装配的应用时: @EnableAutoConfiguration 就是springboot提供自动装配的 注解。

SpringMVC 基础入门

一、所需jar包

SpringMVC 所需jar包:

spring-aop.jar
spring-bean.jar
spring-context.jar
spring-core.jar
spring-web.jar
spring-webmvc.jar
commons-logging.jar

报错NoClassDefFoundError:缺少jar

二、第一个SpringMVC程序

1.创建配置文件

springmvc配置文件 springmvc.xml
选中常用的命名空间:beans aop context mvc
编写springmvc.xml

	<!-- 扫描有注解的包 -->
	<context:component-scan base-package="com.one.handler"></context:component-scan>
	<!-- 配置视图解析器(InternalResourceViewResolver) -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/views/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">

	<!-- 扫描有注解的包 -->
	<context:component-scan base-package="com.one.handler"></context:component-scan>
	
	<!-- 配置视图解析器(InternalResourceViewResolver) -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/views/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>

	<!-- 加载国际化资源文件      ResourceBundleMessageSource会在springmvc响应程序时   介入(解析国际化资源文件) -->
	<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
		<property name="basename" value="i18n"></property>
	</bean>
	<!-- view-name会被视图解析器加上前缀后缀  -->
	<mvc:view-controller path="testMvcViewController" view-name="success"/>
	
	<!-- 此配置是springmvc的基础配置,很多功能都需要通过该注解来协调 -->
	<mvc:annotation-driven></mvc:annotation-driven>
	
	<!-- 该配置会让springmvc 接收一个请求,并且该请求没有对应的@Requestmapping时 , 将该请求交给服务器默认的servlet区处理(直接访问) -->
	<mvc:default-servlet-handler/>
	
	<!--  自定义类型转换器      1.将自定义转换器纳入springIOC容器 -->
	<bean id="MyConverter" class="com.one.converter.MyConverter"></bean>
	<!-- 2.将MyConverter再纳入springmvc提供的转换器Bean -->
	<!-- <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
		<property name="converters">
			<set>
				<ref bean="MyConverter"/>
			</set>
		</property>
	</bean> -->
	<!-- 3.将conersionService注册到annotation-driven中 -->
	<!-- <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven> -->		
	<!-- 配置 数据格式化 注解 所需要的Bean -->
	<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
		<property name="converters">
			<set>
				<ref bean="MyConverter"/>
			</set>
		</property>
	</bean>
	<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
	
	<!-- 文件上传 -->
	<!-- 配置CommonsMultipartResolver,用于实现文件上传,将其加入springIOC容器 -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="defaultEncoding" value="UTF-8"></property>
		<!-- 上传单个文件的最大值   单位是Byte -->
		<property name="maxUploadSize" value="-1"></property>
	</bean>
	
	<!-- 拦截器 -->
	<!-- 将自己写的拦截器配置到springmvc中       默认拦截全部请求 -->
	<mvc:interceptors>
		<!-- 配置具体的拦截路径 -->
		<mvc:interceptor>
			<!-- 指定拦截的路径,基于ant风格 -->
			<mvc:mapping path="/testInterceptor"/>
			<!-- 指定不拦截的路径 -->
			<mvc:exclude-mapping path="/**"/>
			<bean class="com.one.imterceptor.MyInterceptor"></bean>
		</mvc:interceptor>
		
		<mvc:interceptor>
			<mvc:mapping path="/**"/>
			<mvc:exclude-mapping path="/testInterceptor"/>
			<bean class="com.one.imterceptor.MyInterceptor2"></bean>
		</mvc:interceptor>
	</mvc:interceptors>
	
	<!-- SimpleMappingExceptionResolver 以配置的方式处理异常 -->
	<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
		<!-- 如果发生异常,异常对象会被保存在exceptionAttributr的value值中,并且会放入request域中;异常变量的值是exception -->
		<property name="exceptionAttribute" value="e"></property>
		<property name="exceptionMappings">
			<props>
				<!-- 相当于catch(Exception e){跳转页面} -->
				<prop key="java.lang.ArithmeticException">error</prop>
			</props>
		</property>
	</bean>
</beans>

在SpringMVC中.servlet;.controller;.action;.handler;都可表示控制器所在的包
web.xml

通过以下配置,拦截所有请求,交给SpringMVC处理

  <servlet>
  	<servlet-name>springDispatcherServlet</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:springmvc.xml</param-value>
  	</init-param>
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>springDispatcherServlet</servlet-name>
  	<url-pattern>/</url-pattern>
  </servlet-mapping>

其中:

  	<url-pattern>/</url-pattern>

/:一切请求 ,注意不是 /* ;
/user:拦截以 /user开头的请求;
/user/abc.do :只拦截该请求;
.action:只拦截 .action结尾的请求

com.one.handler.SpringMvcHandler.java

@Controller
public class SpringMvcHandler {
	@RequestMapping("hello")
	public String hello() {
		return "success";
	}
}

2.项目中同时兼容 springMVC和Servlet

web.xml

  <servlet-mapping>
  	<servlet-name>springDispatcherServlet</servlet-name>
  	<url-pattern>.action</url-pattern>
  </servlet-mapping>
  <servlet>
  	<servlet-name>springDispatcherServlet</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:springmvc.xml</param-value>
  	</init-param>
  	<load-on-startup>1</load-on-startup>
  </servlet>

通过:

  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:springmvc.xml</param-value>
  	</init-param>

指定springmvc配置文件的路径,如果要省略,必须放到 默认路径:/WEB-INF/springDispatcherServlet-servlet.xml

3.映射

映射是 去匹配@RequestMapping注解,可以和方法名、类名不一致
通过method指定 请求方式(get post delete put)
@RequestMapping(value=“welcome”,method=RequestMethod.POST)//映射


总结

通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText和POI。Spring MVC 框架并不知道使用的视图,所以不会强迫开发者只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、过滤器以及处理程序对象的角色,这种分离让它们更容易进行定制。

Lifecycle for overriding binding, validation, etc,易于同其它View框架(Tiles等)无缝集成,采用IOC便于测试。
它是一个典型的教科书式的mvc构架,而不像struts等都是变种或者不是完全基于mvc系统的框架,对于初学者或者想了解mvc的人来说我觉得 spring是最好的,它的实现就是教科书!第二它和tapestry一样是一个纯正的servlet系统,这也是它和tapestry相比 struts所具有的优势。而且框架本身有代码,看起来容易理解。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值