• 第1讲:MyBatis简介与入门


    目录

    1. 了解MyBatis
    2. 掌握MyBatisHibernate的区别
    3. 安装使用MyBatis
    4. 了解MyBatis的基本构架
    5. 掌握以XMLJava使用MyBatis
    6. 掌握MyBatisXML配置文件的使用
    7. 完成第一个MyBatis程序的编写

    什么是MyBatis

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

    MyBatis的发展历史

    • MyBaits的前身是Apache的一个开源项目iBatis
    • 2010年这个项目由Apache Software Foundation 迁移到了 Google Code 并且改名为MyBatis
    • 201311月迁移到GitHub,目前MyBaits是由GitHub维护的

    MyBatisHibernateJDBC的对比

    • MyBatisHibernate都是ORM框架,都是对JDBC的封装,能够简化DAO层代码的编写
    • MyBatis是基于SQL的半自动化ORM框架,使用原生SQL,支持对SQL的高度定制,弱化了表间关联关系的使用
    • Hibernate是面向对象的ORM框架,可使用原生SQL, HQL,严重依赖于表间的关联关系
    • MyBatis相比Hibernate拥有更好的性能
    • MyBatis只需要提供DAO接口,DAO接口的实现类会由MyBatis自动生成
    • Hibernate需要开发者编写DAO接口的实现类
    • MyBatis一般与SpringMVC, Spring结合使用,组成”SSM”框架
    • Hibernate一般与Struts2, Spring结合使用,组成”SSH”框架

    MyBatis的使用场景

    • SpringMVCSpring框架整合的应用
    • 追求高度定制化SQL的应用
    • 对性能有一定要求的应用
    • 大部分的互联网项目会选择使用”SSM”框架

    MyBatis的安装使用

    下载JAR包的方式

    只需要把下载的 zip 文件里的 mybatis-x.x.x.jar 加入到 Classpath 路径中(本课程中使用 3.4.5 版本)。下载地址: Releases · mybatis/mybatis-3 · GitHub

            Maven构建的方式

    1. <dependency>
    2. <groupId>org.mybatis</groupId>
    3. <artifactId>mybatis</artifactId>
    4. <version>3.4.5</version>
    5. </dependency>

    注意:同时需要把数据库驱动JAR引用到项目中,本课程中使用的是MySQL5.5及以上版本

    MyBatis的基本构架

    MyBatis的基本架构

    • SqlMapConfig.xml此文件作为MyBatis的全局配置文件,配置了MyBatis的运行环境等信息。mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句,此文件需要在SqlMapConfig.xml中加载。
    • 通过MyBatis环境等配置信息构造SqlSessionFactory(即会话工厂)
    • 由会话工厂创建SqlSession即会话,操作数据库需要通过SqlSession进行。
    • MyBatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
    • MappedStatement也是MyBatis一个底层封装对象,它包装了MyBatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个MappedStatement对象,sql的id即是MappedStatement的id。
    • MappedStatementsql执行输入参数进行定义,包括HashMap基本类型、pojo,Executor通过MappedStatement在执行sql前将输入的Java对象映射至sql中,输入参数映射就是JDBC编程中对PreparedStatement设置参数。
    • MappedStatementsql执行输出结果进行定义,包括HashMap基本类型、pojo,Executor通过MappedStatement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于JDBC编程中对ResultSet的解析处理过程。

    MyBatis的核心类

    • SqlSessionFactoryBuilderSqlSession工厂构建器,使用SqlSessionFactoryBuilder创建SqlSessionFactory类的实例,一旦创建了 SqlSessionFactory类的实例就不再需要SqlSessionFactoryBuilder了。
    • SqlSessionFactorySqlSession工厂类,用于创建SqlSession类实例的工厂。 SqlSessionFactory类的实例一旦被创建就应该在应用的运行期间一直存在,不能对它进行清除或重建。
    • SqlSessionSql会话,用于获取Mapper映射。SqlSession类的实例是非线程安全的,当访问完数据库后需要及时关闭SqlSession
    • Mapper 映射器是创建用来绑定映射语句的接口。映射器接口的实例是从 SqlSession 中获得的。一个映射器实例对应一个SQL映射文件。
    • Mapper映射器就是MVC框架中的DAO接口。
    以上四个核心类的关系为:
    1.         1、由SqlSessionFactoryBuilder创建SqlSessionFactory
      1.         2、由SqlSessionFactory获取SqlSession
        1.         3、由SqlSession获取Mapper映射器(DAO接口)实例
          1.         4、由Mapper映射器(DAO接口)实例调用指定的SQL语句

    创建即将使用的数据库及数据库表

    创建d_mybatis数据库:

    create database if not exists d_mybatis default charset utf8 collate utf8_general_ci;

    创建t_department部门数据表:

    create table t_department (

      id int primary key auto_increment,

      title varchar(20) not null,

      des varchar(200)

    );

    Java代码开始使用MyBatis

    • 第一步:在com.gs.bean包中创建t_department表对应的JavaBean对象Department,提供属性的getter/setter方法,并重写toString()方法,此处省略JavaBean的创建代码
    • 第二步:在com.gs.mybatis包中使用MyBatis提供的PooledDataSource创建数据源,并封装成一个工具类
      1. package com.mybatis;
      2. import org.apache.ibatis.datasource.pooled.PooledDataSource;
      3. import javax.sql.DataSource;
      4. public class DataSourceFactory {
      5. public static DataSource getDataSource(){
      6. //驱动
      7. String driver="com.mysql.jdbc.Driver";
      8. //连接字符串
      9. String url="jdbc:mysql://localhost:3306/practice?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true";
      10. //用户名
      11. String username="root";
      12. //密码
      13. String password="1234";
      14. return new PooledDataSource(driver,url,username,password);
      15. }
      16. }
    • 第三步:在 com.gs.dao 包中创建 Mapper 映射器接口也即 DAO 接口 DepartmentDAO
    • 第四步:在com.gs.mybatis包中编写一个MyBatisJava类,在main方法中使用数据源和SqlSessionFactoryBuilder获取SqlSessionFactory

    • 第五步:由SqlSessionFactory获取SqlSession

    • 第六步:由SqlSession获取映射器接口并调用方法执行相应的SQL语句

    • 第七步:在第六步中,获取到了DepartmentDAO接口,并调用listAll方法,但是listAll究竟会执行哪个SQL呢?此时我们需要在com.gs.dao包中创建Mapper映射器接口对应的SQL映射文件DepartmentDAO.xml

    说明 1 xml 映射文件名与 DAO 接口名相同,并且此文件与 DepartmentDAO 接口类在同一个包中
    说明 2 标签的 namespace 属性值必须是对应的 DAO 接口类的全限定名
    说明 3