mybatis的目前最流行的ORM框架,几乎涵盖所有的互联网的领域,那么mybatis为什么会这么流行,相较JDBC和其他ORM框架又有什么样的特点和优势?我们会在接下来的学习中逐渐揭开?
一、 JDBC回顾
我们先来回顾传统的JDBC开发,作为java提供给数据库厂商的接口规范,根据数据库的不同,有不同的实现方法,那么,JDBC的开发需要哪些步骤:
(1) 加载驱动
(2) 配置数据库连接参数
(3) 获取数据库连接connection
(4) 获取SQL执行通道statement
(5) 执行SQL,返回结果集resultSet
(6) 关闭数据库所有的连接通道
下面是操作代码:
package com.fan.jdbcdemo; import java.sql.*; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class JdbcDemo { public static void main(String[] args) { try{ Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","www1928..com"); Statement st = connection.createStatement(); ResultSet rs = st.executeQuery("SELECT * FROM USER WHERE NAME = 'zhangqian'"); Map<String, Object> resultMap = new HashMap<String, Object>(8); /*封装结果集*/ while(rs.next()) { resultMap.put("name", rs.getString(1)); resultMap.put("age", rs.getString(2)); } Set<Map.Entry<String, Object>> set = resultMap.entrySet(); Iterator<Map.Entry<String, Object>> iterator = set.iterator(); while(iterator.hasNext()) { Map.Entry<String, Object> entry = iterator.next(); System.out.println(entry.getKey() + ":" + entry.getValue()); } } catch(Exception e) { e.printStackTrace(); }finally {
//关闭连接通道,就不写了
} } }
上面的数据库操作中,我们不仅需要通过大量代码去查询结果集,还得将结果手动封装,才能被其他代码调用,所以在实际的项目开发中,这显然会产生大量的无意义的重复性代码,所以需要将重复的代码进行抽取,
可以看出变化的都只是数据和结果集的映射,诸如数据库连接等是一直不变,所以为了解决这种问题就出现了ORM(Object Reliational Mapper)框架,最早的ORM要追随EJB框架,但是EJB过于复杂,
很快就被淘汰,随之出现了Hibernate框架, Hibernate的出现解决了持久层代码重复的问题,但是随着互联网的发展,数据量越来越大,业务越来越复杂,数据库表变复杂,由于,高度的对sql的封装,
导致在性能上无法进行优化,甚至在一些查询,直接导致全表扫描等问题,这在今天网站访问中是不被允许的,为了解决的Hibernate的问题,半自动框架mybatis随之而生。
二、认识Mybatis
那么,Mybatis的相较于JDBC做了哪些优化了,首先提一下Mybatis的开发步骤:
(1)配置config.xml文件(主要配置数据库连接,驱动,缓存等)
(2)配置映射文件mapper.xml(主要配置SQL和接口的映射)
(3) 获取session执行数据库操作,返回结果集
(4)关闭session对象
可以看出,Mybatis框架,封装了数据路连接和结果集封装的代码,使用者只需要关心session对象和sql语句,在与Spring集成之后,几乎所有的功能代码交给框架,而开发人员只需要关心业务逻辑
代码。
三、JDBC、Mybatis、Hibernate的优缺点
(1)JDBC
优点:原生javaAPI,执行效率高
缺点:重复性代码过多
需要管理数据库连接
使用完成后需要关闭所有对象资源
(2)Hibernate
优点:
消除了代码的映射的规则
无需管理数据库连接
提供缓存支持
持久化操作只需要操作session对象即可
关闭资源只需要关闭session对象
缺点:
由于是对象和字段映射,对于更新操作需要发送所有字段,占用资源
无法根据不同的条件组装不同SQL
对于复杂的SQL查询,需要自己完成SQL,并封装结果集
不能有效支持存储过程
无法优化SQL,性能差
(3)Mybatis
优点:
可以动态生成映射关系
消除了大多数JDBC代码
提供缓存支持
支持多数日志接口
可以灵活的优化SQL
维护简单,上手难度低
缺点:
需要自己动手完成SQL编写,工作量大