Mybatis

入门

配置SQL提示

JDBC介绍

JDBC:(Java DataBase Connectivity),就是使用Java语言操作关系型数据库的一套API

本质
sun公司官方定义的一套操作所有关系型数据库的规范,即接口

各个数据库厂商去实现这套接口,提供数据库驱动jar包
我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类

数据库连接池

数据库连接池是个容器,负责分配、管理数据库连接(Connection)

它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个

释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏

优势
资源重用
提升系统响应速度
避免数据库连接遗漏

标准接口:DataSource
          官方(sun)提供的数据库连接池接口,由第三方组织实现此接口
           功能:获取连接 Connection getConnection() throws SQLException;

切换Druid数据库连接池

lombok

Lombok是一个实用的]ava类库,能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化java开发、提高效率

原理:在程序编译的时候根据上面的注解来决定为这个类生成什么样的方法

注意事项
Lombok会在编译时,自动生成对应的java代码。我们使用lombok时,还需要安装一个lombok的插件(idea自带)

基础操作

准备

1.准备数据库表 emp
2.创建一个新的springboot工程,选择引入对应的起步依赖(mybatis、mysql驱动、lombok)

3.application.properties中引入数据库连接信息

4.创建对应的实体类 Emp(实体类属性采用驼峰命名)

5.准备Mapper接口 EmpMapper

删除

Delete语句在执行时是有返回值的,只不过目前不需要所以设置成了void,如果有返回值,该返回值代表的含义是此次操作影响的记录数

如何拿到返回值:

注意事项
如果mapper接口方法形参只有一个普通类型的参数,#{..}里面的属性名可以随便写,如:#{id}、#{value}

”是参数占位符,这条SQL语句在运行的时候会使用下面这条参数(16)来替换掉上面的参数占位符,然后删除ID为16的这条员工信息

Updates为0代表的是当前操作的记录数为0,因为之前ID为16的数据已经删除掉了

#{id}会被?替代生成这样一个预编译的SQL,那么在执行的时候会把SQL语句以及下面的16一同发送给数据库,数据库在执行这样的SQL语句的时候会把16替换掉?,来删除ID为16的员工信息

预编译SQL

优势:
性能更高
更安全(防止SQL注入)

SQL注入

SQL注入是通过操作输入的数据来修改事先定义好的SQL语句,以达到执行代码对服务器进行攻击的方法

count值大于0代表用户名和密码都正确,为0代表其中一个错误

在预编译的SQL语句中,无论输入什么样的字符串,他会把整个字符串作为一个参数传递给password,这样就避免了SQL注入问题,安全性更高

如果选择的是Mybatis这样的框架,怎样选择预编译的SQL语句呢?

   只需要在定义SQL语句的时候使用#{...}这个占位符,那么最后生成的就是预编译的SQL语句,#{...}最终会被?代替

参数占位符

(性能较低,存在SQL注入的问题)

小结

新增

如果有多个参数,可以使用实体类将多个参数封装起来,在SQL语句当中就可以使用#{...}这样的参数占位符的形式来获取这个对象当中的属性。属性名都是使用驼峰命名的,不要写成字段名

主键返回

描述:在数据添加成功后,需要获取插入数据库数据的主键。如:添加套餐数据时,还需要维护套餐菜品关系表数据

小结

上图解析:

先定义一个接口方法,在上面加入@insert注解(insert代表执行的是一个插入操作),然后定义一个insert语句(如上图);由于插入时要传入的参数比较多,推荐使用一个实体对象进行封装,然后在SQL语句中使用#{...}来获取传入进来的一个一个的属性值,大括号内写入的是属性名而不是字段名;插入完成之后需要获取返回的主键就需要插入一个@Options注解,然后指定两个属性:useGeneratedKeys代表的是要获取返回来的主键;keyPropety代表的是返回来的主键往emp对象中的那个属性封装<指定id就是往id属性封装>

更新

查询

根据ID查询

后三个值为null的原因:

实体类属性名 和 数据库表查询返回的字段名一致,mybatis会自动封装

如果实体类属性名 和 数据库表查询返回的字段名不一致,不能自动封装

解决方案:

column是字段名,property是属性

数据封装

条件查询

%表示模糊查询,但是#{}不能出现在‘’内,因为#{}最终生成的是预编译的SQL,最终是要被替代的,而这个参数占位符是不能出现在''内的

修改:

如何解决上面问题?

此时生成的SQL语句就是预编译的SQL语句

参数名说明

XML映射文件

规范
XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)

XML映射文件的namespace属性为Mapper接口全限定名一致

XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致

动态SQL

随着用户的输入或外部条件的变化而变化的SQL语句,我们称为动态SQL

<if>

<if>:用于判断条件是否成立。使用test属性进行条件判断,如果条件为true,则拼接SQL

<where>标签的作用:

1.动态生成where关键字:会根据子标签动态的判断里面的条件。如果里面的条件都不成立,就不会生成where关键字;如果有一个条件成立,就会生成where关键字

2.自动去除掉条件前面多余的and或者or

<foreach>

主要用于批量操作当中,用于循环遍历

#{id}代表每一次遍历出来的元素

属性
collection:集合名称

item:集合遍历出来的元素/项
separator:每一次遍历使用的分隔符

open:遍历开始前拼接的片段
close:遍历结束后拼接的片段

<sql><include>

<sql>:定义可重用的 SQL片段
<include>:通过属性refid,指定包含的sql片段

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

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

相关文章

Deepseek的MLA技术原理介绍

DeepSeek的MLA(Multi-head Latent Attention)技术是一种创新的注意力机制,旨在优化Transformer模型的计算效率和内存使用,同时保持模型性能。以下是MLA技术的详细原理和特点: 1. 核心思想 MLA技术通过低秩联合压缩技术,将多个注意力头的键(Key)和值(Value)映射到一…

使用 SDKMAN! 在 Mac(包括 ARM 架构的 M1/M2 芯片)上安装 Java 8

文章目录 1. 安装 SDKMAN!2. 查找可用的 Java 8 版本3. 安装 Java 84. 验证安装5. 切换 Java 版本&#xff08;可选&#xff09;6. 解决 ARM 架构兼容性问题总结 可以使用 SDKMAN! 在 Mac&#xff08;包括 ARM 架构的 M1/M2 芯片&#xff09;上安装 Java 8。SDKMAN! 是一个强大…

HAL库外设宝典:基于CubeMX的STM32开发手册(持续更新)

目录 前言 GPIO&#xff08;通用输入输出引脚&#xff09; 推挽输出模式 浮空输入和上拉输入模式 GPIO其他模式以及内部电路原理 输出驱动器 输入驱动器 中断 外部中断&#xff08;EXTI&#xff09; 深入中断&#xff08;内部机制及原理&#xff09; 外部中断/事件控…

Windows 本地部署大模型 OpenWebUI+Ollama

安装Ollama Ollama官方网址&#xff1a;https://ollama.com 下载运行大模型 在Ollama官网中查看需要下载的大模型 https://ollama.com/library 复制图片中的链接 打开cmd&#xff0c;运行此命令&#xff08;此过程会时间会很久&#xff09; 下载Miniconda Miniconda作用是…

【大模型】Ubuntu下安装ollama,DeepSseek-R1:32b的本地部署和运行

1 ollama 的安装与设置 ollama官网链接&#xff1a;https://ollama.com/ 在左上角的【Models】中展示了ollama支持的模型在正中间的【Download】中课可以下载支持平台中的安装包。   其安装和模型路径配置操作流程如下&#xff1a; ollama的安装 这里选择命令安装curl -fsSL …

Ollama实现deepseek本地部署

Ollama实现deepseek本地部署 1.Ollama下载与安装2.ollama获取模型并部署2.1 使用ollama pull2.2 通过ollama create 创建自定义模型2.3 本地运行 3.使用streamlit实现网页版RAG部署3.1 加载相关包3.2 文档上传、加载与切块3.3 初始化向量存储3.4 初始化向量存储3.5 加载模型&am…

Django开发入门 – 0.Django基本介绍

Django开发入门 – 0.Django基本介绍 A Brief Introduction to django By JacksonML 1. Django简介 1) 什么是Django? 依据其官网的一段解释&#xff1a; Django is a high-level Python web framework that encourages rapid development and clean, pragmatic design. …

苍穹外卖-新增菜品(阿里云OSS文件上传mybatis主键返回批量保存口味表数据)

新增菜品 2.1 需求分析与设计 2.1.1 产品原型 后台系统中可以管理菜品信息&#xff0c;通过 新增功能来添加一个新的菜品&#xff0c;在添加菜品时需要选择当前菜品所属的菜品分类&#xff0c;并且需要上传菜品图片。 新增菜品原型&#xff1a; 当填写完表单信息, 点击&quo…

只需两步,使用ollama即可在本地部署DeepSeek等常见的AI大模型

只需两步&#xff0c;使用ollama即可在本地部署DeepSeek等常见的AI大模型 1.下载ollama,进入ollama官网即可将ollama下载到本地&#xff0c;之后按照提示安装ollama。 https://ollama.com/download/windows 2.安装大模型 进入ollama官网模型页面&#xff0c;找到所需的模型及版…

java基础语法中阶

一、面向对象 补充快捷键&#xff1a;alt鼠标左键&#xff0c;实现同时多行选中相同位置的内容。 1.类与对象 2.封装 3.构造方法 altinsert添加构造方法 4.内存分布 对象 类型 this关键字的使用 成员变量与局部变量 %s是占位符 ,ctrlaltv-补全对象 for循环的快速生成方…

DeepSeek 评价开源框架存在幻觉么?

DeepSeek 横空出世 2025 年&#xff0c;DeepSeek 以「价格屠夫」姿态将 API 成本降至新低&#xff08;输入 0.1 元/百万 tokens&#xff0c;输出 2 元/百万 tokens9&#xff09;霸榜了 AI 热搜。 AI 生成内容中最让人关注的就是回答内容是否存在 “幻觉”&#xff0c;我们不希望…

【大模型】硅基流动对接DeepSeek使用详解

目录 一、前言 二、硅基流动介绍 2.1 硅基流动平台介绍 2.1.1 平台是做什么的 2.2 主要特点与功能 2.2.1 适用场景 三、硅基流动快速使用 3.1 账户注册 3.2 token获取 3.2.1 获取token技巧 四、Cherry-Studio对接DeepSeek 4.1 获取 Cherry-Studio 4.2 Cherry-Stud…

DeepSeek之Win10系统部署教程

一、下载并安装Ollama 1、为什么要安装Ollama的呢&#xff1f; Ollama 是一个用于本地部署和管理大型语言模型&#xff08;LLM&#xff09;的工具&#xff0c;支持多种模型格式和框架。 它可以帮助用户轻松下载、配置和运行模型&#xff0c;同时提供统一的接口和依赖管理。 …

DeepSeek-r1和O1、O3mini谁更强?

DeepSeek-r1和O1、O3mini谁更强&#xff1f; 题目&#xff1a;编写一个 js 程序&#xff0c;显示一个球在旋转的六边形内弹跳。球应该受到重力和摩擦力的影响&#xff0c;并且必须逼真地从旋转的墙壁上弹起 DeepSeek-r1 <!DOCTYPE html> <html> <body> &l…

我用AI做数据分析之数据清洗

我用AI做数据分析之数据清洗 AI与数据分析的融合效果怎样&#xff1f; 这里描述自己在使用AI进行数据分析&#xff08;数据清洗&#xff09;过程中的几个小故事&#xff1a; 1. 变量名的翻译 有一个项目是某医生自己收集的数据&#xff0c;变量名使用的是中文&#xff0c;分…

如何搭建DeepSeek R1的训推环境?

本篇文章主要介绍基于Linux系统的Tesla A30 GPU的硬件环境搭建深度学习环境&#xff0c;为训练和推理DeepSeek R1 提供必要的环境&#xff0c;篇幅最后也会介绍到MIG的一些常见报错解决方案。 Anaconda安装 进入 https://www.anaconda.com/download/success 选择Linux安装包。…

模型压缩 --学习记录2

模型压缩 --学习记录2 如何找到更好的权衡方式(模型量化)方法一:寻找更好的 range方法二:寻找更好的 X-fp32(浮点数)方法三:寻找更好的 scale 和 zp方法四:寻找更好的 roundPTQ 后训练量化(离线量化)QAT 量化感知训练(在线量化)量化为什么会带来加速?三、模型稀疏技…

Unity3D仿星露谷物语开发28之切换场景

1、目标 Player可以在Scene1_Farm和Scene2_Field之间自动切换。通过Trigger实现该功能。同时创建一个预设体绑定该功能&#xff0c;这样可以把预设体放到任何场景中&#xff0c;通过配置即可实现Player在Scene之间的自由切换。 2、创建场景切换的工具对象 在Hierarchy中&…

Maven插件—flatten-maven-plugin:工程模块统一版本依赖

文章目录 前言一、认识flatten-maven-plugin插件二、如何使用flatten-maven-plugin插件&#xff1f;未使用flatten-maven-plugin插件之前的情况描述配置flatten-maven-plugin插件步骤1&#xff1a;最外层父模块安装插件&配置版本变量步骤2&#xff1a;各个自模块使用版本使…

并查集题目

并查集题目 聚合一块&#xff08;蓝桥&#xff09;合根植物&#xff08;蓝桥&#xff09;等式方程的可满足性省份数量 并查集&#xff08;Union-Find&#xff09;算法是一个专门针对「动态连通性」的算法。双方向的连通。 模板&#xff1a; class UF {// 连通分量个数private …