基于MyBatis的数据持久化框架的使用详解

一、MyBatis是什么

1.1、概述

Mybatis是一个优秀的开源、轻量级持久层框架,它对JDBC操作数据库的过程进行封装,简化了加载驱动、创建连接、创建 statement 等繁杂的过程,使开发者只需要关注sql本身。

我们原来使用JDBC操作数据库,需要手动的写代码去注册驱动、获取connection、获取statement等等,现在Mybaits帮助我们把这些事情做了,我们只需要关注我们的业务sql即可,这样可以提高我们的开发效率。

MyBatis属于半自动的ORM框架

MyBatis 支持定制化 SQL、存储过程以及高级映射,可以在实体类和 SQL 语句之间建立mapping映射关系,是一种半自动化的 ORM 实现。其封装性低于 Hibernate,但性能优秀、小巧、简单易学、应用广泛。

1.2、什么是持久化

数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中数据模型的统称。例如,文件的存储、数据的读取以及对数据表的增删改查等都是数据持久化操作。

1.3、什么是ORM

ORM(Object Relational Mapping,对象关系映射)是一种数据持久化技术,它在对象模型和关系型数据库之间建立起对应关系,并且提供了一种机制,通过 JavaBean 对象去操作数据库表中的数据。

1.4、MyBatis主要内容

MyBatis 前身为 iBatis,2002 年由 Clinton Begin 发布。2010 年从 Apache 迁移到 Google,并改名为 MyBatis,2013 年又迁移到了 Github。

MyBatis 的主要思想是将程序中的大量 SQL 语句剥离出来,使用 XML 文件或注解的方式实现 SQL 的灵活配置,将 SQL 语句与程序代码分离,在不修改程序代码的情况下,直接在配置文件中修改 SQL 语句。MyBatis与其它持久性框架最大的不同是,MyBatis 强调使用 SQL,而其它框架(例如 Hibernate)通常使用自定义查询语言,即 HQL(Hibernate查询语言)或EJB QL(Enterprise JavaBeans查询语言)。

1.5、优点

MyBatis是免费且开源的。

与 JDBC 相比,减少了 50% 以上的代码量。

MyBatis是最简单的持久化框架,体积小巧并且学习门槛低。

MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL 写在 XML 中,和程序逻辑代码分离,降低耦合度,便于同一管理和优化,提高了代码的可重用性。

提供 XML 标签,支持编写动态 SQL语句。

提供映射标签,支持实体对象与数据库的表字段关系映射。

1.6、缺点

编写 SQL语句工作量较大,对开发人员编写 SQL 语句的功底有一定要求。

SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

二、MyBatis架构

2.1、mybatis所依赖的jar包

lib 文件夹下的 jar 文件是 MyBatis的依赖包(mybatis-3.5.10.jar是MyBatis的核心包)

基于MyBatis的数据持久化框架的使用详解_第1张图片

将需要的核心包全部添加进项目构建路径中

2.2、MyBatis准备工作

基于MyBatis的数据持久化框架的使用详解_第2张图片

①创建数据库表结构

②创建实体类

在 src 目录下创建一个名为com.my.entity 的包,在该包中创建实体类 Website。

package com.my.entity;
 
import java.util.Date;
 
//网站信息实体类
public class Website {
    private int id;
    private String name;
    private String url;
    private int age;
    private String country;
    private Date createtime;
    
    @Override
    public String toString() {
        return "Website [id=" + id + ", name=" + name + ", url=" + url + ", age=" + age + ", country=" + country
                + ", createtime=" + createtime + "]";
    }
 
    
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
    public String getCountry() {
        return country;
    }
    public void setCountry(String country) {
        this.country = country;
    }
    public Date getCreatetime() {
        return createtime;
    }
    public void setCreatetime(Date createtime) {
        this.createtime = createtime;
    }
    
    
}

注意:在类中声明的属性名称与数据表 website 的字段名称,保持完全一致。

③ SQL映射文件(在 src 目录下创建 com.my.mapper 包,在该包下创建映射文件 WebsiteMapper.xml。)



 


        
        
            insert into website(name,url,age,country)values(#{name},#{url},#{age},#{country})
        
          
          

上述代码中, 元素是配置文件的根元素,它包含了 namespace属性,该属性值通常设置为“包名+SQL映射文件名”,用于指定唯一的命名空间。
子元素