SSM知识点总结
1.mybatis连接数据库
mybatis提供了mapper接口开发规范,较与原始的dao开发方式更加方便,只要遵循一定的规范,
mybatis的功能有连接数据库,jdbc事务管理,加载mapper映射文件,定义别名
mybatis操作数据时,需要先创建会话工厂,再通过工厂创建session,通过session调用mapper进行数据库操作。
复杂查询的实现1.自定义pojo,返回值resultType的值为pojo的类路径
2.使用ResultMap,使用关联查询:一对多:collection,一对一:association,进行映射。
resultMap可以实现延迟加载,就是嵌套的sql语句,
mybatis提供了查询缓存,session级别的一级缓存,namespace命名空间为二级缓存。使用hashMap<>存储
mybatis提供了分布式缓存的接口,redis,ehchache
2.mybatis整合spring:
mybatis整合spring后,数据库的连接,mapper包的扫描,事务管理都交由spring接管。
查询数据库时不需要手动创建会话工厂,只要mapper继承SqlSessionDaoSurport就可以直接调用session进行数据库操作
3.springMVC:
springmvc的三层架构:model view controller 需要配置适配器,映射器,视图解析器
springMvc系统的运行流程:客户端发出请求,前端控制dispacher拦截请求,解析器解析url,找到对应的controller类
处理请求,返回model,视图解析器将model解析成视图view,并显示。
基于注解的mvc:需要配置组件扫描,扫描controller包,不需要配置适配器和映射器。在controller类上添加@Controller
在其方法上添加@RequestMaping
4.mybatis整合spring整合springMvc
spring:dao层:配置数据库的连接,会话工厂的配置,mapper的扫描,
service层:事务控制:配置增强和配置切面
mvc层:映射器,适配器,视图解析器
web文件配置拦截器和加载spring容器。
5.SSM框架的功能
重定向:redirect,A->B:A->C
forword, A->B:B->C
绑定器:例,修改数据的类型,自动将出入的字符串转换为日期类型
拦截器:拦截请求,对请求进行处理。
ajax异步交互:不更新页面,进行响应请求。
参数校验:在组件扫描中配置参数校验,创建参数校验的接口类,进行校验分组
参数绑定:将客户端请求的key/value绑定到controller的形参上
HTTPServletRequest HttpServletResponse HttpSession model四种类型会自动绑定
参数绑定还支持简单类型int long String等
传入的其他类型参数需要使用注解@RequestParam 或者 与controoler的参数名一致。
数据回显:数据提交出错后,将出错的数据回显到刚提交的页面上。
spring默认实现对pojo类型的回显
注解方式的回显@ModelAtribute("items"),指定回显到页面中的key
事务调用流程总结:
1.Mybatis框架下的事务调用流程:
1.加载resource
String resource = “Mybatis的配置文件”
2.读取配置文件的内容
InputStream inputStream = Resource.getResourceAsStream(resource);
将文件以字节流的方式读入到内存。
3.通过配置构建会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
使用工厂的构造方法创建会话工厂
4.通过会话工厂创建会话Session
SqlSession sqlSession = sqlSessionFactory.openSession()
使用工厂开启会话
5.通过会话来获取Mapper对象
Mapper mapper = sqlSession.getMapper(Mapper.class)
使用session来获取mapper实例
6.使用Mapper对象的方法对数据库进行操作
mapper.findList();
使用mapper实例对数据库进行操作
Mybatis框架总结,Mybatis框架没有提供对会话,和mapper进行操作的方法,是实现,较为复杂。
其中只进行一次的操作可以放在类中,方法外,只需创建一次的对象可以放在前置类中。
2.Mybatis整合Spring框架后:
1.获取spring的配置文件,也就是spring容器
private ApplicationContext applicationContext;
applicationContext = new ClassPathXmlApplicationContext("spring的配置文件的目录")
spring提供了Spring容器,对,sessionFactory,session,bean进行管理,
只需要调用apring容器,就可以使用其中的实例,进行操作,在spring容器创建时,
其中的bean就会被实例化。
2.通过spring容器来获取其中的bean对象
Dao dao = (Dao)applicationContext.getBean("Bean的id")
3.调用bean的方法对数据库进行操作
dao.findUser()
spring框架总结,提供了spring容器,对bean进行实例化处理,简化了开发。
3.Mybatis整合Spring的注解开发
1.在类中初始化所要调用的对象,并加上注解@Autowired
private Service service
2.调用此实例对数据库进行操作
service.findItemsList();
---------------------------------------------------------------------------------------------------------------------
总结:
- spring框架的注解开发,减少了手动初始化spring容器这一步,
程序运行时,就会加载spring容器,并实例化其中的bean一次,
由于spring容器和springmvc都是单例,bean对象只实例化一次,之后都是对bean的调用。
所以是单例。 - ssh是多例,由于ssh框架中spring框架和ssm框架中一样只初始化一次,所以dao和service
都是单例,而action是有struts2管理,当有多少个请求进入,就会创建多少个action
所以ssh框架是多例。
SSM是单例,SSH是多例