1、Spring介绍:
Spring框架是一个开放源代码的J2EE应用程序框架,是针对bean的生命周期进行管理的轻量级容器。
Spring解决了开发者在J2EE开发中遇到的许多常见问题,提供了功能强大的IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用系统,也可以和众多Web框架组合使用,并且可以和桌面应用程序AP组合,因此,Spring不仅仅可以应用在J2EE应用程序中,还可以应用在小程序和桌面应用程序中。
Spring框架主要由7部分构成:Spring Core、Spring AOP、Spring ORM、Spring DAO、Spring Context、Spring Web和Spring Web MVC。
2、Spring IOC(Inversion of Controller)
IOC介绍:
IOC即控制反转,这是一种设计思想,对象创建的权力交给Spring框架完成,由容器管理对象的生命周期。
3、Spring AOP
AOP介绍:
在软件业,AOP的缩写为Aspect Oriented Programming,即面向切面编程,通过预编译的方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的一种延续,利用AOP可以对业务逻辑的各个部分进行隔离,降低了业务逻辑之间的耦合性,提高了代码的重用性,同时提高了开发效率。
我理解的就是:动态代理对象对被代理对象的实现方法的增强。
AOP的主要作用:在不修改原有代码的条件下,对方法进行扩展。
动态代理机制--JDK
Java中提供了动态代理机制,可以利用API在运行期动态生成一个看起来和原对象一模一样的对象(代理对象),用户的扩展功能,在动态代理中完成,所以起到了代码解耦的作用。
AOP中专业术语(难点)
连接点:用户可以扩展的位置;
切入点:用户实际扩展的方法;
通知:扩展方法的具体实现;
切面:将通知应用到切入点的过程。
切入点表达式
1. bean(bean的Id号) 按照bean匹配
2. within(包名.类名) 可以使用通配符
3. execution(返回值类型 包名.类名.方法名(参数列表))
4. @annotation(包名.注解名称)
4、SpringMVC
调用原理:
DispatcherServlet:前端控制器 —— 负责拦截前端所有的请求,另外负责整个任务的调度和分发
Controller:具体处理请求的控制器
HandlerMapping:映射器,根据url查找Handler
ModelAndView:服务层返回的数据和视图层的封装类
ViewResolver:视图解析器 —— 解析具体的视图
handle:配置映射的对象(内含请求具体指向是哪个方法)
HandlAdapter:适配器
5、Mybatis介绍:
它是一款半自动的ORM持久层框架,具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性,但它的数据库无关性较低。
什么是ORM?
Object Relation Mapping对象关系映射。对象指得是java对象,关系指的是数据库中的关系模型,对象关系映射指的是在java对象和数据库关系模型中建立一种对应关系,比如用一个Java的Student类,去对应数据库中的一张student表,类中的属性和表中的列一一对应。Student类就对应student表,一个Student对象就对应student表中的一行数据
Mybatis特点:
简单易学:本身很小,没有其他的依赖,通过源代码可以比较完全的掌握它的设计思路和实现。
灵活:mybatis不会对应用程序或者数据库的现有设计产生影响。
解除sql与程序代码之间的耦合:通过提供DAO层,使业务逻辑和数据访问逻辑分离,使系统更易维护,更清晰,更易单元测试。
提供映射标签:支持对象与数据库的orm字段关系映射。
提供对象关系映射标签,支持对象关系组建维护。
提供xml标签,支持编写动态sql。
Mytatis实现过程:
每个基于Mytatis的应用都是以一个SqlSessionFactory的实例为核心的。SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder来获得,而SqlSessionFactoryBuilder可以通过xml文件来构建出SqlSessionFactoryBuilder实例。
/*创建SqlSessionFactory*/
String resource = "mybatis/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
有了SqlSessionFactory就可以获得SqlSession的实例,SqlSession提供了在数据库执行sql命令所需的所有方法。可以通过SqlSession实例来执行已映射的sql语句。
@Test
public void testDemo1() throws IOException {
/*创建SqlSessionFactory*/
String resource = "mybatis/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
/*从SqlSessionFactory中获取sqlSession*/
SqlSession sqlSession = sqlSessionFactory.openSession();
/*获取mapper接口,执行接口方法*/
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = userMapper.findAll();
System.out.println(userList);
}
Mybatis缓存:
缓存概念:如果有大量相同的请求访问数据库,那么数据库需要执行多次重复的sql,并发压力大,查询效率低,如果引入了缓存机制,则可以极大的提升用户的查询效率。
1、Mybatis中自身提供了缓存机制,极大的提高查询效率。
2、Mybatis系统中默认定义了两级缓存:一级缓存,二级缓存。
3、Mybatis默认情况下只开启一级缓存,一级缓存是sqlSession级别的,在同一个sqlSession中查询可以共享查询数据。
4、二级缓存是sqlSessionFactory级别的,同一个工厂可以创建多个sqlSession共享数据。
5、Mybatis也提供了第三方Cache接口,整合第三方缓存。