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

2023.11.25 关于 MyBatis 的配置与使用

目录

引言

MyBatis 介绍

掌握两个点

在框架中的定位

创建数据库

配置 MyBatis 

引入依赖

配置文件

创建实体类 

构建 Mapper 层代码实现

添加 mapper 接口

添加 UserMapper.xml 

实现 Service 层 

实现 Controller 层

最终测验 


阅读下面文章之前建议了解并创建一个 Spring Boot 项目

Spring Boot 项目的创建与使用


引言

  • 所谓的 SSM 项目
  • 现在其实指的就是 Spring Boot + Spring MVC + MyBatis 

MyBatis 介绍

  • MyBatis 是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射
  • MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作
  • 简单来说 Mybatis 是更简单完成程序和数据库交互的工具,也就是更简单的操作和读取数据库工具

掌握两个点

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

在框架中的定位

  • 框架交互流程图

创建数据库

  • 既然我们要讲解 MyBatis 的配置与使用,数据库的创建是必不可少的
  • 此处我们在本机的 MySQL 数据库中创建一个 message 数据库
  • 且在 message 数据库中再创建一个 user 表,用来存放用户信息
drop database if exists message;
create database message;
use message;

create table user(
    id int primary key auto_increment,
    name varchar(20),
    age int
);

insert into user values(null,"xiaolin",18);
insert into user values(null,"maolin",20);
insert into user values(null,"xiaomei",19);

配置 MyBatis 

引入依赖

  • 我们在 pom.xml 中引入相关依赖
<dependency>
	<groupId>com.mysql</groupId>
	<artifactId>mysql-connector-j</artifactId>
	<scope>runtime</scope>
	</dependency>

<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>2.3.0</version>
</dependency>

配置文件

  • 此处配置均在配置文件 application.properties 下添加
# 配置数据库连接
spring.datasource.url=jdbc:mysql://localhost:3306/message?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
# 此处填你自己设置的数据库密码
spring.datasource.password=1111
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  • 配置连接字符串
# 配置 mybatis xml 的文件路径
mybatis.mapper-locations=classpath:mybatis/*Mapper.xml
  • 配置 MyBatis 中的 XML 路径
  • 我们需在 resources/mapper 创建所有表的 xml 文件

注意:

  • 当我们仅引入依赖,未配置上述文件
  • 此时启动我们的 SSM 项目,一定会发生报错,即启动失败

  • 数据库连接配置文件:该文件包含了连接数据库所需的信息,如数据库的 URL、用户名、密码等,如果未配置该文件,那么应用程序将无法连接到数据库,从而无法进行数据的读写操作

  • mybatis xml 文件路径:该文件定义了 mybatis 的 SQL 映射语句和结果映射。如果未配置该文件,则 mybatis 将无法找到 SQL 映射语句,从而无法执行数据库操作

创建实体类 

  • 此处我们创建一个 User 实体类为了对应上我们在 message 数据库中创建的 user 表
  • 从而建立好一个映射关系
  • 两点要求:
  • 具有 getter 和 setter 方法
  • 属性名必须与 sql 字段名一致
import lombok.Data;

@Data
public class User {
    private int id;
    private String name;
    private int age;
}
  • 此处我们使用 LomBok 来通过注解给 User 实体类添加上 getter 和 setter 方法

构建 Mapper 层代码实现

  • MyBatis 通过两个部分建立后端和数据库的联系
  • 接口(该接口中的每个方法 均映射了 XML 文件中的具体 SQL 语句)
  • XML 实现接口(用来写具体的 SQL 语句)


添加 mapper 接口

  • 此处我们创建一个 UserMapper 接口
  • 接口下的每个方法就对应 对数据库 user 表的一个操作
  • 这里实现的是根据 id 查询用户信息
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

//添加 @Mapper 注解 代表该接口会伴随着 项目的启动而注入到容器中
@Mapper
public interface UserMapper {
//    根据 id 查询用户信息
    User getUserById(@Param("user_id") Integer id);
}

注意:

  • 此处的 @Param 注解用于给方法的参数重命名

添加 UserMapper.xml 

  • 该 xml 文件需与上述的 mapper 接口相对应

添加 *Mapper.xml  的固定格式

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybati
s.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">

</mapper>
  • 因为此处的 UserMapper.xml 需与上文的 UserMapper 接口相对应
  • 即 namespace 需填 UserMapper 接口的文件路径

  • 又因为此处我们需要写的是 根据 id 查询用户信息,即应该使用 select 语句
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybati
s.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">

    <select id="getUserById" resultType="com.example.demo.entity.User">
        select * from user where id = ${user_id}
    </select>
    
</mapper>
  • 该新添加的 select 标签具有三处对应关系

实现 Service 层 

  • 在 MyBatis 中,服务层(Service 层)的主要作用是封装业务逻辑
  • 实现业务流程的复杂性,提高代码的可重用性和可维护性
  • 简单来说 服务层中的方法一般用来编排 mapper 层的各个接口,从而实现所需的业务逻辑
  • Controller 会调用 Service 层的方法,而不是直接调用 Mapper 层的方法

实例理解 :

  • 有一个业务逻辑需要在 user 表中连续插入多条数据,则可在 service 层通过 for 循环的方式调用 mapper 层中对应的方法来实现该逻辑

  • 此处我们的业务逻辑很简单
  • 仅实现根据 id 查询用户信息即可

  • UserService 类中具体代码实现
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

//添加 @Service 注解 代表该类会伴随着 项目的启动而注入到容器中
@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public User getUserById(Integer id) {
        return userMapper.getUserById(id);
    }
}

实现 Controller 层

  •  控制器层用于直接与客户端进行交互
  • 接收客户端 HTTP 请求,并实现相应的业务逻辑

  • 此处客户端的 HTTP 请求正是想根据 id 查询用户信息

  • UserController 类中具体代码实现
import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@ResponseBody
@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/get-user-by-id")
    public User getUserById(Integer id) {
        if(id == null){
            return null;
        }
        return userService.getUserById(id);
    }
}

最终测验 

  • 我们在浏览器的 URL 框中输入与 UserController 所对应的 URL 地址,从而实现调用到 getUserById 方法

  • 如上图所示,我们成功查询到了数据库中 id = 1 的用户信息

  • 看完上述文章后,重新理解下图

  • 这便是上述文章所写的整个交互过程


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

相关文章:

  • C语言------数组从入门到精通
  • Java中的泛型
  • 编译dpdk19.08.2中example时一系列报错解决
  • 渗透测试之WAF规则触发绕过规则之规则库绕过方式
  • 深入理解Pytest中的Setup和Teardown
  • vue和reacts数据响应式的差异
  • RAID磁盘阵列
  • 二十三种设计模式全面解析-深入探讨状态模式的高级应用技术:释放对象行为的无限可能
  • 深入学习pytorch笔记
  • 大数据-之LibrA数据库系统告警处理(ALM-37002 MPPDB实例连接数超限)
  • 公司人事管理系统
  • 企业海外分部,如何实现安全稳定的跨境网络互连?
  • 概念解析 | 玻尔兹曼机
  • 智能生活:人工智能如何改变我们的日常
  • 【QML】Qt设置USB免驱相机曝光时间(Linux系统)UVC
  • IDEA中的Postman?完全免费!
  • CDN技术解析:加速网络传输的魔法
  • 鸿蒙HarmonyOS手把手带大家创建第一个项目 并做一个基本的组件结构讲解
  • Vatee万腾独特科技力量的前沿探索:Vatee的数字化奇点
  • Android:Google三方库之集成应用内评价详细步骤
  • 下一代图片压缩格式 AVIF
  • NFT Insider115:The Sandbox开设元宇宙Diorama快闪店,​YGG Web3 游戏峰会已开幕
  • The TypeScript Compiler - Version 5.2.2,tsc -w无效怎么办?
  • 「Verilog学习笔记」数据串转并电路
  • 目录树自动生成器 golang+fyne
  • 力扣-55.跳跃游戏