• 【MyBatis】MyBatis的前世今生与环境搭建


    MyBatis的前世今生与环境搭建

    本文已收录于专栏
    ⭐️ 《MyBatis》⭐️

    什么是MyBatis?

    MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。

    MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。

    MyBatis可以使用简单的XML或注解来配置和映射原生类型、集合接口以及Java的POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

    MyBatis中文网:https://mybatis.net.cn/index.html

    可以简单的理解为:Mybatis 本身抽象了大量的 JDBC 冗余代码,同时基于对象关系映射模型,向外提供了一套灵活易用的 API 和数据库做交互。

    前世今生

    ORM映射模型

    用于JDBC 书写时需要开发编写过多的代码,操作所有对象,既麻烦还特别容易出错,所以在我们实际开发中很少直接使用 JDBC 进行编程,于是ORM 的登台显得尤为重要,ORM 全称是 Object/Relation Mapping:表示 对象-关系映射 的缩写。

    ORM模型 ,简单来说,就是数据库的表和简单 Java 对象的映射关系模型。采用ORM框架后,应用程序不再直接访问底层数据库,而是以 面向对象 的方式来操作持久化对象,而ORM框架则将这些面向对象的操作转换成底层SQL操作。ORM框架实现的效果:把对持久化对象的保存、修改、删除 等操作,转换为对数据库的操作。

    Hibernate模型开发过程

    最初 SUN 公司推出了 Java EE 服务器端组件模型(EJB),不过由于EJB 配置过于复杂,且适应范围小于是很快就被淘汰。后来封装度极高、开发效率极高、全表映射的 ORM 持久层框架Hibernate 出现,成为了当时首选的 Java ORM 模型框架。

    但是随着互联网的极速发展、复杂业务场景的不断涌现,Hibernate 在许多方面慢慢暴露出了缺点:灵活性不够、无法根据不同条件组装不同SQL、对多表关联和复杂SQL查询支持较差、SQL优化和性能差、全表映射带来的不便等等。

    MybatisLogo

    于是 Mybatis 框架应运而生,弥补了Hibernate的不足,不仅简单易用,而且具有高度灵活、可优化、易维护等特点,成为如今大型互联网项目的首选框架。

    Mybatis 前身是 iBATIS,2001年由Clinton Begin发起的一个开源项目,最初侧重于密码软件的开发,后来发展成为一款基于Java的持久层框架.

    2004年,Clinton 将 iBATIS 的名字和源码捐赠给 Apache 软件基金会,接下来的6年中,开源软件世界发生了巨大的变化,一切开发实践、基础设施、许可,甚至数据库技术都彻底改变了。

    在2010年6月,核心开发团队把这个项目由 apache software foundation 迁移到了google code,随着开发团队转投 Google Code 旗下,ibatis3.x 正式更名为 Mybatis .

    代码于2013年11月迁移到 Github 。

    整体架构

    Mybatis整体架构图

    MyBatis 的整体架构分为三层, 分别是基础支持层、核心处理层和接口层:

    img

    基础支持层

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e6JXtCy1-1661134584360)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20220822101149645.png)]

    核心处理层

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0BtKgWdn-1661134514233)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20220822101203981.png)]

    MyBatis 执行一条SQL 语句的大致过程:

    img

    接口层

    核心是SqlSession 接口,该接口中定义了MyBatis 暴露给应用程序调用的API ,也就是上层应用与MyBatis 交互的桥梁。接口层在接收到调用请求时,会调用核心处理层的相应模块来完成具体的数据库操作。

    环境搭建

    默认已安装 Java 开发环境、Mysql数据库、Maven 环境。

    Mybatis 开发与环境搭建,我们先入门体验,步骤如下:

    1、创建 maven 工程

    2、添加 MyBatis 仓库坐标(非maven项目则引入jar包)

    3、创建user数据表

    4、编写User实体类

    5、编写映射文件UserMapper.xml

    6、编写核心文件SqlMapConfig.xml

    7、编写测试类

    • 创建 maven 工程

    创建maven工程

    • 添加 MyBatis 仓库坐标

      
      
          org.mybatis
          mybatis
          3.4.5
      
    
      
      
          mysql
          mysql-connector-java
          5.1.6
          runtime
      
    
      
      
          junit
          junit
          4.12
          test
      
    
      
      
          log4j
          log4j
          1.2.12
      
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 创建user数据表

    • CREATE TABLE `user` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `username` varchar(50) DEFAULT NULL,
        `password` varchar(50) DEFAULT NULL,
        `birthday` varchar(50) DEFAULT NULL,
        PRIMARY KEY (`id`)
      ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    • 编写User实体类

    package com.panshenlian.pojo;
    
       public class User {
       private int id;
       private String username;
       private String password;
       private String birthday;
    
       public int getId() {
           return id;
       }
    
       public void setId(int id) {
           this.id = id;
       }
    
       public String getUsername() {
           return username;
       }
    
       public void setUsername(String username) {
           this.username = username;
       }
    
       public String getPassword() {
           return password;
       }
    
       public void setPassword(String password) {
           this.password = password;
       }
    
       public String getBirthday() {
           return birthday;
       }
    
       public void setBirthday(String birthday) {
           this.birthday = birthday;
       }
    
       @Override
       public String toString() {
           return "User{" +
                   "id=" + id +
                   ", username='" + username + '\'' +
                   ", password='" + password + '\'' +
                   ", birthday='" + birthday + '\'' +
                   '}';
       }
       }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 编写映射文件UserMapper.xml
    
    
    
    
        
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 编写核心文件SqlMapConfig.xml

    • 
      
      
          
              
                  
                  
                      
                      
                      
                      
                  
              
          
          
              
          
      
      
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
    • 编写测试类

    • import com.panshenlian.pojo.User;
      import org.apache.ibatis.io.Resources;
      import org.apache.ibatis.session.SqlSession;
      import org.apache.ibatis.session.SqlSessionFactory;
      import org.apache.ibatis.session.SqlSessionFactoryBuilder;
      import org.junit.Test;
      
      import java.io.IOException;
      import java.io.InputStream;
      import java.util.List;
      
      public class MybatisTest {
      
          @Test
          public void testQueryUser01() throws IOException {
      
              //加载核心配置文件
              InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
      
              // 获得sqlSession工厂对象
              SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
      
              //获得sqlSession对象
              SqlSession sqlSession = sqlSessionFactory.openSession();
      
              // 执行sql语句
              List userList = sqlSession.selectList("userMapper.findAll");
      
              // 打印结果
              for (User user : userList) {
                  System.out.println(user);
              }
              // 释放资源
              sqlSession.close();
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36

    最终通过 Junit 单元测试,运行结果符合预期:

    img

    工程结构参考:

    工程结构参考

    完结散花

    ok以上就是对 MyBatis 的前世今生与环境搭建的全部讲解啦,很感谢你能看到这儿。如果有遗漏、错误或者有更加通俗易懂的讲解,欢迎小伙伴私信我,我后期再补充完善。

    参考文献

    https://blog.csdn.net/qq_33369905

    https://blog.csdn.net/weixin_47872288/

  • 相关阅读:
    安装 Oracle Database 23c Free
    Spring Security(八) —— 异常处理
    5.Array扩展
    vue清除动态路由
    Shell之wc命令
    在win10环境下安装python,配置python环境,执行python脚本
    美团闪购:闪电仓商户如狼似虎,传统商超便利店坐享其成?
    【practise】逆波兰表达式求值
    Python: 一步之遥
    milvus和相似度检索
  • 原文地址:https://blog.csdn.net/m0_66139206/article/details/126460677