SSM复习资料整理

Mybaits

1.特点:轻量级,灵活,简单易学,效率高
2.XXXmapper.xml对应参数:
namespace:Dao层xxx接口所在的全限定名
id:接口中的方法名
parameterType:接口参数类型
resultType:接口返回值类型,
未设置别名需要在mybaits配置中使用别名属性来设置,或者在整合时在spring配置中设置。

别名:

<typeAliases>  
	<typeAlias type="类的全限定" alias="别名"/>
<typeAliases> 

xxxMapper.xml配置实例:


<mapper namespace="com.swpu.dao.UserDao">

	<select id="getById" parameterType="int" 
        resultType="user">
        select * from ec_user where id=#{id}
    select>

mapper>
3.在maybaits配置文件中导入mapper文件的三种方式:

    <mappers>
        
		

        
        <mapper class="com.swpu.dao.UserMapper">mapper>

        
        

    mappers>
4. SqlSessionFactoryBuilder:方法级,用来创建session工厂和读取配置文件
SqlSessionFactory:项目级,用来创建会话
SqlSession:线程级,用来执行sql操作

工具类示例:

public class MybatisUtil {
 	static SqlSessionFactory factory;
 	
    static{
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        try {
            factory = builder.build(Resources.getResourceAsReader("config.xml"));
        } catch (IOException var5) {
            var5.printStackTrace();
        }
    }


    public static SqlSession getSession(boolean isTranscation){
    	SqlSession sqlSession = factory.openSession(isTranscation);
        return sqlSession;
    }
}
5.MyBaits配置文件标签顺序

参考:http://t.csdn.cn/5V7Pb(内有各个配置的详解)
最外层由包裹

  • properties:属性信息,相当于 MyBatis的全局变量。
  • settings:设置信息,通过它对 MyBatis的功能进行调整。
  • typeAliases:类型别名,在这里可以为类型设置一些简短的名字。
  • typeHandlers:类型处理器,在这里可以为不同的类型设置相应的处理器。
  • objectFactory:对象工厂,在这里可以指定 MyBatis创建新对象时使用的工厂。
  • objectWrapperFactory:对象包装器工厂,在这里可以指定 MyBatis使用的对象包装器工厂。
  • reflectorFactory:反射器工厂,在这里可以设置 MyBatis的反射器工厂。
  • plugins:插件,在这里可以为 MyBatis 配置插件,从而修改或扩展 MyBatis 的行为。
  • environments:环境,这里可以配置 MyBatis运行的环境信息,如数据源信息等。
  • databaseIdProvider:数据库编号,在这里可以为不同的数据库配置不同的编号,这样可以对不同类型的数据库设置不同的数据库操作语句。
  • mappers:映射文件,在这里可以配置映射文件或映射接口文件的地址。
6.在xxxmapper.xml中配置一对一、一对多和多对多
	一对一:   javaType:java数据类型
	一对多:  Property:实体类中的属性  Column:数据库字段名  		select:二次查询
	多对多:和一对多类似

参考: http://t.csdn.cn/yd8tu

7.mybaits的缓存※
在应用运行过程中,当多次执行查询条件完全相同的SQL,会优先命中一级缓存,避免直接对数据库进行查询,提高性能
一级缓存失效:
		sqlSession不同(不同的SqlSession对应不同的一级缓存)
		同一个SqlSession但是查询条件不同
		同一个SqlSession两次查询期间执行了任何一次增删改操作
		同一个SqlSession两次查询期间手动清空了缓存
二级缓存:
		二级缓存被多个SqlSession共享,是一个全局的变量
		二级缓存也叫全局缓存,一级缓存作用域太低了,所以诞生了二级缓存,基于namespace级别的缓存,一个名称空间,对应一个二级缓存;

参考:http://t.csdn.cn/QezeV

8.开启延迟加载

<settings>
    
    <setting name="lazyLoadingEnabled" value="true"/>
    <setting name="aggressiveLazyLoading" value="false">setting>
settings>

spring

1. 特点:一站式、轻量级、方便解耦

2.IOC:控制反转(Inversion of Control)

IOC构建bean对象时的不同作用域
Singleton(默认)
prototype
request
session
globalsession

对IOC的理解;
调用者不会创建被调用者的实例,而是由Spring容器创建被调用者,并注入调用者。不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

IOC概念看似抽象,说简单点就是将对象交给容器管理,你只需要在Spring配置文件中配置对应bean以及相关的属性,让Spring容器来生成类的实例对象以及管理对象,在Spring启动容器的时候,Spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把哪些已经初始化好的bean分配给你需要调用这些bean的类.

3.AOP面向切面编程(Aspect Orient Programming)

既面向切面编程(Aspect Orient Programming)。是一种编程思想,是面对对象编程oop的补充。

	面向切面编程、动态代理
	
	自动代理的方式使用aop,需要在配置文件中开启autoproxy
	
	声明式事务管理:spring采用AOP的方式实现

通知、连接点、切点、切面、引入、织入

oinpoint(连接点): (方法)
所谓连接点表示应用执行过程中能够插入切面的一个点,这个点可以是方法的调用、异常的抛出。
在spring中,这些点指的是方法,因为spring只支持方法类型的连接点。

Pointcut(切入点): (方法)
可以插入增强处理的连接点。

Advice(通知/增强): (方法) ※
AOP 框架中的增强处理。通知描述了切面何时执行以及如何执行增强处理
通知的类型及定义:
前置通知(before):目标方法(需要增强的方法)调用之前执行
后置通知(after-returning):目标方法调用完成以后执行(前提条件,方法里面不能报错try)
异常通知(after-throwing):目标方法报错以后执行(类似catch)
最终通知(after):目标方法调用完成以后执行(报错也执行类似finally)
环绕通知(around):目标方法调用之前+之后执行(一般用来做事务管理)


Target(目标对象):
代理的目标对象。

Weaving(织入): (了解)
是指把增强应用到目标对象来创建新的代理对象的过程。
spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入。

Proxy(代理):
一个类被AOP织入增强后,就产生一个结果代理类。

Aspect(切面): (类)
是切入点和通知的结合。

引入(Introduction):引入允许我们向现有的类添加新的
方法或者属性。

实现AOP的技术主要分为两大类:
1.采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;

2.采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译旗舰织入有关“方面”的代码,属于静态代理。

4.DI依赖注入(Dependency Injection)

  • 依赖注入DI是指程序运行过程中,若需要调用另一个对象协助时,无需在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序.依赖注入是目前最优秀的解耦方式,依赖注入让Spring的Bean之间以配置文件的方式组织在一起,而不是以硬编码的方式耦合在一起的
  • 实际环境中实现IoC容器的方式主要分为两大类,一类是依赖查找,依赖查找是通过资源定位,把对应资源查找回来;另一类就是依赖注入,而Spring主要使用的就是依赖注入.一般而言,依赖注入可以分为3种方式.

set注入
构造器注入
接口注入
参考:http://t.csdn.cn/TytG3

SpringMVC

1.MVC三层架构:模型(service、dao)、视图(JSP等)、控制器(Controller)

2.springMVC执行的过程

参考http://t.csdn.cn/TytG3
SSM复习资料整理_第1张图片

SpringMVC的具体工作原理

1、客户端用户发送请求至前端控制器DispatcherServlet。

2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。

3、 HandlerMapping处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

4、DispatcherServlet调用HandlerAdapter处理器适配器,HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。

5、Controller控制器执行完成返回ModelAndView,HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。

6、 DispatcherServlet前端控制器将ModelAndView传给ViewReslover视图解析器。

7、 ViewReslover解析后返回具体View。

8、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中),并返回给客户端用户。

3.SpringMVC的注解

参考:http://t.csdn.cn/ZVbKR
1.@ResquestParam
作用:把请求中指定名称的参数给控制器中的形参赋值

属性:
value:请求参数中的名称
​required:请求参数中是否必须提供此参数。默认值true。表示必须提供,如果不提供将报错

当所传的参数名字不同时可以使用这个注解,但是一旦使用,所传参数必须有RequestParam内相同名称的参数否则报错
SSM复习资料整理_第2张图片
2.@ResponseBody
@responseBody注解的作用是 在controller的方法中返回json形式的对象。 需要注意的呢,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。

 @RequestMapping("/login")
  @ResponseBody
  public User login(User user){
    return user;
  }
  User字段:userName pwd
  那么在前台接收到的数据为:'{"userName":"xxx","pwd":"xxx"}
  

3.@RequestMapping
作用: 请求URL和处理方法之间的对应关系
属性:

1. path 指定请求路径的url

2. value value属性和path属性是一样的

3. mthod 指定该方法的请求方式

4. params 指定限制请求参数的条件

5. headers 发送的请求中必须包含的请求头
@Controller
@RequestMapping(path = "/user")
public class HelloController {

    @RequestMapping(value = "/hello",params = {"username=maize"})
    public String sayHello(){
        System.out.println("Hello SpringMVC");
        return "success";
    }
}

4.@PathVariable
作用:解析url中的占位符
属性

value:指定请求参数的名称,即url中的值,当url中的名称和方法参数名称不一致时,可以使用该属性解决。
name:同value,两者只能使用一个
required:指定该参数是否是必须传入的,boolean类型。若为
true,则表示请求中所携带的参数中必须包含当前参数。若为 false,则表示有没有均可。

/*获取路径段
    * 请求路径:/owners/66?string2=id1*/
    @RequestMapping(path = "/owners/{ownerID}",method = RequestMethod.GET)
    public String findOwner1(@PathVariable String ownerID,String string2){
        System.out.println("ownerID"+ownerID+",string2="+string2);
        return "success";
    }

    /*获取路径段
     * 请求路径:/owner/66?model=id2*/
    @RequestMapping(path="/owner/{ownerId}", method=RequestMethod.GET)
    public String findOwner2(@PathVariable("ownerId") String theOwner, String model) {
        System.out.println("theOwner="+theOwner+",model="+model);
        return "success";
    }

    /*获取多个路径段
     * 请求路径:/owners/66/pets/77*/
    @RequestMapping(path="/owners/{ownerId}/pets/{petId}", method=RequestMethod.GET)
    public String findPet(@PathVariable String ownerId, @PathVariable String petId, String model) {
        System.out.println("ownerId="+ownerId+",petId="+petId+",model="+model);
        return "success";
    }

    /*获取路径段
     * 请求路径:/spring-web/spring-web-3.0.5.jar*/
    @RequestMapping("/spring-web/{symbolicName:[a-z-]+}-{version:\\d\\.\\d\\.\\d}{extension:\\.[a-z]+}")
    public String handle(@PathVariable String symbolicName,@PathVariable String version, @PathVariable String extension) {
        System.out.println("symbolicName="+symbolicName +",version="+version+",extension="+extension);
        return "success";
    }

4.前端文件上传表单的设置

文件上传:
maxUploadSize (文件最大上传)
defaultEncoding

enctype=“multipart/form-data”(将表单属性enctype的值更改为multipart/form-data)

 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
 		
       <property name="maxUploadSize" value="20000000"/>
       
       <property name="defaultEncoding" value="utf-8">property>
 bean> 

5.SpringMVC四种返回值类型

String void ModelAndView Json
参考:http://t.csdn.cn/59HPr

6.SpringMVC相关配置

拦截器(spring-mvc.xml):
参考:http://t.csdn.cn/XMPDF

   
    <mvc:interceptors>
        
        <mvc:interceptor>
            
            <mvc:mapping path="/user/*"/>
            
            
            <bean class="com.qf.interceptor.MyInterceptor" />
        mvc:interceptor>
    mvc:interceptors>

前端控制器(web.xml):


  <servlet>
    <servlet-name>dispatcherServletservlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    <init-param>
      <param-name>contextConfigLocationparam-name>
      <param-value>classpath:springmvc.xmlparam-value>
    init-param>
    <load-on-startup>1load-on-startup>
  servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServletservlet-name>
    <url-pattern>/url-pattern>
  servlet-mapping>

视图解析器(spring-mvc.xml):

    
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/">property>
        <property name="suffix" value=".jsp">property>
    bean>

文件上传下载(spring-mvc.xml):见上方文件上传

你可能感兴趣的:(java-ee,intellij-idea,spring,maven)