> 文章列表 > MyBatis 之一(概念、创建项目、操作模式、交互流程)

MyBatis 之一(概念、创建项目、操作模式、交互流程)

MyBatis 之一(概念、创建项目、操作模式、交互流程)

1. MyBatis 是什么

  • MyBatis 是一款优秀的持久层框架

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

  • 它支持自定义 SQL、存储过程以及高级映射

  • MyBatis 去除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作

  • MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录

MyBatis 是更简单完成程序和数据库交互的工具

2. 为什么学 MyBatis

因为对于 JDBC 来说,整个操作的步骤非常繁琐,所以学习 MyBatis 就是为了帮助我们更方便。更快速的操作数据库

3. 怎么学 MyBatis

学习 MyBatis 两步走

  1. 搭建 MyBatis 开发环境

  1. 使用 MyBatis 模式和语法操作数据库

4. 创建 MyBatis 项目

MyBatis 是 ORM 框架,也就是对象关系映射,在面向对象编程语言中,将关系型数据库中的数据与对象建立起映射关系,从而自动的完成数据与对象的互相转换

  1. 将输入数据(传入对象)+ SQL ——》映射为 原生 SQL

  1. 将结果集 ——》映射为 返回对象(输出对象)

ORM 把数据库映射为对象:

  • 数据库表 ——》 映射为 类

  • 记录(行数据) ——》映射为 对象

  • 字段 ——》 映射为 对象的数据

一般 ORM 框架会将数据库模型的每张表都映射为一个 Java 类,也就是说使用 MyBatis 可以像操作对象一样来操作数据库中的表,可以实现对象和数据库表之间的转换

4.1 创建数据库和数据表

 -- 创建数据库dropdatabaseifexists mycnblog;createdatabase mycnblog DEFAULTCHARACTERSET utf8mb4;​-- 使⽤数据数据use mycnblog;​-- 创建表[⽤户表]droptableifexists userinfo;createtable userinfo(id intprimarykeyauto_increment,username varchar(100) notnull,passwordvarchar(32) notnull,photo varchar(500) default'',createtime datetimedefault now(),updatetime datetimedefault now(),`state`intdefault1) defaultcharset'utf8mb4';​-- 创建⽂章表droptableifexists articleinfo;createtable articleinfo(id intprimarykeyauto_increment,title varchar(100) notnull,content textnotnull,createtime datetimedefault now(),updatetime datetimedefault now(),uid intnotnull,rcount intnotnulldefault1,`state`intdefault1)defaultcharset'utf8mb4';​-- 创建视频表droptableifexists videoinfo;createtable videoinfo(vid intprimarykey,`title`varchar(250),`url`varchar(1000),createtime datetimedefault now(),updatetime datetimedefault now(),uid int)defaultcharset'utf8mb4';​-- 添加⼀个⽤户信息INSERTINTO`mycnblog`.`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);​-- ⽂章添加测试数据insertinto articleinfo(title,content,uid)values('Java','Java正⽂',1);-- 添加视频insertinto videoinfo(vid,title,url,uid) values(1,'java title','http://www.baidu.com',1);

4.2 添加 MyBatis 相关依赖

(1)新项目添加 MyBatis 依赖

MyBatis 之一(概念、创建项目、操作模式、交互流程)
MyBatis 之一(概念、创建项目、操作模式、交互流程)
MyBatis 之一(概念、创建项目、操作模式、交互流程)

(2)老项目添加 MyBatis 依赖

MyBatis 之一(概念、创建项目、操作模式、交互流程)
MyBatis 之一(概念、创建项目、操作模式、交互流程)

4.3 配置数据库的连接信息

MyBatis 之一(概念、创建项目、操作模式、交互流程)
 # 开发环境配置文件# 配置数据库连接spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncoding=utf8username: rootpassword: 111111driver-class-name: com.mysql.cj.jdbc.Driver

4.4 配置 MyBatis 的 XML 保存路径

MyBatis 之一(概念、创建项目、操作模式、交互流程)
 # 配置 mybatis.xml 保存路径mybatis:mapper-locations: classpath:mybatis/**Mapper.xml

5. 使用 MyBatis 的操作模式操作数据库

MyBatis 之一(概念、创建项目、操作模式、交互流程)

5.1 创建实体类 & 添加 mapper 接口

MyBatis 之一(概念、创建项目、操作模式、交互流程)

(1)创建 model 文件夹中 实体类 Userinfo

 /*** model 中的实体类* @Data中包含变量的 get set toString*/@DatapublicclassUserinfo {privateintid;privateStringusername;privateStringpassword;privateStringphoto;privateStringcreatetime;privateStringupdatetime;privateintstate;}

(2)创建 mapper 文件夹 中的 UserMapper 接口

 /*** 接口加 @Mapper 后,此时这个接口就是 MyBatis interface* 参数加 @Param 后,就相当于给这个参数改了新的名字*/@MapperpublicinterfaceUserMapper {​// 根据用户 id 查询用户publicUserinfogetUserById(@Param("id") Integerid);}

5.2 创建 XML 实现上面的接口

在resources 中创建 mybatis 文件夹,在 mybatis 中创建 UserMapper.xml

MyBatis 之一(概念、创建项目、操作模式、交互流程)
 <?xmlversion="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- namespace 是设置要实现的接口的具体包名 + 类名--><mappernamespace="com.example.mybatisdome1.mapper.UserMapper"><selectid="getUserById"resultType="com.example.mybatisdome1.model.Userinfo">select * from userinfo where id=${id}</select></mapper>

5.3 添加 Service

创建 service 文件夹,添加服务层 UserService 类

MyBatis 之一(概念、创建项目、操作模式、交互流程)
 @ServicepublicclassUserService {​@ResourceprivateUserMapperuserMapper;​publicUserinfogetUserById(Integerid) {returnuserMapper.getUserById(id);}}

5.4 添加 Controller

创建 controller 文件夹,添加控制层 UserController 类

MyBatis 之一(概念、创建项目、操作模式、交互流程)
 // @RestController = @Controller + @ResponseBody​@RestController@RequestMapping("/user")publicclassUserController {​@AutowiredprivateUserServiceuserService;​@RequestMapping("/getuserbyid")publicUserinfogetUserById(Integerid) {if(id==null) returnnull;returnuserService.getUserById(id);}}

运行程序

MyBatis 之一(概念、创建项目、操作模式、交互流程)

5.5 开启 MyBatis SQL 打印

在 application-dev.yml 中

 # 开启 MyBatis SQL 打印logging:level:com.example.mybatisdome1: debugmybatis:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
MyBatis 之一(概念、创建项目、操作模式、交互流程)

6. MyBatis 框架交互流程

MyBatis 之一(概念、创建项目、操作模式、交互流程)
  1. 前端程序通过 Ajax 访问,Ajax 的信息到达控制器 Controller 这一层

  1. 控制器就会进行参数的校验,校验参数没问题之后,然后接下来就是将数据发送给服务层

  1. 服务层只是组织者(相当于代理,就是管理调用几个接口,进行接口的排序),接下来就是调用 Mapper

  1. 调用两个 Mapper(InterFace 进行声明,XML 进行实现),最终在实现时因为加了 @Mapper,所以 MyBatis 就会将 InterFace 和 xml 进行关联,最终会将方法中具体的执行 SQL,生成为原始的 SQL 语句,并且 MyBatis 会调用 JDBC

  1. MyBatis 是基于 JDBC 的,MyBatis 在执行时会生成 JDBC 的代码和相应 SQL,然后再通过 JDBC 的方式,调用数据库,最终将结果返回给服务层,服务层再将结果返回给控制层,最终再由控制层将结果返回给前端