当前位置:   article > 正文

2023.11.25 关于 MyBatis 的配置与使用_mybatis与数据库交互图 csdn

mybatis与数据库交互图 csdn

目录

引言

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 表,用来存放用户信息
  1. drop database if exists message;
  2. create database message;
  3. use message;
  4. create table user(
  5. id int primary key auto_increment,
  6. name varchar(20),
  7. age int
  8. );
  9. insert into user values(null,"xiaolin",18);
  10. insert into user values(null,"maolin",20);
  11. insert into user values(null,"xiaomei",19);

配置 MyBatis 

引入依赖

  • 我们在 pom.xml 中引入相关依赖
  1. <dependency>
  2. <groupId>com.mysql</groupId>
  3. <artifactId>mysql-connector-j</artifactId>
  4. <scope>runtime</scope>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.mybatis.spring.boot</groupId>
  8. <artifactId>mybatis-spring-boot-starter</artifactId>
  9. <version>2.3.0</version>
  10. </dependency>

配置文件

  • 此处配置均在配置文件 application.properties 下添加
  1. # 配置数据库连接
  2. spring.datasource.url=jdbc:mysql://localhost:3306/message?characterEncoding=utf8&useSSL=false
  3. spring.datasource.username=root
  4. # 此处填你自己设置的数据库密码
  5. spring.datasource.password=1111
  6. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  • 配置连接字符串
  1. # 配置 mybatis xml 的文件路径
  2. 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 字段名一致
  1. import lombok.Data;
  2. @Data
  3. public class User {
  4. private int id;
  5. private String name;
  6. private int age;
  7. }
  • 此处我们使用 LomBok 来通过注解给 User 实体类添加上 getter 和 setter 方法

构建 Mapper 层代码实现

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


添加 mapper 接口

  • 此处我们创建一个 UserMapper 接口
  • 接口下的每个方法就对应 对数据库 user 表的一个操作
  • 这里实现的是根据 id 查询用户信息
  1. import com.example.demo.entity.User;
  2. import org.apache.ibatis.annotations.Mapper;
  3. import org.apache.ibatis.annotations.Param;
  4. //添加 @Mapper 注解 代表该接口会伴随着 项目的启动而注入到容器中
  5. @Mapper
  6. public interface UserMapper {
  7. // 根据 id 查询用户信息
  8. User getUserById(@Param("user_id") Integer id);
  9. }

注意:

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

添加 UserMapper.xml 

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

添加 *Mapper.xml  的固定格式

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybati
  3. s.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace="com.example.demo.mapper.UserMapper">
  5. </mapper>
  • 因为此处的 UserMapper.xml 需与上文的 UserMapper 接口相对应
  • 即 namespace 需填 UserMapper 接口的文件路径

  • 又因为此处我们需要写的是 根据 id 查询用户信息,即应该使用 select 语句
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybati
  3. s.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace="com.example.demo.mapper.UserMapper">
  5. <select id="getUserById" resultType="com.example.demo.entity.User">
  6. select * from user where id = ${user_id}
  7. </select>
  8. </mapper>
  • 该新添加的 select 标签具有三处对应关系

实现 Service 层 

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

实例理解 :

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

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

  • UserService 类中具体代码实现
  1. import com.example.demo.entity.User;
  2. import com.example.demo.mapper.UserMapper;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Service;
  5. //添加 @Service 注解 代表该类会伴随着 项目的启动而注入到容器中
  6. @Service
  7. public class UserService {
  8. @Autowired
  9. private UserMapper userMapper;
  10. public User getUserById(Integer id) {
  11. return userMapper.getUserById(id);
  12. }
  13. }

实现 Controller 层

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

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

  • UserController 类中具体代码实现
  1. import com.example.demo.entity.User;
  2. import com.example.demo.service.UserService;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Controller;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.ResponseBody;
  7. @ResponseBody
  8. @Controller
  9. @RequestMapping("/user")
  10. public class UserController {
  11. @Autowired
  12. private UserService userService;
  13. @RequestMapping("/get-user-by-id")
  14. public User getUserById(Integer id) {
  15. if(id == null){
  16. return null;
  17. }
  18. return userService.getUserById(id);
  19. }
  20. }

最终测验 

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

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

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

  • 这便是上述文章所写的整个交互过程
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/534182
推荐阅读
相关标签
  

闽ICP备14008679号