第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构建的方式

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.4.5</version>
</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创建数据源,并封装成一个工具类
  • package com.mybatis;
    
    import org.apache.ibatis.datasource.pooled.PooledDataSource;
    
    import javax.sql.DataSource;
    
    public class DataSourceFactory {
    
        public static DataSource getDataSource(){
            //驱动
            String driver="com.mysql.jdbc.Driver";
            //连接字符串
            String url="jdbc:mysql://localhost:3306/practice?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true";
            //用户名
            String username="root";
            //密码
            String password="1234";
            return  new PooledDataSource(driver,url,username,password);
        }
    }
    
  • 第三步:在 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 <mapper> 标签的 namespace 属性值必须是对应的 DAO 接口类的全限定名
说明 3 <select> 标签的 id 属性值必须与 DAO 接口中的方法名相同且唯一
说明 4 MyBatis 会自动生成 DAO 接口的实现类,不需要开发者手动实现。 MyBatis 使用 DAO 接口调用方法时,通过与之对应的映射文件就可以唯一确定需要运行的 SQL 语句
说明5:如果是maven项目,xml文件要放在resources对应的文件夹
  • 第八步:执行第四步到第六步写完的main方法,查看结果,发现已经把所有的Department信息都查询出来了。注意:执行前请先往数据库表增加几条记录

XML配置文件开始使用MyBatis

  • 第一步:在src根目录下创建jdbc.properties配置文件,存储DataSource数据源信息
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.driverUrl=jdbc:mysql://localhost:3306/d_mybatis?useUnicode=true&amp;characterEncoding=utf-8
jdbc.user=root
jdbc.password=root
  • 第二步:在com.gs.dao包中创建Mapper映射器接口对应的SQL映射文件DepartmentDAO.xml,可直接使用前面Java代码中创建好的DepartmentDAO.xml
  • 第三步:在src根目录中添加MyBatisXML配置文件mybatis.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="jdbc.properties" /> <!-- 引用jdbc配置文件 -->
    <environments default="development">
       <environment id="development">
            <transactionManager type="JDBC"/> <!-- 声明jdbc事务处理 -->
           <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driverClassName}"/>
               <property name="url" value="${jdbc.driverUrl}"/>
                <property name="username" value="${jdbc.user}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/gs/dao/DepartmentDAO.xml"/> <!-- 引用Mapper接口的sql映射文件 -->
    </mappers>
</configuration>
  • 第四步:在com.gs.dao包中创建Mapper映射器接口也即DAO接口DepartmentDAO。可直接使用前面Java代码中创建好的DepartmentDAO接口
  • 第五步:在com.gs.mybatis包中编写一个MyBatisXML类,在main方法中由MyBatis配置文件和SqlSessionFactoryBuilder获取SqlSessionFactory

  • 第六步:由SqlSessionFactory获取SqlSession

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

  • 第八步:执行第四步到第六步写完的main方法,查看结果,发现已经把所有的Department信息都查询出来了。

两种使用MyBatis方式的区别

使用 Java 代码和 XML 配置文件的方式使用 MyBatis ,唯一的区别就在于数据源和 MyBatis 的配置上,前者使用纯 Java 代码,而后者通过 XML 文件来配置,我们推荐使用 XML 配置文件的方式。在后期框架的整合过程中也都是使用 XML 配置文件。

本人从事软件项目开发20多年,2005年开始从事Java工程师系列课程的教学工作,录制50多门精品视频课程,包含java基础,jspweb开发,SSH,SSM,SpringBoot,SpringCloud,人工智能,在线支付等众多商业项目,每门课程都包含有项目实战,上课PPT,及完整的源代码下载,有兴趣的朋友可以看看我的在线课堂

讲师课堂链接:https://edu.csdn.net/lecturer/893

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CSDN专家-赖老师(软件之家)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值