Mybatis基于注解与XML开发
文章目录
- 1 关于SpringBoot
- 2 关于MyBatis
- 2.1 MyBatis概述
- 2.2 MyBatis核心思想
- 2.3 MyBatis使用流程
- 3 MyBatis配置SQL方式
- 3.1 基于注解方式
- 3.1.1 说明
- 3.1.2 使用流程
- 3.1.3 常用注解
- 3.2 基于XML方式
- 3.2.1 相比注解优势
- 3.2.2 使用流程
- 3.2.3 常用标签
1 关于SpringBoot
- SpringBoot是一个基于Spring框架的快速开发的脚手架,它能够帮助我们开发者快速搭建项目环境,并提供了一些建议的配置方式,降低了开发者程序的开发和部署难度。
2 关于MyBatis
2.1 MyBatis概述
- MyBatis是Java的持久化框架,目的是为了使操作数据库更加方便、灵活、高效。可以通过Java注解和XML文件来映射Java对象和SQL语句,提供了非常灵活的SQL编写方式和动态SQL语句的创建方式,可以与Spring框架结合使用。
2.2 MyBatis核心思想
- 将Java对象和数据库操作分离,通过注解和XML映射文件映射到数据库的字段上,并提供相应的API来操作数据库。可以自动将SQL语句转为JDBC代码,并根据指定的返回值类型生成对应的结果提供给开发者使用。
2.3 MyBatis使用流程
- 配置MyBatis环境
在pom.xml中添加相关依赖:MyBatis Framework 和 MySQL Driver - 配置文件中配置数据库的连接信息
(application.properties)
spring.datasource.url=jdbc:mysql://localhost:3306/blog?characterEncoding=utf8&serverTimezone=Asia/Shanghaispring.datasource.username=rootspring.datasource.password=root
- 定义pojo类,和数据表做好映射关系
- 编写Dao层接口,在接口中定义操作数据库的方法,在注解或者XML文件中实现具体的SQL语句。
@Mapperpublic interface UserMapper{@Insert("INSERT INTO user VALUES(NULL,#{username})")int insert(User user);}
- 使用
// 1.自动装配@Autowiredprivate UserMapper userMapper// 2.调用方法userMpper.insert(...)
3 MyBatis配置SQL方式
3.1 基于注解方式
3.1.1 说明
- 基于注解方式省去了配置XML文件的编写工作,并且可以很方便的完成一些 简单的 CRUD操作,但是对于一些复杂的SQL语句使用起来会很冗余。
3.1.2 使用流程
- (maven工程)在pom.xml中添加MyBatis和MySQL相关的依赖
- 在配置文件中(application.properties)配置数据库的连接信息
- 创建实体类,和数据库中的表做好对应关系
- 配置Mapper接口,在接口中添加@Mapper注解,告诉底层为此接口创建实现类,在实现类中定义数据访问的逻辑,执行与数据库的会话
- 在接口中定义方法,在方法上使用注解标注SQL语句的类型,可以使用的注解有:@Insert、@Dlelete、@Update、@Select
如果SQL语句中涉及到多个参数,可以使用@Param注解给每个参数取名。 - 自动装配并在应用程序中使用即可
@Autowiredprivate XxxMapper xxxMapper;xxxMapper.接口中的方法(参数...);
3.1.3 常用注解
- @Insert(“SQL”)
- @Dlelete(“SQL”)
- @Update(“SQL”)
- @Select(“SQL”)
3.2 基于XML方式
3.2.1 相比注解优势
- 更好的可读性
XML文件具有良好的结构和语义,可以使JAVA代码和SQL语句彻底分离,便于管理和优化。注解配置SQL语句可能使JAVA代码变的冗长。 - 更好的复用性
将SQL语句写入XML文件中,通过 和标签 将重复的SQL抽取并引用,从而提高了SQL语句的复用性。 - 更好的支持动态SQL
动态SQL语句是根据运行时的参数来生成的SQL,复杂性较高,使用XML文件更加方便。
3.2.2 使用流程
- 添加依赖:pom.xml
- 配置数据源:application.propertis
- 配置xml文件的扫描路径:application.properties
- 创建实体类,做好和数据表的对应关系
- 定义接口,添加@Mapper注解,并定义接口中的方法
- 创建xml文件,使用标签配置SQL
- 装配使用
@Autowiredprivate XxxMapper xxxMapper;xxxMapper.接口方法(参数...);
3.2.3 常用标签
- insert标签
- delelte标签
- update标签
- select标签
使用select标签需要指定 resultType 的属性值 - foreache标签:用于动态删除
<delete id="xxx">DELETE FROM xxx WHERE id in(<foreache collection="对象类型" item="变量名" separator="分隔符">#{变量名}</foreache>)</delete>
- set标签和if标签:用于动态修改
<update id="xxx">UPDATE xxx <set><if test="属性名!=null">字段名=#{属性名},</if><if test="属性名!=null">字段名=#{属性名},</if><if test="属性名!=null">字段名=#{属性名}</if></set></update>
- sql标签和include标签:用于SQL语句的复用
<!--1.重复SQL抽取--><sql id="selectSql">SELECT * FROM xxx</sql><select id="xxx" resultType="xxx"><include refid="selectSql"></include></select><select id="yyy" resultType="yyy"><include refid="selectSql"></include> WHERE id>5</select>
相关文章:
Mybatis基于注解与XML开发
文章目录 1 关于SpringBoot2 关于MyBatis2.1 MyBatis概述2.2 MyBatis核心思想2.3 MyBatis使用流程3 MyBatis配置SQL方式3.1 基于注解方式3.1.1 说明3.1.2 使用流程3.1.3 常用注解 3.2 基于XML方式3.2.1 相比注解优势3.2.2 使用流程3.2.3 常用标签 1 关于SpringBoot SpringBoot…...

数字化转型导师坚鹏:数字化时代扩大内需的8大具体建议
在日新月异的数字化时代、复杂多变的国际化环境下,扩大内需成为推动经济发展的国家战略,如何真正地扩大内需?结合本人15年的管理咨询经验及目前实际情况的深入研究,提出以下8大具体建议: 1、制定国民收入倍增计划。结…...

M1/M2 通过VM Fusion安装Win11 ARM,解决联网和文件传输
前言 最近新入了Macmini M2,但是以前的老电脑的虚拟机运行不起来了。😅,实际上用过K8S的时候,会发现部分镜像也跑不起来,X86的架构和ARM实际上还是有很多隐形兼容问题。所以只能重新安装ARM Win11,幸好微软…...
Linux中显示系统正在运行的进程的命令
2023年7月29日,周六上午 在Linux中,ps命令用于显示当前系统中正在运行的进程, ps应该是processes snapshot(进程快照)的缩写。 以下是ps命令的常见用法和示例: 显示当前用户的所有进程:ps 显示…...

vite中安装less
使用vite创建的项目,默认是没有安装less的 如果直接在style中书写less 会报下图错误: 解决方案: npm install --save less 在package.json中查看是否安装成功 安装完成刷新页面,问题解决...

Aduino中eps环境搭建
这里只记录Arduino2.0以后版本:如果有外网环境,那么可以轻松搜到ESP32开发板环境并安装,如果没有,那就见下面操作: 进入首选项,将esp8266的国内镜像地址填入,然后保存,在开发板中查…...

python——案例二 求两个数的和
#案例二 求两个数的和 num1input(请输入第一个数字:) num2input(请输入第二个数字:) sumfloat(num1)float(num2) #计算公式 print(sum) #显示结果 输入num11、num22得到结果sum3...

一文了解 Android 车机如何处理中控的旋钮输入?
前言 上篇文章《从实体按键看 Android 车载的自定义事件机制》带大家了解了 Android 车机支持自定义输入的机制 CustomInputService。事实上,除了支持自定义事件,对于中控上常见的音量控制、焦点控制的旋钮事件,Android 车机也是支持的。 那…...

小红书推广 方法总结
大家好,我是网媒智星,今天跟大家分享一下小红书的推广方法和经验。 一、平台简介 1、什么是小红书? 小红书是一个消费决策/生活方式平台,用户可以通过图片、文案、视频等方式分享美好生活。 2、用户画像 - 2亿月活跃…...

通讯录的实现(超详细)——C语言(进阶)
目录 一、创建联系人信息(结构体) 二、创建通讯录(结构体) 三、define定义常量 四、打印通讯录菜单 五、枚举菜单选项 六、初始化通讯录 七、实现通讯的的功能 7.1 增加加联系人 7.2 显示所有联系人的信息 7.3 单独查…...

3D 渲染技巧-如何创建高质量写实渲染?
掌握创建高质量建筑渲染和任何 3D 渲染的艺术是一项复杂且需要技巧的工作,通常需要多年的经验和实践。实现逼真的结果需要仔细考虑众多因素,并避免可能导致缺乏真实性的假渲染效果的常见错误。 避免常见错误 - 提升渲染游戏的技巧 在追求创建真正逼真的…...
fastadmin采坑之获取当前登录admin用户的信息
在controller层里想要获取当前登录admin用户的信息 print_r($this->auth->getUserInfo());但是有个问题 我在fa_admin表中添加了新的字段,这个方法获取不到新字段的数值,具体也没有去研究估计跟方法有关 然后我直接用模型去获取数据,简…...

【Spring AOP + 自定义注解 + 动态数据源 实现主从库切换读写分离】—— 案例实战
💧 S p r i n g A O P 主从数据源切换 读写分离 自定义注解案例实战! \color{#FF1493}{Spring AOP 主从数据源切换 读写分离 自定义注解 案例实战!} SpringAOP主从数据源切换读写分离自定义注解案例实战!💧 …...

【LeetCode每日一题合集】2023.7.24-2023.7.30
文章目录 771. 宝石与石头代码1——暴力代码2——位运算集合⭐(英文字母的long集合表示) 2208. 将数组和减半的最少操作次数(贪心 优先队列)2569. 更新数组后处理求和查询⭐⭐⭐⭐⭐(线段树)TODO2500. 删除…...

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(14)-Fiddler断点(breakpoints)实战,篡改或伪造数据
1.简介 上一篇主要就讲解和分享Fiddler断点的理论和操作,今天宏哥就用具体例子,将上一篇中的理论知识实践一下。而且在实际测试过程中,有时候需要修改请求或响应数据,或者直接模拟服务器响应,此时可以使用fiddler进行…...

ELK + Fliebeat + Kafka日志系统
参考: ELKFilebeatKafka分布式日志管理平台搭建_51CTO博客_elk 搭建 ELK 日志分析系统概述及部署(上)-阿里云开发者社区 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。…...

Scaling Instruction-Finetuned Language Models
Paper name Scaling Instruction-Finetuned Language Models Paper Reading Note Paper URL: https://arxiv.org/pdf/2210.11416.pdf TL;DR 2022 年谷歌出的文章,对指令微调的影响因素进行分析,提出了一些提升指令微调效果的方案。与该文章一起出品…...

rust 闭包函数
函数有自己的类型,可以像使用基础类型一样使用函数,包括将函数保存在变量中、保存在 vec 中、声明在结构体成员字段中。闭包函数也是函数,也有自己的类型定义。不过,函数实际上是指针类型,在 rust 所有权中属于借用的关…...

MySQL 实现分库和分表的备份 2023.7.29
1、分库备份 [rootlocalhost mysql-backup]# cat db_bak.sh #!/bin/bash k_userroot bak_password123456 bak_path/root/mysql-backup/ bak_cmd"-u$bak_user -p$bak_password" exc_db"Database|information_schema|mysql|performance_schema|sys" dbname…...
20230728----重返学习-跨域-模块化-webpack初步
day-122-one-hundred-and-twenty-two-20230728-跨域-模块化-webpack初步 跨域 跨域 为什么要跨域? 浏览器为了安全,不能让我们的html文件可以随意引用别的服务器中的文件,只允许我们的html或js文件中,请求我们自己服务器。这个…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...

通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...