优秀持久层框架——MyBatis

何为MyBatis

在Java程序中如果想要操作数据库,官方提供了JDBC这套API,但从开发效率而言,直接使用原生的JDBC进行开发,代码有些冗杂、开发效率也不够高,所以说就需要使用框架来协助开发。MyBatis就是一个优秀的持久层(三层架构中的DAO)框架,其主要用于简化JDBC的开发;MyBatis的底层就是JDBC,但是对其进行了高度的封装,从而简化了原生JDBC开发

使用MyBatis

准备工作

创建SpringBoot工程,引入MyBatis相关依赖

因为现在大部分的项目都是基于SpringBoot框架开发的,所以说直接在SpringBoot项目中引入MyBatis即可,并且在引入依赖时,不但需要引入MyBatis的框架,还需要引入MySQL的驱动(根据使用的数据库来引入对应的数据库驱动),因为MyBatis的底层是基于JDBC的,需要操作数据库,所以说对应的数据库的驱动是必不可少的。

准备数据库表user、实体类User

准备数据库表user来进行查询,并将查询出来的结果封装成对应的User实体对象。因为MyBatis是优秀的持久层框架,持久层在三层架构中是要从数据库中查询数据并给Service层返回数据的,为了方便使用数据,所以说要对数据库中查询出来的数据进行封装,便于后续的操作。

建表:

sql 复制代码
create table user(
    id int unsigned primary key auto_increment comment 'ID,主键',
    username varchar(20) comment '用户名',
    password varchar(32) comment '密码',
    name varchar(10) comment '姓名',
    age tinyint unsigned comment '年龄'
) comment '用户表';

insert into user(id, username, password, name, age) values (1, 'daqiao', '123456', '大乔', 22),
                                                           (2, 'xiaoqiao', '123456', '小乔', 18),
                                                           (3, 'diaochan', '123456', '貂蝉', 24),
                                                           (4, 'lvbu', '123456', '吕布', 28),
                                                           (5, 'zhaoyun', '12345678', '赵云', 27);

创建对象:

typescript 复制代码
package com.wzb.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Integer id;
    private String username;
    private String password;
    private String name;
    private Integer age;

}

配置Mybatis

因为MyBatis操作的是数据库,而且是基于JDBC的,我们想要使用MyBatis也是需要配置数据库的连接信息的,但是和原生的JDBC有所不同,原生的JDBC是直接在源代码中进行配置的,但MyBatis中是在SpringBoot提供的application.properties文件中配置的连接信息:

完成准备工作之后,就可以开始编写MyBatis程序了。

编写MyBatis程序

编写MyBatis的持久层接口,在接口上添加注解@Mapper,代表通过注解的方式定义SQL语句,完成数据库操作。

MyBatis框架中的持久层接口按照规范都是叫......Mapper(也叫做Mapper接口),这是因为: MyBatis 最初受到iBatis的影响(MyBatis以前叫iBatis)。在iBatis中,就使用 "Mapper" 这个术语来表示数据访问对象(DAO),用于将数据库操作(如查询、插入、更新、删除)映射到 Java 方法。当MyBatis从iBatis发展而来时,延续了这个命名习惯。还有更重要的一点是: "Mapper" 这个词本身有 "映射器" 的意思。 在MyBatis的持久层接口中,它的主要作用就是将SQL语句和Java方法进行映射。

java 复制代码
package com.wzb.mapper;

import com.wzb.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface UserMapper {

    @Select("select * from user")
    public List<User> selectAll();
}

MyBatis可以将数据库表中的字段和实体类中的属性一一对应(字段和属性的名字必须相同),自动封装成User的实体对象,并且由于查询结果是多条数据,会封装成多个User对象,MyBatis还会将多个User对象封装成一个userList集合,所以说该方法是返回的一个User集合。

测试MyBatis

java 复制代码
package com.wzb;

import com.wzb.mapper.UserMapper;
import com.wzb.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
// 这是SpringBoot框架中的单元测试注解,当测试类的测试方法运行时,就会启动SpringBoot项目
// SpringBoot项目启动了,IOC容器就创建好了,若想测试IOC容器中的bean就可以直接注入了
class JavaWeb05MyBatisApplicationTests {

    private UserMapper userMapper;
    @Autowired
    public JavaWeb05MyBatisApplicationTests(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    @Test
    public void testSelectAll() {
        List<User> userList = userMapper.selectAll();
        for (User user : userList) {
            System.out.println(user);
        }
    }
}

在SpringBoot的测试类中编写代码,获取Mapper的返回结果并遍历输出,发现成功获得了user表中的所有数据,并且将这些数据封装成了userList的集合:

注意:测试类所在的包必须和项目的引导类(启动类)的包名相同(或者放在引导类所在的包的子包下)。

相关推荐
systemPro8 分钟前
2.6亿条设备数据,历史查询从超时到50ms,我做了什么
后端
要阿尔卑斯吗17 分钟前
提示词优化启示:为什么“按顺序输出“比“关键度评分“更有效
后端
她的男孩1 小时前
后台接口加密别只会 HTTPS,ForgeAdmin 的 RSA + SM4/AES 源码拆解
后端·面试·开源
极光技术熊1 小时前
Spring AI 从入门到精通:构建你的 AI 开发知识体系
后端·github
程序员cxuan1 小时前
一句话,让你用上 GPT-5.6
人工智能·后端·程序员
远航_1 小时前
OpenSpec 完整详细介绍
前端·后端
AskHarries1 小时前
不用公网 IP,把 Windows 和 Linux 服务器放进同一个局域网:Tailscale 组网实战
后端
神奇小汤圆1 小时前
Java 的1 亿次对象创建:JVM 开启 / 关闭逃逸分析,GC 性能差距巨大
后端
tangdou3690986551 小时前
AI真好玩系列-2分钟快速了解DeepAgents | Quick Guide to DeepAgents in 2 Minutes
前端·javascript·后端
神奇小汤圆2 小时前
面试官:MySQL 为什么要是使用 MVCC?原理是什么?
后端