Mybatis框架 |Mybatis框架介绍

文章目录

  • 一、为什么弃用JDBC?
    • 1.一个JDBC编码例子
    • 2.JDBC编码问题分析
  • 二、主流的持久层框架
    • 1.Hibernate框架
    • 2.Mybatis框架(主流)


一、为什么弃用JDBC?

1.一个JDBC编码例子

一个JavaWeb中连接数据库的代码如下:

  • 详细的步骤可以参照———JDBC编程步骤。
/**
 * 类说明:
 * 		JDBC创建PreparedStatement对象连接数据库
 * @author qianliangguo
 */
public class testPreparedStatement {
	public static void main(String[] args) {
		Connection conn = null;
		PreparedStatement pstm = null;
		ResultSet rs = null;
		try {
			// 1.加载驱动
			Class.forName("com.mysql.jdbc.Driver");
			// 2.获取连接
			String url = "jdbc:mysql://localhost:3306/mybase?useUnicode=true&characterEncoding=utf-8";
			String user = "root";
			String password = "Hudie";
			conn = DriverManager.getConnection(url, user, password);
			// 3.创建PreparedStatement,预编译sql语句
			String sql = "select * from emp where job=?";
			pstm = conn.prepareStatement(sql);//创建sql半成品
			pstm.setString(1,"clerk");//参数绑定
			//4.执行sql语句
			rs = pstm.executeQuery();
			//5.处理结果集
			while(rs.next()){
				int empno = rs.getInt("empno");
				String ename = rs.getString("ename");
				String job = rs.getString(3);
				int mgr = rs.getInt("mgr");
				Date hiredate = rs.getDate(5);
				double sal = rs.getDouble("sal");
				double comm = rs.getDouble("commit");
				int deptno = rs.getInt(8);
				System.out.println(empno+" "+ename+" "+job+" "+mgr+" "+hiredate+" "+sal+" "+comm+" "+deptno);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 6.关闭连接/释放资源
			try {
				rs.close();
				pstm.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

2.JDBC编码问题分析

可以看到,上面的代码相当复杂,主要有下面几个大的问题,框架的出现很好的解决了这些问题。

  • 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能。
    解决方案:如果使用数据库链接池可解决此问题。

  • Sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java代码。
    解决方案:把sql语句写在一个配置文件中,修改配置文件中的sql语句就行了。

  • 使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能多也可能少,修改 sql 还要修改代码,系统不易维护。
    解决方案:sql语句中的占位符及其参数写在一个配置文件中,自动的完成参数的输入。(输入映射)

  • 结果集解析存在硬编码(查询列名),sql 变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成 pojo 对象解析比较方便。
    解决方案:查询的结果和Java对象可以自动完成映射。(输出映射)

二、主流的持久层框架

Mybatis属于SQL映射框架;而Hibernate属于ORM框架。

1.Hibernate框架

Hibernate是一个全自动ORM(Object Relation Mapping),旨在消除sql。但这也是把双刃剑,直接造成了herbinate的优化成本高,因为其无法支持定制化sql。

  • Hibernate由于过于强大,把过多的工作都进行了黑箱操作,当业务逻辑过于复杂时,很难支持定制化sql就成了硬伤。
    Mybatis框架 |Mybatis框架介绍_第1张图片

2.Mybatis框架(主流)

MyBatis 是一款优秀的持久层框架。支持定制化 SQL、存储过程以及高级映射;避免了几乎所有的 JDBC 代码和手工设置参数以及抽取结果集。MyBatis 使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

Mybatis封装了JDBC的很多细节,使开发者只需要关注sql语句本身,无需关注注册驱动,创建连接等繁杂过程。使用了ORM思想实现了结果集的封装。

Mybatis框架的特点

  • sql语句与代码分离,存放于xml配置文件中。
    优:解除sql与程序代码的耦合,便于维护管理。
    缺:降低了代码可读性,而且不利于调试。

  • 查询的结果集与java对象自动映射。
    优:保证名称相同,配置好映射关系即可自动映射;不配置映射关系,通过配置列名=字段名也可完成自动映射。
    缺:对开发人员所写的SQL依赖很强。

  • 需编写原生SQL
    优:接近JDBC,比较灵活。
    缺:对SQL语句依赖程度很高,并且数据库移植比较麻烦。

Mybatis框架 |Mybatis框架介绍_第2张图片

你可能感兴趣的:(#,Mybatis)