MyBatis 查询数据库入门

本文是 MyBatis 入门教程,介绍了 MyBatis 的概念、学习原因及如何配置和使用。包括创建项目、配置数据库连接、使用 MyBatis 操作模式、增删改查操作、参数占位符的区别、日志打印功能、以及单表查询和多表查询的基础知识。通过实例展示了 MyBatis 如何简化数据库操作,提高开发效率。

一、MyBatis 是什么?

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 去除了几乎 所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和 映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记 录。

简单来说 MyBatis 是更简单完成程序和数据库交互的工具,也就是更简单的操作和读取数据库工具。

针对 “MyBatis 是一款优秀的持久层框架” 进行分析和补充:

MyBatis也是一个 ORM (Object Relational Mapping,即对象关系映射)框架。

在面向对象编程语言中,将关系型数据库中的数据与对象建立起映射关系,进而自动的完成数据与对象的相互转换:

  1. 将输入数据(即传入对象)+ SQL 映射成原生 SQL。
  2. 将结果集映射为返回对象,即输出对象。\

ORM 把数据库映射为对象:

  • 数据库表(table) --> 类(class)
  • 记录(record,行数据) --> 对象(object)
  • 字段(field) --> 对象的属性(attribute)

一般的 ORM 框架,会将数据库模型的每张表都映射为一个 Java 类。

即,使用 MyBatis 可以像操作对象一样来操作数据库中的表,可以实现对象和数据库表之间的转换。


即:MyBatis 可以当作是一座 “桥梁”:

将数据库 和 程序,映射起来。

MySQL 和 MyBatis 是不一样的:

MySQL 提供了一个 数据存取(数据管理)的软件。

而 MyBatis 是一个 “中间桥梁”,用于连接程序和数据库,建立映射关系,进行 数据操作 的中间层(持久层)。

二、为什么要学习 MyBatis

对于后端开发来说,程序是由以下两个重要的部分组成的:

  1. 后端程序
  2. 数据库

而这两个重要的组成部分要通讯,就要依靠数据库连接工具,那数据库连接工具有哪些?比如之前我们 学习的 JDBC,还有今天我们将要介绍的 MyBatis,那已经有了 JDBC 了,为什么还要学习 MyBatis?

这是因为 JDBC 的操作太繁琐了,我们回顾一下 JDBC 的操作流程:

  1. 创建数据库连接池 DataSource
  2. 通过 DataSource获取数据库连接 Connection
  3. 编写要执行带 ? 占位符的 SQL 语句
  4. 通过 ConnectionSQL 创建操作命令对象 Statement  
  5. 替换占位符:指定要替换的数据库字段类型,占位符索引及要替换的值  
  6. 使用 Statement 执行 SQL 语句  
  7. 查询操作:返回结果集 ResultSet,更新操作:返回更新的数量
  8. 处理结果集
  9. 释放资源

JDBC 操作示例回顾

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class TestJDBC {
    public static void main(String[] args) throws SQLException {
        //让用户手动输入数据到数据库中
        Scanner scanner = new Scanner(System.in);

        //1. 创建数据源
        DataSource dataSource = new MysqlDataSource();

        //设置数据库所在的地址
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false");
        //设置登录数据库的用户名
        ((MysqlDataSource)dataSource).setUser("root");
        //设置登录数据库的密码
        ((MysqlDataSource)dataSource).setPassword("1234");

        //2. 让代码和数据库服务器之间建立连接
        Connection connection = dataSource.getConnection();

        //3. 操作数据库,以插入数据为例
        //   关键所在:构造一个 SQL 语句
        //   在 JDBC 中构造 SQL 语句,不必带上 ;
        //   ; 只是在命令行中用来区分不同的语句,现在是直接在代码中操作
        String sql = "insert into JDBC values(1,'张三')";
        // 此处光是一个 String 类型的 sql 还不行,需要把这个 String 包装成一个 “语句对象”
        PreparedStatement preparedStatement = connection.prepareStatement(sql);

        //用户手动输入数据
        System.out.println("请输入 ID:");
        int id = scanner.nextInt();
        System.out.println("请输入 姓名:");
        String name = scanner.next();

        //? 相当于告诉 java程序,这两个字段的值 还不确定,此时就使用 ? 先占个位置
        // 再使用 PreparedStatement 的 setXXX 方法 进行替换,这里的setXXX方法很多,需要让这里的方法和数据库的列的类型匹配
        String sql2 = "insert into JDBC values(?,?)";
        PreparedStatement statement = connection.prepareStatement(sql2);
        //进行替换操作
        statement.setInt(1,id); //下标从 1 开始计算,把第一个 ? 替换成 id 这样的值
        statement.setString(2,name);
        System.out.println("statement: " + statement); //通过这个打印操作,可以看到拼装好之后的 SQL 长啥样

        //4. 执行 SQL
        //      SQL 里面如果是 insert, update, delete ,都使用 executeUpdate 方法,
        //      SQL 里面如果是 select,则使用 executeQuery 方法
        //      返回值就表示这个操作,影响到了几行,就相当于在控制台里输入 sql 之后,得到的数字
        int ret =  preparedStatement.executeUpdate();
        int ret2 = statement.executeUpdate();
        System.out.println(ret);
        System.out.println(ret2);

        //5. 此时 SQL 已经执行完毕,然后还需要释放资源
        preparedStatement.close();
        statement.close();
        connection.close();
    }
}

从上述代码和操作流程可以看出,对于 JDBC 来说,整个操作非常的繁琐,我们不但要拼接每一个参 数,而且还要按照模板代码的方式,一步步的操作数据库,并且在每次操作完,还要手动关闭连接等, 而所有的这些操作步骤都需要在每个方法中重复书写。于是我们就想,那有没有一种方法,可以更简单、更方便的操作数据库呢?

答案是肯定的,这就是我们要学习 MyBatis 的真正原因,它可以帮助我们更方便、更快速的操作数据库。

三、怎么学 MyBatis

MyBatis 学习只分为两部分:

  • 配置 MyBatis 开发环境。
  • 使用 MyBatis 模式和语法操作数据库。

1. 创建 MyBatis 项目

准备工作:创建数据库 和 数据表

-- 创建数据库
drop database if exists Mybatis;
create database Mybatis DEFAULT CHARACTER SET utf8;
-- 使⽤数据数据
use Mybatis;
-- 创建表[⽤户表]
drop table if exists userinfo;
create table userinfo(
id int primary key auto_increment,
username varchar(100) not null,
password varchar(32) not null,
photo varchar(500) default '',
createtime datetime default now(),
updatetime datetime default now(),
`state` int default 1
);
-- 创建⽂章表
drop table if exists articleinfo;
create table articleinfo(
id int primary key auto_increment,
title varchar(100) not null,
content text not null,
createtime datetime default now(),
updatetime datetime default now(),
uid int not null,
rcount int not null default 1,
`state` int default 1
);
-- 创建视频表
drop table if exists videoinfo;
create table videoinfo(
vid int primary key,
`title` varchar(250),
`url` varchar(1000),
createtime datetime default now(),
updatetime datetime default now(),
uid int
);
-- 添加⼀个⽤户信息
INSERT INTO `Mybatis`.`userinfo` (`id`, `username`, `password`, `photo`,
`createtime`, `updatetime`, `state`) VALUES
(1, 'admin', 'admin', '', '2021-12-06 17:10:48', '2021-12-06 17:10:48',
1);
-- ⽂章添加测试数据
insert into articleinfo(title,content,uid)
values('Java','Java正⽂',1);
-- 添加视频
insert into videoinfo(vid,title,url,uid) values(1,'java
title','http://www.baidu.com',1);

将上面的代码复制到本地的 MySQL。

1.1 添加 MyBatis 相关依赖

这里会涉及两个场景:

  1. 项目创建的时候,引入 MyBatis 相关依赖。
  2. 老项目添加 MyBatis。

1. 新建一个 MyBatis 项目

  1. 创建新项目:

\

  1. MyBatis 项目是建立在 Spring MVC 项目上的,因此,下面三个框架依赖必不可少:

\

  1. 添加 MyBatis 项目:

\

  1. 引入可驱动的数据库:

  1. 点击 finish即可完成。

2. 老项目中引入 MyBatis 相关依赖

使用 Edit Starter插件进行添加。

pom.xml文件中的 dependencies标签中,找到一个空行(人造一个也行),鼠标右击,选择 generate

下面为获取依赖的官方网址:

选择要添加的依赖:

\

\

1.2 配置数据库连接字符串

不要立即启动项目,否则就会报错:

\

  1. resources下创建三个.yml文件

(现在的学习还不会涉及到生产环境)

  1. 配置开发环境配置文件:

注意:关于 driver-class-name中所写的驱动名称

  • 驱动名称:我们使用的是 MySQL,因此我们填写的是 MySQL 的驱动名称。
  • 如果使用的 MySQL 是 5.x之前的版本,则用 com.mysql.jdbc.Driver
    如果版本大于 5.x,则用 com.mysql.cj.jdbc.Driver

\

  1. 在主配置文件中激活开发环境

\

此时启动项目后就不会报错了:

\

1.3 配置 MyBatis 保存的 xml 的目录

MyBatis 有两种操作方法:

  1. 使用 xml的形式。
  2. 注解。(MyBatis 3.1 版本之后提供)

但是,注解的方式并不好用,我们主要还是关注 xml形式的操作。

  1. 一般我们在 resources目录下,创建一个子目录,来存放 xml文件:

\

  1. 由于此配置是公共的,所以我们在主配置文件配置 MyBatis 的 xml 保存路径:

\

四、使用 MyBatis 的操作模式操作数据库

MyBatis 的操作模式

MyBatis 的操作模式,包含两个部分:

  1. Interface(接口,里面是方法的定义)
  2. xml 文件(对 方法 的实现,使用 SQL 语句)

在 Interface 接口中会加一个注解,这个注解是MyBatis里的注解 @Mapper,将普通的接口变为 MyBatis 里面的接口,将接口里面的方法映射进 xml文件。

\

MyBatis 查询:实现一个根据用户id来查询用户信息的操作

数据库中已经创建好的表:

\

1. 定义接口

现在根目录底下创建几个包:

  • model 与数据库交互
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值