当前位置: 首页 > article >正文

优秀持久层框架——MyBatis

何为MyBatis

在Java程序中如果想要操作数据库,可以使用官方提供的API——JDBC,但从开发效率而言,直接使用原生的JDBC进行开发,代码冗杂、开发效率低,所以说在开发中使用的是一些基于原生JDBC搭建的高级框架。而MyBatis就是一个优秀的持久层(三层架构中的DAO)框架,其主要用于简化JDBC的开发;MyBatis的底层实现就是JDBC,但是对其进行了高度的封装,从而能够更好的进行数据库操作。

使用MyBatis

准备工作

因为现在大部分的项目都是基于SpringBoot框架开发的,所以说本文基于SpringBoot项目来讲解MyBatis

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

想要使用MyBatis框架,那么肯定需要在创建SpringBoot工程的时候引入MyBatis的依赖,而且不但需要引入MyBatis框架的依赖,还需要引入MySQL的驱动根据使用的数据库来引入对应的数据库驱动),这是因为因为MyBatis的底层是基于JDBC的实现的而JDBC真正执行的代码是各个厂商是各个厂商驱动jar包中的实现类。所以说使用JDBC或者基于JDBC实现的框架操作数据库时,对应的数据库的驱动是必不可少的。

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

准备数据库表user来进行查询,并将查询出来的结果封装成对应的User实体对象。因为MyBatis是一个持久层框架,持久层在三层架构中是数据访问层,是要从数据库中查询数据并给Service层返回数据的,为了方便返回数据,也为了Service层使用这些数据,持久层会对从数据库中查询出来的数据进行封装,封装成一个Java中的实体类,便于后续的操作。

建表:

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);

创建对象:

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方法进行映射

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对象);并且,若查询结果是多条数据,将会封装成多个实体对象,并将多个对象封装为一个集合(此处是封装为一个UserList集合)所以说该方法是返回的一个User集合

测试MyBatis

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的测试类中编写代码,获取UserMapper的返回结果并遍历输出,发现成功获得了user表中的所有数据,并且将这些数据封装成了userList的集合:

注意:在SpringBoot项目中,测试类所在的包必须和项目的引导类(启动类)的包名相同(或者放在引导类所在的包的子包下),而自带的test包中的测试类就是按照这个规则创建的,可以直接在其中写测试方法


http://www.kler.cn/a/503140.html

相关文章:

  • 通过外部化 `config.properties` 文件更换数据库配置
  • E10.【C语言】练习:编写一个猜数字游戏
  • 银河麒麟服务器操作系统桌面任务栏网络图标消失问题
  • python实现自动登录12306抢票 -- selenium
  • 编程题-二分查找
  • webpack打包要义
  • 两分钟解决 :![rejected] master -> master (fetch first) , 无法正常push到远端库
  • Chromium 中的 WebUI
  • Springboot内置Apache Tomcat 安全漏洞(CVE-2024-50379)
  • vue2修改表单只提交被修改的数据的字段传给后端接口
  • JavaScript:简介
  • 春秋云镜——initial
  • 二 RK3568 固件中打开 ADB 调试
  • qt 汉字输出 中文输出 显示乱码 qDebug() 乱码 解决
  • Spring Boot项目中增加MQTT对接
  • DELTA并联机械手视觉方案荣获2024年度机器人应用典型案例奖
  • 在 Linux 下Ubuntu创建同权限用户
  • JavaScript系列(24)--内存管理机制详解
  • 2025年第三届“华数杯”国际赛A题解题思路与代码(Python版)
  • 计算机网络(四)——网络层
  • 利用 Tree Shaking 提升 React.js 性能
  • 江科大STM32入门——读写备份寄存器(BKP)实时时钟(RTC)笔记整理
  • 【RAG检索增强生成】MaxKB:构建企业级知识库问答系统(Ollama+Qwen2)
  • Vue.js组件开发-实现图片裁剪
  • Scala语言的软件开发工具
  • Redis动态热点数据缓存策略设计