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>
<mappers>
<mapper class="com.swpu.dao.UserMapper">mapper>
mappers>
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;
}
}
参考:http://t.csdn.cn/5V7Pb(内有各个配置的详解)
最外层由
包裹
一对一: javaType:java数据类型
一对多: Property:实体类中的属性 Column:数据库字段名 select:二次查询
多对多:和一对多类似
参考: http://t.csdn.cn/yd8tu
在应用运行过程中,当多次执行查询条件完全相同的SQL,会优先命中一级缓存,避免直接对数据库进行查询,提高性能
一级缓存失效:
sqlSession不同(不同的SqlSession对应不同的一级缓存)
同一个SqlSession但是查询条件不同
同一个SqlSession两次查询期间执行了任何一次增删改操作
同一个SqlSession两次查询期间手动清空了缓存
二级缓存:
二级缓存被多个SqlSession共享,是一个全局的变量
二级缓存也叫全局缓存,一级缓存作用域太低了,所以诞生了二级缓存,基于namespace级别的缓存,一个名称空间,对应一个二级缓存;
参考:http://t.csdn.cn/QezeV
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false">setting>
settings>
IOC构建bean对象时的不同作用域
Singleton(默认)
prototype
request
session
globalsession
对IOC的理解;
调用者不会创建被调用者的实例,而是由Spring容器创建被调用者,并注入调用者。不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
IOC概念看似抽象,说简单点就是将对象交给容器管理,你只需要在Spring配置文件中配置对应bean以及相关的属性,让Spring容器来生成类的实例对象以及管理对象,在Spring启动容器的时候,Spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把哪些已经初始化好的bean分配给你需要调用这些bean的类.
既面向切面编程(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.采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译旗舰织入有关“方面”的代码,属于静态代理。
set注入
构造器注入
接口注入
参考:http://t.csdn.cn/TytG3
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进行渲染视图(即将模型数据填充至视图中),并返回给客户端用户。
参考:http://t.csdn.cn/ZVbKR
1.@ResquestParam
作用:把请求中指定名称的参数给控制器中的形参赋值
属性:
value:请求参数中的名称
required:请求参数中是否必须提供此参数。默认值true。表示必须提供,如果不提供将报错
当所传的参数名字不同时可以使用这个注解,但是一旦使用,所传参数必须有RequestParam内相同名称的参数否则报错
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";
}
文件上传:
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>
String void ModelAndView Json
参考:http://t.csdn.cn/59HPr
拦截器(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):见上方文件上传