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>
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
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…...
![](https://img-blog.csdnimg.cn/img_convert/ace1d5697b6a1e7ac748291ab22098dd.jpeg)
数字化转型导师坚鹏:数字化时代扩大内需的8大具体建议
在日新月异的数字化时代、复杂多变的国际化环境下,扩大内需成为推动经济发展的国家战略,如何真正地扩大内需?结合本人15年的管理咨询经验及目前实际情况的深入研究,提出以下8大具体建议: 1、制定国民收入倍增计划。结…...
![](https://img-blog.csdnimg.cn/84023e7db82946c4b9c48605b98719cc.png)
M1/M2 通过VM Fusion安装Win11 ARM,解决联网和文件传输
前言 最近新入了Macmini M2,但是以前的老电脑的虚拟机运行不起来了。😅,实际上用过K8S的时候,会发现部分镜像也跑不起来,X86的架构和ARM实际上还是有很多隐形兼容问题。所以只能重新安装ARM Win11,幸好微软…...
![](https://www.ngui.cc/images/no-images.jpg)
Linux中显示系统正在运行的进程的命令
2023年7月29日,周六上午 在Linux中,ps命令用于显示当前系统中正在运行的进程, ps应该是processes snapshot(进程快照)的缩写。 以下是ps命令的常见用法和示例: 显示当前用户的所有进程:ps 显示…...
![](https://img-blog.csdnimg.cn/683bf56bb89446dc92989163534b93f3.png)
vite中安装less
使用vite创建的项目,默认是没有安装less的 如果直接在style中书写less 会报下图错误: 解决方案: npm install --save less 在package.json中查看是否安装成功 安装完成刷新页面,问题解决...
![](https://img-blog.csdnimg.cn/41241f00bf904b06aa1ae0e531693ae4.png)
Aduino中eps环境搭建
这里只记录Arduino2.0以后版本:如果有外网环境,那么可以轻松搜到ESP32开发板环境并安装,如果没有,那就见下面操作: 进入首选项,将esp8266的国内镜像地址填入,然后保存,在开发板中查…...
![](https://img-blog.csdnimg.cn/b79da7219d2a4cf285617994020806e0.png)
python——案例二 求两个数的和
#案例二 求两个数的和 num1input(请输入第一个数字:) num2input(请输入第二个数字:) sumfloat(num1)float(num2) #计算公式 print(sum) #显示结果 输入num11、num22得到结果sum3...
![](https://img-blog.csdnimg.cn/img_convert/074f8e6209effd644873ef202e13a5d2.png)
一文了解 Android 车机如何处理中控的旋钮输入?
前言 上篇文章《从实体按键看 Android 车载的自定义事件机制》带大家了解了 Android 车机支持自定义输入的机制 CustomInputService。事实上,除了支持自定义事件,对于中控上常见的音量控制、焦点控制的旋钮事件,Android 车机也是支持的。 那…...
![](https://img-blog.csdnimg.cn/11ae640cfaa84d67a995f5fe31e57343.jpeg)
小红书推广 方法总结
大家好,我是网媒智星,今天跟大家分享一下小红书的推广方法和经验。 一、平台简介 1、什么是小红书? 小红书是一个消费决策/生活方式平台,用户可以通过图片、文案、视频等方式分享美好生活。 2、用户画像 - 2亿月活跃…...
![](https://img-blog.csdnimg.cn/266cc1ed21ac4dce9e32a41cd2bae22a.jpeg)
通讯录的实现(超详细)——C语言(进阶)
目录 一、创建联系人信息(结构体) 二、创建通讯录(结构体) 三、define定义常量 四、打印通讯录菜单 五、枚举菜单选项 六、初始化通讯录 七、实现通讯的的功能 7.1 增加加联系人 7.2 显示所有联系人的信息 7.3 单独查…...
![](https://img-blog.csdnimg.cn/img_convert/b49db12e198d73dfa16a8bb70a06c447.jpeg)
3D 渲染技巧-如何创建高质量写实渲染?
掌握创建高质量建筑渲染和任何 3D 渲染的艺术是一项复杂且需要技巧的工作,通常需要多年的经验和实践。实现逼真的结果需要仔细考虑众多因素,并避免可能导致缺乏真实性的假渲染效果的常见错误。 避免常见错误 - 提升渲染游戏的技巧 在追求创建真正逼真的…...
![](https://www.ngui.cc/images/no-images.jpg)
fastadmin采坑之获取当前登录admin用户的信息
在controller层里想要获取当前登录admin用户的信息 print_r($this->auth->getUserInfo());但是有个问题 我在fa_admin表中添加了新的字段,这个方法获取不到新字段的数值,具体也没有去研究估计跟方法有关 然后我直接用模型去获取数据,简…...
![](https://img-blog.csdnimg.cn/59b4aa2214954a2493290a7cfb52995d.png)
【Spring AOP + 自定义注解 + 动态数据源 实现主从库切换读写分离】—— 案例实战
💧 S p r i n g A O P 主从数据源切换 读写分离 自定义注解案例实战! \color{#FF1493}{Spring AOP 主从数据源切换 读写分离 自定义注解 案例实战!} SpringAOP主从数据源切换读写分离自定义注解案例实战!💧 …...
![](https://img-blog.csdnimg.cn/fc650321b61141609d663721af752a84.png)
【LeetCode每日一题合集】2023.7.24-2023.7.30
文章目录 771. 宝石与石头代码1——暴力代码2——位运算集合⭐(英文字母的long集合表示) 2208. 将数组和减半的最少操作次数(贪心 优先队列)2569. 更新数组后处理求和查询⭐⭐⭐⭐⭐(线段树)TODO2500. 删除…...
![](https://img-blog.csdnimg.cn/a1d99cf7f4ca449aa36c83e7d17d9234.png)
《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(14)-Fiddler断点(breakpoints)实战,篡改或伪造数据
1.简介 上一篇主要就讲解和分享Fiddler断点的理论和操作,今天宏哥就用具体例子,将上一篇中的理论知识实践一下。而且在实际测试过程中,有时候需要修改请求或响应数据,或者直接模拟服务器响应,此时可以使用fiddler进行…...
![](https://img-blog.csdnimg.cn/a589dfb19edf42d98ab92428a30037c2.png)
ELK + Fliebeat + Kafka日志系统
参考: ELKFilebeatKafka分布式日志管理平台搭建_51CTO博客_elk 搭建 ELK 日志分析系统概述及部署(上)-阿里云开发者社区 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。…...
![](https://img-blog.csdnimg.cn/9e3bb3c15cfd49569a884316737d1546.png)
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 年谷歌出的文章,对指令微调的影响因素进行分析,提出了一些提升指令微调效果的方案。与该文章一起出品…...
![](https://img-blog.csdnimg.cn/ea2a4f1a13494cf59bb56111af35dc73.png)
rust 闭包函数
函数有自己的类型,可以像使用基础类型一样使用函数,包括将函数保存在变量中、保存在 vec 中、声明在结构体成员字段中。闭包函数也是函数,也有自己的类型定义。不过,函数实际上是指针类型,在 rust 所有权中属于借用的关…...
![](https://img-blog.csdnimg.cn/37eb6d9d25d64caab1215f6924b5e154.png)
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…...
![](https://www.ngui.cc/images/no-images.jpg)
20230728----重返学习-跨域-模块化-webpack初步
day-122-one-hundred-and-twenty-two-20230728-跨域-模块化-webpack初步 跨域 跨域 为什么要跨域? 浏览器为了安全,不能让我们的html文件可以随意引用别的服务器中的文件,只允许我们的html或js文件中,请求我们自己服务器。这个…...
![](https://www.ngui.cc/images/no-images.jpg)
[SQL挖掘机] - 多表连接: union all
介绍: sql中的union all是用于合并两个或多个select语句的结果集的操作符。与union不同的是,union all不会自动去除重复的行,它会简单地将多个查询的结果集合并在一起,包括重复的行。 用法: union all的基本语法如下: select_…...
![](https://img-blog.csdnimg.cn/76ccd6b6a6aa4b4ba3b686d2edded56f.png)
TypeError: run() got an unexpected keyword argument ‘hide_label‘ yolov5最新版本报错
报错展示 解决方法 把detect.py中的如上部分的 --hide-label改为 --hide-labels,成功解决....
![](https://www.ngui.cc/images/no-images.jpg)
什么是Java中的集成测试?
Java中的集成测试(Integration Test)是一种测试方法,用于测试多个模块或组件之间的交互和集成。在Java中,集成测试通常使用单元测试框架(如JUnit)编写和运行。 对于初学者来说,集成测试可能有些…...
![](https://www.ngui.cc/images/no-images.jpg)
打卡力扣题目二
#左耳听风 ARST 打卡活动重启# 目录 一、问题 二、 解题方法一 三、enumerate函数介绍 关于 ARTS 的释义 —— 每周完成一个 ARTS: ● Algorithm: 每周至少做一个 LeetCode 的算法题 ● Review: 阅读并点评至少一篇英文技术文章 ● Tips: 学习至少一个技术技巧 …...
![](https://img-blog.csdnimg.cn/0ef4b88001524feb82d473fcc16293ab.png)
【Qt】QML-02:QQuickView用法
1、先看demo QtCreator自动生成的工程是使用QQmlApplicationEngine来加载qml文件,下面的demo将使用QQuickView来加载qml文件 #include <QGuiApplication> #include <QtQuick/QQuickView>int main(int argc, char *argv[]) {QGuiApplication app(argc,…...
![](https://img-blog.csdnimg.cn/img_convert/24934280a6347c25479456af5e5ac2e5.png)
【IDEA】idea不自动生成target
文章目录 1. 不生成target2. 仅部分文件不生成target2.1. 一般原因就是资源没有设置2.2. 配置编译src/main/java文件夹下的资源文件2.3. 清理缓存(王炸) 3. 参考资料 本文描述idea不生成target的几种情况以及处理方法 1. 不生成target 像下图这样根本就…...
![](https://img-blog.csdnimg.cn/img_convert/1b7da08d8bdbc58694553d74db2e2244.png)
从官网认识 JDK,JRE,JVM 三者的关系
点击下方关注我,然后右上角点击...“设为星标”,就能第一时间收到更新推送啦~~~ JVM 是一些大厂面试必问点,要想解决 OOM、性能调优方面的问题,掌握 JVM 知识必不可少,从今天开始,将为大家介绍 JVM 的常用知…...
![](https://img-blog.csdnimg.cn/6867615eae07407c99453dd76e4f4371.png)
python 将pdf文件转图片
有小伙伴问了怎么将 pdf文件转图片的问题,我百度了一波儿,搞了以下python代码给他封装成exe工具了。 中途打包踩了个坑,python进程池的问题,本地运行没啥问题,打包好的exe文件双击就会使电脑内存爆破卡死,…...
![](https://img-blog.csdnimg.cn/99f486ed622340d0a83aa37ccb889930.png)
js原型以及原型链
目录 原型隐式原型显式原型constructornew操作符 重写原型对象原型链继承原型链继承借用构造函数继承组合构造继承 原型继承寄生继承组合寄生继承 原型继承关系 原型 在JavaScript中,每个对象都有一个内置属性[[prototype]],这个属性指向一个另一个对象…...
![](https://img-blog.csdnimg.cn/fe54951e89814e70bc5410a3ec536870.png)
Java面向对象编程实战详解(图书管理系统示例)
文章目录 面向编程概念图书管理系统示例需求分析设计阶段编码实现创建目录结构Book类的编码BookList类的编码User类的编码AdminUser类的编码NormalUser类的编码启动类的编写具体的操作实现IOperation接口新增图书的实现借阅图书的实现删除图书的实现显示图书的实现查找图书的实…...
![](/images/no-images.jpg)
襄阳网站seo公司/seo诊断工具网站
大端和小端(Big-Endian和Little-Endian): 1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。 2) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。 以…...
![](/images/no-images.jpg)
地图素材如何做ppt模板下载网站/销售平台
干掉庞大的Binlog文件 想要恢愎数据库以前的资料,执行:show binlog events;屏幕就开始闪,闪的人眼花,心里烦(那有这么多没有用的破LOG^0^),还是删除一些去吧!1.查找binary logs mysql> show binary logs; --------------------------- | Log_name | File_size | -----…...
![](/images/no-images.jpg)
艺术设计教学资源网站建设标准/世界球队最新排名
一、处理JSON 1、将JavaScript数据转换为JSON对象(序列化) JSON.stringify(Object)2、将JSON数据转换为JavaScript对象(逆序列化) JSON.parse(stringJSON)二、Buffer模块缓冲数据(使用两位16进制表示一字节) 1、创建缓冲区 Buffer.from(array): returns …...
![](https://img-blog.csdnimg.cn/20201103213341652.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JlYXBlcl9NWEJH,size_16,color_FFFFFF,t_70#pic_center)
杭州网站建设网站制作/潍坊自动seo
Network penetration test experiment _1: Network scanning & Network investigation 目录Network penetration test experiment _1: Network scanning & Network investigation实验目的系统环境网络环境实验工具实验步骤1. 文档查找2. 地址查询…...
![](/images/no-images.jpg)
网站内容避免被采集/seo网络推广课程
当然用啊,新手的话建议入手两本左右的基础书籍。 最重要的是你要明确自己要做什么? 学习python,要明确自己的方向,python作为一门工具,能做的事情很多,如果你想要做web开发,那就需要学习django,flask等框架,如果你想做数据分析,那就需要学习numpy pandas…...
![](https://img-blog.csdnimg.cn/img_convert/f222166c6a8d9d2a8b6d23f90f7d1663.png)
phpcms律师网站源码/免费的app推广平台
题库来源:安全生产模拟考试一点通公众号小程序 2022安全员-A证试题是安全员-A证模拟考试题库的多种练习模式!2022年安全员-A证特种作业证考试题库及答案依据安全员-A证新考试大纲。安全员-A证全部考试题库随时根据安全生产模拟考试一点通提高考试通过率…...