(Spring+SpringMVC+Mybatis)三大框架整合的SSM
对比SSH(Spring+Struts+Hibernate)
参考–sohu网文章链接–
原文标题:《浅谈Java三大框架SSH是否已经过时》
文章发表时间:2018-03-22 13:36
参考此文档可以看出SSM经受了考验,获得了开发者的普遍认可。
然而,对于Mybatis和Hibernate,我们往往需要做取舍。
首先,Mybatis和Hibernate都是 持久层框架1,但是区别也是十分显著的。查询相关文档,个人总结有如下几点:
1.Hibernate是“一站式”的 ORM2全自动解决方案,而Mybatis是一种“半自动化”的ORM实现
2.针对高级查询,Mybatis需要手动编写SQL语句以及ResultMap;而hibernate有良好的映射机制,无须开发者关注SQL
3.由于系统的复杂庞大,和学习周期长,Hibernate的开发难度要大于Mybatis,而Mybatis开发更简便,仅仅依赖于sql的书写
4.Mybatis没有自己的日志统计,需要借助log4j来记录日志,而Hibernate具有自己的日志统计
5.Mybatis依赖数据库书写,所以扩展性和迁移性较差;而Hibernate与数据库具体的关联丢在XML中,用什么数据库都行
6.缓存机制:Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,然后再在具体的<表-对象映射>中配置是哪一种缓存。MyBatis的二级缓存配置都是在每个具体的<表-对象映射>中进行详细配置,这样针对不同的表可以自定义不同的缓存机制。并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。
深入了解Mybatis(图片来源度娘)
Mybatis
对JDBC进行了封装,开发者不必写冗长的JDBC代码
什么是JDBC?JDBC如何操作数据库?
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问。
JDBC连接数据库的入门案例:
//1.注册数据库驱动
//这里有三种注册方式,以下这种最好最常用
Class.forName("com.mysql.jdbc.Driver");
//2.获取数据库连接
Connection conn = DriverManager.getConnection(url, user, pwd);
//3.获取传输器
Statement stat = conn.createStatement();
//4.发送SQL语句,并返回执行结果
ResultSet rs = stat.executeQuery("select * from tableName");
//5.处理结果
//TODO... 遍历或者打印
//6.释放资源(这里的释放方式十分low,根据越晚创建的越先关闭的原则改进为更好的释放和处理异常的方式)
rs.close();
stat.close();
conn.close();
Mybatis将这一复杂操作写入配置,通过配置文件来简化了开发过程。
Mybatis核心组件主要包括以下几个:
SqlSessionFactoryBuilder:会根据配置信息或代码来生成SqlSessionFactory;
SqlSessionFactory:依靠工厂来生成SqlSession;
SqlSession:是一个既可以发送SQL去执行并返回结果,也可以获取Mapper的接口;
SQL Mapper:是MyBatis新设计的组件,由一个Java接口和XML文件构成,需要给出对应的SQL和映射规则。它负责发送SQL去执行,并返回结果。
持久层:所谓“持久层”,也就是在系统逻辑层面上,专注于实现数据持久化的一个相对独立的领域(Domain),是把数据保存到可掉电式存储设备中。持久层是负责向(或者从)一个或者多个数据存储器中存储(或者获取)数据的一组类和组件。这个层必须包括一个业务领域实体的模型(即使只是一个元数据模型)。 ↩︎
ORM:对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的–“虚拟对象数据库”。面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。为了解决这个不匹配的现象,对象关系映射技术应运而生。 ↩︎