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

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 依赖

(2)老项目添加 MyBatis 依赖

4.3 配置数据库的连接信息

 # 开发环境配置文件# 配置数据库连接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.xml 保存路径mybatis:mapper-locations: classpath:mybatis/**Mapper.xml

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

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

(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

 <?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 类

 @ServicepublicclassUserService {​@ResourceprivateUserMapperuserMapper;​publicUserinfogetUserById(Integerid) {returnuserMapper.getUserById(id);}}

5.4 添加 Controller

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

 // @RestController = @Controller + @ResponseBody​@RestController@RequestMapping("/user")publicclassUserController {​@AutowiredprivateUserServiceuserService;​@RequestMapping("/getuserbyid")publicUserinfogetUserById(Integerid) {if(id==null) returnnull;returnuserService.getUserById(id);}}

运行程序

5.5 开启 MyBatis SQL 打印

在 application-dev.yml 中

 # 开启 MyBatis SQL 打印logging:level:com.example.mybatisdome1: debugmybatis:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

6. 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 的方式,调用数据库,最终将结果返回给服务层,服务层再将结果返回给控制层,最终再由控制层将结果返回给前端

http://www.lryc.cn/news/5900.html

相关文章:

  • 学习笔记:文件
  • 高考结束了以后应该做的事情(个人经历的总结)
  • 蓝桥杯:k倍区间
  • 【思维模型】概率思维的价值:找到你的人生算法!打开你的人生格局!实现认知跃迁!
  • API文档自动生成工具
  • 7、MyBatis框架——MyBatis对一对一关系的处理、分步查询、MyBatis对一对多关系的处理
  • 电商数据监测——中国白酒行业数据浅析
  • excel数据技巧:透视表快速统计年终业绩排名
  • TensorRT的Python接口解析
  • 【信管11.5】合同、采购、招投标相关法规
  • 使用 CSS 变量更改多个元素样式
  • 面试题(二十五)设计模式
  • 使用红黑树模拟实现map和set
  • 【django项目开发】用户登录后缓存权限到redis中(十)
  • 算法总结c++
  • Python 之 NumPy 切片索引和广播机制
  • Redis【包括Redis 的安装+本地远程连接】
  • 深度学习训练营_第P3周_天气识别
  • “华为杯”研究生数学建模竞赛2006年-【华为杯】C题:维修线性流量阀时的内筒设计问题(附获奖论文及matlab代码)
  • 数据结构:带环单链表基础OJ练习笔记(leetcode142. 环形链表 II)(leetcode三题大串烧)
  • 数模美赛如何找数据 | 2023年美赛数学建模必备数据库
  • SSTI漏洞原理及渗透测试
  • 【算法基础】高精度除法
  • optimizer.zero_grad(), loss.backward(), optimizer.step()的理解及使用
  • 融资、量产和一栈式布局,这家Tier 1如此备战高阶智驾决赛圈
  • centos7.8安装oralce11g
  • 【蓝桥杯集训·每日一题】AcWing 3956. 截断数组
  • 万丈高楼平地起:Linux常用命令
  • Linux(Linux的连接使用)
  • Unity中画2D图表(2)——用XChart包绘制散点分布图 + 一条直线方程