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

news2024/11/30 4:55:07

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://ww
 w.baidu.com',1);

4.2 添加 MyBatis 相关依赖

(1)新项目添加 MyBatis 依赖

(2)老项目添加 MyBatis 依赖

4.3 配置数据库的连接信息

 # 开发环境配置文件
 # 配置数据库连接
 spring:
   datasource:
     url: jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncoding=utf8
     username: root
     password: 111111
     driver-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
 */
 @Data
 publicclassUserinfo {
     privateintid;
     privateStringusername;
     privateStringpassword;
     privateStringphoto;
     privateStringcreatetime;
     privateStringupdatetime;
     privateintstate;
 }

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

 /**
 * 接口加 @Mapper 后,此时这个接口就是 MyBatis interface
 * 参数加 @Param 后,就相当于给这个参数改了新的名字
 */
 @Mapper
 publicinterfaceUserMapper {
 ​
     // 根据用户 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 类

 @Service
 publicclassUserService {
 ​
     @Resource
     privateUserMapperuserMapper;
 ​
     publicUserinfogetUserById(Integerid) {
         returnuserMapper.getUserById(id);
     }
 }

5.4 添加 Controller

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

 // @RestController = @Controller + @ResponseBody
 ​
 @RestController
 @RequestMapping("/user")
 publicclassUserController {
 ​
     @Autowired
     privateUserServiceuserService;
 ​
     @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: debug
 mybatis:
   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.coloradmin.cn/o/344523.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringAOP笔记【JavaEE】

SpringAOP 一、AOP理解 AOP是一种思想&#xff0c;SpringAOP是一个框架&#xff0c;提供了一种对AOP思想的实现&#xff0c;他们的关系就像MVC和SpringMVC、IOC与DI类似。 AOP为Aspect Oriented Programming的缩写&#xff0c;意为&#xff1a;面向切面编程&#xff0c;通过预…

CHAPTER 1 Zabbix介绍及安装

Zabbix介绍及安装1.1 Zabbix监控1 为什么要监控1.1 网站可用性2 监控什么东西2.1 监控范畴3 怎么来监控3.1 远程管理服务器3.2 监控硬件3.3 查看cpu相关3.4 内存3.5 磁盘3.6 监控网络4 监控工具总览5 zabbix介绍5.1 zabbix的组成5.2 zabbix监控范畴1.2 安装zabbix1 环境检查2 安…

磁疗为什么“没效果”?原来真相是这样!

很多人磁疗之后&#xff0c; 总爱迫不及待问一个问题&#xff1a; “这个多长时间见效啊&#xff1f;” …… 还有些人几天没有效果&#xff0c; 就果断下结论&#xff1a; “这东西没用&#xff01;” …… 有不少人错误地把磁疗等同于“药品”一样看待&#xff0c;总觉得…

RPA+保险后台部门擦出不一样“火花” | RPA案例

在保险行业中&#xff0c;后台业务线主要是为前台和中台等提供支持&#xff0c;提供公司整体运营服务&#xff0c;包括财务、信息、人力、综合办等。相对于中前台部门&#xff0c;后台部门离核心价值链更远一些&#xff0c;更偏支持部门&#xff0c;其中某些岗位与业务相关度强…

金三银四面试必看,复盘字节测试开发面试:一次测试负责人岗位面试总结

最近面试了某企业的测试负责人岗位&#xff0c;历经四面&#xff0c;收获蛮多的。 这篇文章&#xff0c;我想聊聊这次面试过程中的一些经历&#xff0c;以及些许经验和教训。 岗位要求 岗位名称&#xff1a;测试负责人 岗位要求&#xff1a;1、扎实的技术以及丰富的技术项目…

【半监督医学图像分割 2021 CVPR】CVRL 论文翻译

文章目录【半监督医学图像分割 2021 CVPR】CVRL 论文翻译摘要1. 介绍1.1 总览1.2 无监督对比学习2. 实验3. 总结【半监督医学图像分割 2021 CVPR】CVRL 论文翻译 论文题目&#xff1a;Momentum Contrastive Voxel-wise Representation Learning for Semi-supervised Volumetric…

Linux中systemctl 服务管理

1、概述CentOS 7使用Systemd管理守护进程。centos7采用 systemd管理&#xff0c;服务独立的运行在内存中&#xff0c;服务响应速度快&#xff0c;但占用更多内存。独立服务的服务启动脚本都在目录 /usr/lib/systemd/system里。Systend的新特性&#xff1a;系统引导时实现服务的…

手写JavaScript常见5种设计模式

想分享的几种设计模式 目前模式&#xff1a;工厂模式&#xff0c;单例模式&#xff0c;适配器模式&#xff0c;装饰者模式&#xff0c;建造者模式 建造者模式 简介&#xff1a;建造者模式&#xff08;builder pattern&#xff09;比较简单&#xff0c;它属于创建型模式的一种…

QT入门Input Widgets之QScrollBar

目录 一、界面布局功能 1、界面位置介绍 2、控件界面基本属性 2.1 horizontalScrollBar界面属性 3、样式设置 此文为作者原创&#xff0c;创作不易&#xff0c;转载请标明出处&#xff01; 一、界面布局功能 1、界面位置介绍 QScrollBar主要分为两种&#xff0c;一种垂直…

C语言(字符串输入)

目录 一.gets和puts组合 二.fgets()和fputs() 三.fgets()函数返回 四.fgets读取满问题 五.修改fgets函数,自动用\0替换\n 一.gets和puts组合 Gets()读取整行输入&#xff0c;知道遇到换行符&#xff0c;然后丢弃换行符&#xff0c;存储其余字符&#xff0c;并在这些字符的…

学习笔记:文件

因为有的数据&#xff0c;数据量极大。或者是你想把编译输出的内容存储起来&#xff0c;就可以使用文件 读文件中内容具体操作 来自C语言详解 FILE文件操作 - 知乎 (zhihu.com) 写入文件具体操作 同样来自 C语言详解 FILE文件操作 - 知乎 (zhihu.com) 当文件关闭时&#xff0c…

sql手工注入dvwa靶场

sql手工注入dvwa靶场 记录一下自己重新开始学习web安全之路④。 一、找交互点&#xff08;url、搜索框、登录框&#xff09; 在dvwa靶场中&#xff0c;发现有url&#xff0c;有搜索框。 二、找注入点&#xff08;通过 ’ 号来判断&#xff09; 思考一&#xff1a;为什么能通…

响应式圣经:10W字,实现Spring响应式编程自由

前言 全链路异步化改造的基础是响应式编程 随着业务的发展&#xff0c;微服务应用的流量越来越大&#xff0c;使用到的资源也越来越多。 在微服务架构下&#xff0c;大量的应用都是 SpringCloud 分布式架构&#xff0c;这种架构总体上是全链路同步模式。 全链路同步模式不仅…

膳食锌缺乏或过量对人体肠道菌群及健康的影响

谷禾健康 锌与肠道微生物 锌(Zn)是人体必需的微量元素&#xff0c;是人体中第二丰富的矿物质。锌在细胞和器官功能中起着关键的催化、调节和结构作用。 ★ 膳食锌缺乏或过量均不健康 锌缺乏与发育不良、免疫功能低下、味觉丧失、不良妊娠结局、脱发、皮肤损伤和神经行为异常有关…

数据结构 | 树 | 二叉树

&#x1f525;Go for it!&#x1f525; &#x1f4dd;个人主页&#xff1a;按键难防 &#x1f4eb; 如果文章知识点有错误的地方&#xff0c;请指正&#xff01;和大家一起学习&#xff0c;一起进步&#x1f440; &#x1f4d6;系列专栏&#xff1a;数据结构与算法 &#x1f52…

windows本地开发Spark[不开虚拟机]

1. windows本地安装hadoop hadoop 官网下载 hadoop2.9.1版本 1.1 解压缩至C:\XX\XX\hadoop-2.9.1 1.2 下载动态链接库和工具库 1.3 将文件winutils.exe放在目录C:\XX\XX\hadoop-2.9.1\bin下 1.4 将文件hadoop.dll放在目录C:\XX\XX\hadoop-2.9.1\bin下 1.5 将文件hadoop.dl…

Redis学习【5】之集合的底层实现原理

文章目录一 集合的底层实现原理1.1 两种实现的选择1.2 zipList【存在于Redis7.0之前的版本】1.3 listPack【Redis7.0中zipList的改进版】1.4 skipList1.4.1 skipList 原理1.4.2 skipList存在的问题与优化1.5 quickList1.5.1 quitList检索操作1.5.2 quitList插入操作1.5.3 quitL…

知识图谱概述

知识图谱 知识图谱本质上是一种大规模的语义网络&#xff0c;富含实体、概念及其之间的各种语义关系。 作为一种语义网络是大数据时代知识表示的重要方式之一。 作为一种技术体系&#xff0c;是大数据时代知识工程代表性进展。 领域知识图谱 领 域&#xff08;行业&#xf…

一篇文章带你熟练使用Ansible中的playbook

目录 一、Playbook的功能 二、YAML 1、简介 2、特点 3、语法简介 4、YAML 列表 5、YAML的字典 三、playbook执行命令 四、 Playbook的核心组件 五、vim 设定技巧 练习 一、Playbook的功能 playbook 是由一个或多个play组成的列表 Playboot 文件使用YAML来写的 二、…

Mysql5.7安装【Windows版】

文章目录一、下载二、添加到环境变量三、添加配置文件my.ini四、安装Mysql 修改密码一、下载 下载地址 滑倒最下面有一个MySQL Community Server 选择要下载的版本 二、添加到环境变量 下载好了之后开始解压 把bin目录添加到环境变量 可以点击进入bin目录&#xff0c;直接复…