一篇入魂,带你认识并使用Mybatis

一篇入魂,带你认识并使用Mybatis

  • JDBC是什么
    • 概念
    • 优点
    • 缺点
  • 什么是MyBatis
    • 概述
    • about
    • 方式
    • 映射
    • 优点
    • 缺点
  • 使用MyBatis
    • 环境配置
      • 导入依赖
      • 项目结构
      • jdbc.properties文件
      • mybatis配置文件
    • 编写代码
      • 数据库代码
      • 实体类
      • 接口
      • 映射文件
      • 返回值类型resultType设置
      • 测试类
    • 总结

JDBC是什么

概念

JDBC(Java Database Connectivity)是一种用于在Java应用程序和数据库之间进行连接和交互的Java API(应用程序编程接口)。它提供了一组类和接口,使开发人员能够通过标准的SQL语句来执行数据库操作,如查询、插入、更新和删除数据。

JDBC 提供了一个统一的接口,使得开发人员可以使用相同的代码来连接不同的数据库管理系统(DBMS),如MySQL、Oracle、SQL Server等。通过 JDBC,开发人员可以建立与数据库的连接、发送 SQL 语句、处理结果集和事务等。

优点

  • 广泛支持:JDBC 是 Java 的标准API,被几乎所有主流的数据库管理系统所支持。
  • 跨平台性:Java 是一种跨平台的编程语言,而 JDBC 作为其数据库访问的标准接口,也具备跨平台性。
  • 灵活性:JDBC 提供了灵活的编程方式,开发人员可以使用原生的 SQL 语句来直接操作数据库,从而有更大的控制权和自由度。

缺点

  • 低层编程:JDBC 是一种较低层次的数据库访问接口,需要开发人员手动编写和管理与数据库的连接、语句和结果集等。
  • 处理复杂性:对于复杂的数据库操作,如处理关联查询、对象映射等,使用纯 JDBC 可能变得复杂和繁琐。
  • 对象关系映射(ORM)限制:JDBC 不直接支持对象关系映射(ORM),需要开发人员自己处理将数据库结果集转换为对象的逻辑。

什么是MyBatis

概述

about

核心是操作数据库的一个框架,底层 对JDBC进行了封装
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis
免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。

方式

MyBatis 提供了两种配置和映射的方式:XML 配置和注解

  1. XML 配置:通过编写简单的 XML 配置文件,开发人员可以将原始类型、接口和 Java POJO 对象与数据库中的记录进行映射关联。在 XML 配置文件中,可以定义 SQL 语句、参数映射、结果集映射等信息,MyBatis 根据这些配置信息来执行数据库操作。
  2. 注解:除了 XML 配置外,MyBatis 还提供了注解的方式来进行配置和映射。开发人员可以在 Java 类或接口上使用注解,来指定与数据库中表或字段的映射关系。通过在代码中直接添加注解,可以更加灵活地定义数据库操作。

映射

Mybatis是一个ORM(对象关系映射)框架:将数据库中查询出来的字段名与java中实体类
的属性进行一一对应,要使数据库表和实体类进行映射,遵守以下规则
数据库中的字段名如果有多个字符,中间使用下划线连接,Java中是以驼峰命名规则进行命名

优点

  • 与JDBC相比,减少了50%的代码量
  • 简单易学
  • 将SQL语句从程序代码中彻底分离出来,可以重用
  • 提供XML标签,支持编写动态SQL
  • 支持对象与数据库表的ORM字段关系映射

MyBatis中文文档:https://mybatis.net.cn/getting-started.html

缺点

学习曲线较陡峭:相对于其他 ORM 框架,MyBatis 具有较高的学习曲线。

大量的 XML 配置:在 MyBatis 中,配置信息主要通过 XML 文件进行定义。虽然这样的设计可以提供灵活性和可配置性,但也意味着需要编写大量的 XML 配置文件。

繁琐的 SQL 编写:相比于完全基于对象的 ORM (对象关系映射)框架,MyBatis 需要手动编写大量的 SQL 语句。
缺乏自动化:相较于一些全自动化的 ORM 框架,MyBatis 需要手动编写和维护持久化代码。

对象关系映射(ORM)的限制:MyBatis 是一个半自动的 ORM 框架,它并不会对数据库模式和对象实体之间的关系进行严格的管理。

使用MyBatis

环境配置

导入依赖

<dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.10</version>
        </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.38</version>
            </dependency>

            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.13.2</version>
                <scope>test</scope>
            </dependency>

            <dependency>
                <groupId>org.projectLombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.26</version>
            </dependency>
    </dependencies>

导入了如下依赖

MyBatis(org.mybatis:mybatis:3.5.10):MyBatis 是一个开源的持久层框架,用于在 Java 应用程序中与数据库进行交互。

MySQL Connector(mysql:mysql-connector-java:5.1.38):这是 MySQL 数据库的官方 Java 驱动程序。

JUnit(junit:junit:4.13.2):JUnit 是一个 Java 编程语言的单元测试框架

Lombok(Project Lombok)是一个Java库,它通过使用注解来减少Java类中的冗余代码。

项目结构

一篇入魂,带你认识并使用Mybatis_第1张图片

jdbc.properties文件

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/hqyj03?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimeZone=Asia/Shanghai
password=aaa
username=root

方便给mybatis配置文件设置值

mybatis配置文件

在resource目录下创建mybatis配置文件,使用xml方式编写数据库连接信息

  1. 在idea中设置mybatis配置文件模板,使得创建的时候更方便(下面有配置文件内容)
    一篇入魂,带你认识并使用Mybatis_第2张图片
  2. 在配置文件中编写数据库连接信息。

在内容里面可以看见${}这种语法。

${driver} 是 MyBatis 配置文件(mybatis-config.xml)中的占位符语法,${driver} 即为一个占位符,它会根据 ${jdbc.driver} 所引用的属性值进行替换。用于引用配置文件中定义的属性值。

在 MyBatis 的配置文件中,可以使用 元素定义一组属性,并通过 ${propertyName} 的方式来引用这些属性。

<?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配置内容时,有顺序限制-->
<configuration>
    <properties resource="jdbc.properties"></properties>
    <!--mybatis环境,default属性指定一个环境-->
    <environments default="development">
        <!--id属性自定义的环境唯一标识符-->
        <environment id="development">
            <!--指定使用jdbc事务管理-->
            <transactionManager type="JDBC"/>
            <!--使用mybatis内部带连接池功能的数据源-->
            <dataSource type="POOLED">
                <!--获取配置驱动-->
                <property name="driver" value="${driver}"/>
                <!--获取配置url-->
                <property name="url" value="${url}"/>
                <!--获取配置账号-->
                <property name="username" value="${username}"/>
                <!--获取配置密码-->
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--映射器,映射器的 XML 映射文件包含了 SQL 代码和映射定义信息-->
    <mappers>
        <mapper resource="com/yjg/mybatis/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

Tip

default="development" 表示将 development 这个环境设置为默认环境。这意味着如果没有明确指定使用哪个环境,MyBatis 将使用名为 development 的环境作为默认环境。

元素内部,你可以定义多个 子元素来配置不同的环境。每个 元素都包含一个或多个数据源()、事务管理器()和其他可选的配置。

编写代码

数据库代码

CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `username` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

实体类

import lombok.Data;

@Data
public class User {
    private Integer id;
    private String username;
    private String password;
}

接口

Java 接口文件(Mapper 接口):Mapper 接口用于定义数据库操作的方法。

public interface UserMapper {
    //根据id查询用户
    User queryUserById();

    //查询用户数量
    int queryUserCount();

    //查询全部用户
    ListqueryAllUser();

    //插入用户
    int  addUser();

    //更新用户
   int updateUser();

   //查询一个用户返回值类型为Map类型
  // @MapKey( "id")加上就指定id字段作为key,可以不加
    Map queryUserToMap(); 
}

映射文件

映射文件(Mapper XML 文件):映射文件用于定义 SQL 语句的映射关系,将 Java 对象与数据库表进行关联。

  • 标签的 namespace 属性用于指定映射文件与对应的接口或类之间的关联关系。通过指定 namespace 属性,MyBatis 就能够将映射文件与对应的接口或类进行绑定,使得在使用时可以更方便地进行调用。

    具体而言,namespace 属性的取值应为接口或类的全限定名(包括包路径)。这里的接口或类所指的是与映射文件相对应的 Java 接口或类,它们定义了与数据库交互的方法和 SQL 语句的对应关系。