MyBatis快速入门

MyBatis快速入门

MyBatis简介

什么是MyBatis?

  • MyBatis 是一款优秀的持久层框架,用于简化JDBC开发
  • MyBatis本是Apache 的一个开源项目iBatis,2010年这个项目由apache softwarefoundation 迁移到了google code,并且改名为MyBatis 2013年11月迁移到Github
  • 官网: https://mybatis.org/mybatis-3/zh/index.html

持久层

  • 负责将数据到保存到数据库的那一层代码
  • JavaEE三层架构: 表现层、业务层、持久层

框架

  • 框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型
  • 在框架的基础之上构建软件编写更加高效、规范、通用、可扩展

JDBC缺点

在这里插入图片描述

MyBatis 简化

在这里插入图片描述

MyBatis 快速入门

查询user表中所有数据

  1. 创建user表,添加数据
  2. 创建模块,导入坐标
  3. 编写MyBatis 核心配置文件–>替换连接信息解决硬编码问题
  4. 编写SQL映射文件–>统一管理sql语句,解决硬编码问题
  5. 编码

​ 1.定义POJ0类

​ 2.加载核心配置文件,获取 SglSessionFactory 对象

​ 3.获取 SqlSession 对象,执行 SQL语句

​ 4.释放资源

数据库修改代码如下:

create database mybatis;
use mybatis;drop table if exists tb_user;create table tb_user(id int primary key auto_increment;username varchar(20),password varchar(20),gender char(1),addr varchar(30)
);INSERT INTO tb_user VALUES (1,'zhangsan','123','男','北京');
INSERT INTO tb_user VALUES (2,'李四','234','女','天津');
INSERT INTO tb_user VALUES (3,'王五','11','男','西安');

解决SQL映射文件的警告提示

  • 产生原因 : ldea和数据库没有建立连接,不识别表信息
  • 解决方式 : 在Idea中配置MySQL数据库连接

在这里插入图片描述

Mapper 代理开发

  • 目的

​ 1.解决原生方式中的硬编码

​ 2.简化后期执行SQL

在这里插入图片描述

MyBatis 核心配置文件详解

MyBatis核心配置文件的顶层结构如下:

在这里插入图片描述

配置文件完成增删改查

要完成的功能列表清单:
1.查询

  • ​ 所有数据

  • ​ 查看详情

  • ​ 条件查询

2.添加

3.修改

  • 修改全部字段

  • 修改动态字段

4.删除

  • 删除一个
  • 批量删除

数据库代码如下:

在这里插入图片描述

准备环境:

  1. 数据库表tb_brand
  2. 实体类Brand
  3. 测试用例
  4. 安装MyBatisX插件

MyBatisX插件

Mybatisx 是一款基于IDEA的快速开发插件,为效率而生。

主要功能:

​ XML和接口方法相互跳转

​ 根据接口方法生成statement

安装:

在这里插入图片描述

总结:

实体类属性名和数据库表列名不一致,不能自动封装数据

(1)起别名:在SQL语句中,对不一样的列名起别名,别名和实体类属性名一样1*可以定义片段,提升复用性

(2)resultMap : 定义完成不一致的属性名和列名的映射

参数占位符:

(1)#{} : 执行SQL时,会将#占位符替换为?,将来自动设置参数值

(2)${} : 拼SQL,会存在sQL注入问题

parameterType:

(1)用于设置参数类型,该参数可以省略

SQL语句中特殊字符处理:

(1)转义字符

(2)<![CDATA[内容]I>

SQL语句设置多个参数有几种方式?

(1)散装参数:需要使用@Param(“SQL中的参数占位符名称”)

(2)实体类封装参数:只需要保证SQL中的参数名和实体类属性名对应上,即可设置成功

(3)map集合:只需要保证SQL中的参数名和map集合的键的名称对应上,即可设置成功

动态SQL:

if:用于判断参数是否有值,使用test属性进行条件判断

​ 存在的问题:第一个条件不需要逻辑运算符

​ 解决方案:

​ (1)使用恒等式让所有条件格式都一样

​ (2)where>标签替换 where 关键字

MyBatis 参数传递

MyBatis 接口方法中可以接收各种各样的参数,MyBatis底层对于这些参数进行不同的封装处理方式

单个参数:

  1. POJO类型:
  2. Map集合:
  3. Collection:
  4. List:
  5. Array:
  6. 其他类型:

多个参数:

在这里插入图片描述

MyBatis提供了 ParamNameResolver 类来进行参数封装

注解完成增删改查

使用注解开发会比配置文件开发更加方便

在这里插入图片描述

  • 查询: @Select
  • 添加: @Insert
  • 修改: @Update
  • 删除: @Delete

提示:

​ 注解完成简单功能

​ 配置文件完成复杂功能

在这里插入图片描述

MyBatis提供了 ParamNameResolver 类来进行参数封装

注解完成增删改查

使用注解开发会比配置文件开发更加方便

在这里插入图片描述

  • 查询: @Select
  • 添加: @Insert
  • 修改: @Update
  • 删除: @Delete

提示:

​ 注解完成简单功能

​ 配置文件完成复杂功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/25420.shtml

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

相关文章

go 内置函数copy()

go内置函数copy go 内置函数copy()函数说明&#xff1a;代码例子1&#xff1a;代码例子2&#xff1a;代码例子3&#xff1a; go 内置函数copy() 函数说明&#xff1a; 当我们在Go语言中需要将一个切片的内容复制到另一个切片时&#xff0c;可以使用内置的copy()函数。copy()函…

如何推导椭圆的参数方程

椭圆基础知识 椭圆定义&#xff1a;椭圆上任意一点到两焦点的距离之和为2a 如何由椭圆定义推出椭圆标准方程呢&#xff1f; 如上图所示。 由定义可得已知条件为 ∣ M C 1 ∣ ∣ M C 2 ∣ 2 a 当 M 落在顶点 P 上时&#xff0c;可得另一已知条件 a 2 − b 2 c 2 当有了已…

在Python中应用RSA算法实现图像加密:基于Jupyter环境的详细步骤和示例代码

一、引言 在当今的数字化社会中,信息安全问题备受关注。随着数字图像在生活中的应用越来越广泛,图像的安全性和隐私性也成为人们关心的焦点。如何在网络上安全地传输和存储图像已经成为一项重要的挑战。RSA(Rivest-Shamir-Adleman)算法作为一种被广泛应用的公钥密码体系,…

2022ICPC南京站 B. Ropeway

也许更好的阅读体验 D e s c r i p t i o n \mathcal{Description} Description n 2 n2 n2个点编号 0 &#xff5e; n 1 0&#xff5e;n1 0&#xff5e;n1&#xff0c;每个点有点权&#xff0c;要求选若干个点使得总点权最小&#xff0c;其中编号为 0 0 0和 n 1 n1 n1的点必…

unity行为决策树实战详解

一、行为决策树的概念 行为决策树是一种用于游戏AI的决策模型&#xff0c;它将游戏AI的行为分解为一系列的决策节点&#xff0c;并通过节点之间的连接关系来描述游戏AI的行为逻辑。在行为决策树中&#xff0c;每个节点都代表一个行为或决策&#xff0c;例如移动、攻击、逃跑等…

SpringBoot3 整合Prometheus + Grafana

通过Prometheus Grafana对线上应用进行观测、监控、预警… 健康状况【组件状态、存活状态】Health运行指标【cpu、内存、垃圾回收、吞吐量、响应成功率…】Metrics… 1. SpringBoot Actuator 1. 基本使用 1. 场景引入 <dependency><groupId>org.springframew…

C#设计模式之---单例模式

单例模式&#xff08;Singleton&#xff09; 单例模式&#xff0c;属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例。 1&#xff09;普通单例模式 using System; namespace SingletonPattern {/// /// 单例模式(非线程安全)/// …

Docker Compose 使用方法

目录 前言 安装 Docker Compose Ubuntu 安装与更新 Red Hat 安装与更新 验证是否安装 Docker Compose 创建 docker-compose.yml 文件 创建一个MySQL 与 tomcat 示例 使用Docker Compose启动服务 前言 Docker Compose 是一个工具&#xff0c;旨在帮助定义和 共享多容器…

开源全文搜索引擎汇总

1、Apache Lucene Java 全文搜索框架 许可证:Apache-2.0 开发语言:Java 官网:https://lucene.apache.org/。Apache Lucene 是完全用 Java 编写的高性能、功能齐全的全文检索引擎架构,提供了完整的查询引擎和索引引擎、部分文本分析引擎。目的是为软件开发人员提供一个简单…

CADintosh X for mac CAD绘图软件2D CAD 程序 兼容 M1

CADintosh X for Mac是一个功能强大的2D CAD绘图程序&#xff0c;专为Mac用户设计。它由Lemke Software开发&#xff0c;提供了一套丰富的工具和功能&#xff0c;使用户能够轻松创建高质量的技术图纸&#xff0c;平面图和设计。 CADintosh X for Mac具有直观的用户界面&#x…

【架构】Java 系统架构演进的思考

文章目录 1 前言2 单体应用架构3 垂直应用架构4 分布式架构5 SOA 架构6 微服务云架构7 总结 1 前言 随着移动互联的发展&#xff0c;网站、H5、移动端的应用规模也不断扩大&#xff0c;不管是应用的数量还是质量都得到了指数级的提升。开发者的数量与日俱增&#xff0c;应用的…

OPENCV C++(六)canny边缘检测+仿射变换+透射变换

图像的缩放 resize(image, image, Size(round(image.cols * 0.5), round(image.rows * 0.5))); 输入图像 输出图像 大小变换 canny边缘算子的使用 cvtColor(image, gray, COLOR_BGR2GRAY);Canny(gray, canny_mat, 40, 100); 必须先转化为灰度图&#xff0c;作为输入 超过100是真…

利用docker run -v 命令实现使用宿主机中没有的命令

利用docker run -v 命令实现使用宿主机中没有的命令 使用容器中的jar命令解压jar包&#xff0c;并将解压内容输出到挂载在宿主机中的目录里 使用容器中的jar命令解压jar包&#xff0c;并将解压内容输出到挂载在宿主机中的目录里 docker run -it --name java -v /www/temp/java…

docker安装ES

拉取镜像文件 sudo docker pull elasticsearch:7.12.0 创建容器挂载目录 sudo mkdir -p /home/elasticsearch/config sudo mkdir -p /home/elasticsearch/data sudo mkdir -p /home/elasticsearch/plugins elasticsearch.yml http.host: 0.0.0.0 创建容器 sudo docker r…

.net core ConfigureServices和Configure

在.NET Core应用程序中&#xff0c;ConfigureServices和Configure方法在Startup类中起着重要的作用。 ConfigureServices方法用于进行依赖注入的配置。在该方法内&#xff0c;你可以注册应用程序所需要的各种服务、中间件和其他依赖项。它接收一个IServiceCollection参数&…

九、用 ChatGPT 提高算法和编程能力

目录 一、实验介绍 二、背景 三、LeetCode 刷题带来的问题 四、ChatGPT 如何帮助刷题 五、ChatGPT 推荐学习资源

SpringMVC -- REST风格开发,RESTful快速开发、RESTful注解开发

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaweb 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 REST 一、REST简介1.1REST风格简介 二、RESTful入门案例2.…

memcpy、memmove、memcmp、memset函数的作用与区别

一、memcpy与memmove 1、memcpy 作用&#xff1a;从source的位置开始向后复制num个字节的数据到destination的内存位置。 注意&#xff1a; memcpy() 函数在遇到 ’\0’ 的时候不会停下来(strcpy字符串拷贝函数在遇到’\0’的时候会停下来)&#xff1b;destination和source…

机器视觉工程师,代码键盘侠们你们真的懂键盘吗?

机器视觉-基本知识-中英通用术语 键盘是用于操作计算机设备运行的一种指令和数据输入装置,也指经过系统安排操作一台机器或设备的一组功能键(如打字机、电脑键盘)。键盘也是组成键盘乐器的一部分,也可以指使用键盘的乐器,如钢琴、数位钢琴或电子琴等,键盘有助于练习打字。…