Mybatis的介绍和基本使用

0、数据库操作框架的历程

##### (1) JDBC

​ JDBC(Java Data Base Connection,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成.JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序

  • 优点:运行期:快捷、高效
  • 缺点:编辑期:代码量大、繁琐异常处理、不支持数据库跨平台
  • illustration

    ##### (2) DBUtils

    ​ DBUtils是Java编程中的数据库操作实用工具-小巧简单实用。

    ​ DBUtils封装了对JDBC的操作-简化了JDBC操作-可以少写代码。

    ​ DBUtils三个核心功能介绍

    ​ 1、QueryRunner中提供对sql语句操作的API

    ​ 2、ResultSetHandler接口-用于定义select操作后-怎样封装结果集

    ​ 3、DBUtils类-它就是一个工具类-定义了关闭资源与事务处理的方法

    ##### (3)Hibernate

    ​ Hibernate 是由 Gavin King 于 2001 年创建的开放源代码的对象关系框架。它强大且高效的构建具有关系对象持久性和查询服务的 Java 应用程序。

    ​ Hibernate 将 Java 类映射到数据库表中-从 Java 数据类型中映射到 SQL 数据类型中-并把开发人员从 95% 的公共数据持续性编程工作中解放出来。

    ​ Hibernate 是传统 Java 对象和数据库服务器之间的桥梁-用来处理基于 O/R 映射机制和模式的那些对象。

    illustration

    Hibernate 优势

  • Hibernate 使用 XML 文件来处理映射 Java 类别到数据库表格中-并且不用编写任何代码。
  • 为在数据库中直接储存和检索 Java 对象提供简单的 APIs。
  • 如果在数据库中或任何其它表格中出现变化-那么仅需要改变 XML 文件属性。
  • 抽象不熟悉的 SQL 类型-并为我们提供工作中所熟悉的 Java 对象。
  • Hibernate 不需要应用程序服务器来操作。
  • 操控你数据库中对象复杂的关联。
  • 最小化与访问数据库的智能提取策略。
  • 提供简单的数据询问。
  • Hibernate劣势

  • hibernate的完全封装导致无法使用数据的一些功能。
  • Hibernate的缓存问题。
  • Hibernate对于代码的耦合度太高。
  • Hibernate寻找bug困难。
  • Hibernate批量数据操作需要大量的内存空间而且执行过程中需要的对象太多
  • ##### (4) JDBCTemplate

    ​ JdbcTemplate针对数据查询提供了多个重载的模板方法,你可以根据需要选用不同的模板方法.如果你的查询很简单-仅仅是传入相应SQL或者相关参数-然后取得一个单一的结果-那么你可以选择如下一组便利的模板方法。

    ​ 优点:运行期:高效、内嵌Spring框架中、支持基于AOP的声明式事务 ​ 缺点:必须于Spring框架结合在一起使用、不支持数据库跨平台、默认没有缓存

    1、什么是Mybatis?

    ​ MyBatis 是一款优秀的持久层框架-它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects-普通老式 Java 对象)为数据库中的记录。

    优点:

    ​ 1、与JDBC相比-减少了50%的代码量

    ​ 2、 最简单的持久化框架-简单易学

    ​ 3、SQL代码从程序代码中彻底分离出来-可以重用

    ​ 4、提供XML标签-支持编写动态SQL

    ​ 5、提供映射标签-支持对象与数据库的ORM字段关系映射

    缺点:

    ​ 1、SQL语句编写工作量大-熟练度要高

    ​ 2、数据库移植性比较差-如果需要切换数据库的话-SQL语句会有很大的差异

    2、第一个Mybatis项目

    ​ 1、创建普通的maven项目

    ​ 2、导入相关的依赖

    ​ pom.xml

    ``xml 4.0.0 com.oi mybatis_helloworld 1.0-SNAPSHOT org.mybatis mybatis 3.5.4 mysql mysql-connector-java 8.0.16 log4j log4j 1.2.17 `

    ​ 3、创建对应的数据表-数据表我们使用之前的demo数据库-脚本文件在群里-大家自行去下载安装

    ​ 4、创建与表对应的实体类对象

    emp.java

    `java package com.oi.bean;import java.util.Date;public class Emp { private Integer empno; private String ename; private String job; private Integer mgr; private Date hiredate; private Double sal; private Double common; private Integer deptno; public Emp() { } public Emp(Integer empno, String ename, String job, Integer mgr, Date hiredate, Double sal, Double common, Integer deptno) { this.empno = empno; this.ename = ename; this.job = job; this.mgr = mgr; this.hiredate = hiredate; this.sal = sal; this.common = common; this.deptno = deptno; } public Integer getEmpno() { return empno; } public void setEmpno(Integer empno) { this.empno = empno; } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } public Integer getMgr() { return mgr; } public void setMgr(Integer mgr) { this.mgr = mgr; } public Date getHiredate() { return hiredate; } public void setHiredate(Date hiredate) { this.hiredate = hiredate; } public Double getSal() { return sal; } public void setSal(Double sal) { this.sal = sal; } public Double getCommon() { return common; } public void setCommon(Double common) { this.common = common; } public Integer getDeptno() { return deptno; } public void setDeptno(Integer deptno) { this.deptno = deptno; } @Override public String toString() { return "Emp{" + "empno=" + empno + ", ename='" + ename + ''' + ", job='" + job + ''' + ", mgr=" + mgr + ", hiredate=" + hiredate + ", sal=" + sal + ", common=" + common + ", deptno=" + deptno + '}'; }} `

    ​ 5、创建对应的dao类

    EmpDao.java

    `java package com.oi.dao;import com.oi.bean.Emp;public interface EmpD