MyBatis ——在java层面对MySQL数据库进行操作

news2024/12/29 9:58:10

目录

MyBatis 是一款优秀的 持久层框架,用于简化JDBC(java操作数据库)的开发;

使用MyBatis 查询所有用户数据的过程

Lombok是一个实用的]ava类库,能通过注解的形式 简化 JavaBean的代码

注解:

引入Mybatis的相关依赖,配置Mybatis(数据库连接信息)

编写SQL语句(注解/XML)使用注解的方式编写SQL语句 使用XML映射文件编写SQL语句

使用注解的方式编写SQL语句

1. 编写SQL语句的类 注解

2.测试类 注解

数据库连接池重复使用 一个现有的 数据库连接

预编译 SQL语句

使用XML映射文件编写SQL语句

规范

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

使用过程可以通过点击红蓝小鸟实现两个文件之间的切换

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

抽取重复的SQL片段


 

  • MyBatis 是一款优秀的 持久层框架,用于简化JDBC(java操作数据库)的开发;


    MyBatis官网 : https://mybatis.org/mybatis-3/zh/index.html
    JDBC:Java语言操作关系型数据库的一套 API,我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动数据库jar包中的实现类
    • 使用MyBatis 查询所有用户数据的过程

      • 准备工作(创建springboot工程、数据库表user、JavaBean类 User)
        简化JavaBean的代码——Lombok是一个实用的]ava类库,能通过注解的形式 简化 JavaBean的代码
        • Lombok是一个实用的]ava类库,能通过注解的形式 简化 JavaBean的代码


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

            • 为了方便,系统将常用的注解合并在一起 ——> @Data —>Data
              包含的注解
              @Getter —> getXxx、@Setter—>setXxx 、@ToString —> tostring()、@EqualsAndHashCode —>equals() + hashcode()
            • @NoArgsConstructor —>无参构造 @AllArgsConstructor —>全参构造
      • 引入Mybatis的相关依赖,配置Mybatis(数据库连接信息)


        application.properties文件配置数据库连接信息
      • 编写SQL语句(注解/XML)
        使用注解的方式编写SQL语句 使用XML映射文件编写SQL语句

        • 使用注解的方式编写SQL语句
          • 1. 编写SQL语句的类 注解

            • 类名前——@Mapper
            • SQL语句——@Select(查找)、@delect(删除)、@update(修改);
          • 2.测试类 注解

            • 类名前——@SpringBootTest
              告诉程序这个是测试类
            • 依赖注入——@Autowired
              得到IOC容器中的对应实现类
            • 测试方法——@Test
              告诉程序这个是测试方法
          • 数据库连接池
            重复使用 一个现有的 数据库连接
            • 特点:
              • 数据库连接池是个容器,负责分配、管理数据库连接(Connection)
              • 它允许应用程序重复使用 一个现有的 数据库连接,而不是 再重新建立一个
              • 释放空闲时间 超过最大空闲时间 的 连接,来避免 因为没有释放连接 而引起的数据库 连接遗漏
            • 数据库连接池和普通连接的区别

              • 1.普通连接:使用时创建,不用时销毁
              • 2.数据库连接池(相当于线程池):使用时,从连接池中获取,用完了再放回连接池; 当用户获得连接,却不使用时,连接池会去检测这个连接,当空闲时间超过最大空闲时间,就会直接释放。
            • 优势:资源重用、 提升系统响应速度、 避免数据库连接遗漏。
            • 标准接口 :DataSource ,由第三方组织实现此接口——Hikari 、Druid


              Hikari (追光者): Springtboot默认使用的数据库连接项目
              ​Druid (德鲁伊): 阿里巴巴开源的数据库连接项目
              • IDEA中新建Springboot工程,默认使用的是Hikari 数据库连接池,如果要使用Druid,需要切换

          • 预编译 SQL语句
            • 1. 设置 SQL中的 参数—— #{...}
              • 参数占位符——#{...}、concat(#{...})、${...}


                常用 #{...} 需要字符串拼接时候使用: concat(#{...}) ${...}:用于参数拼接,但是会存在SQL注入问题,不常用
                • #{...} : 执行SQL时,会将#{...)替换为?,生成预编译SQL,会自动设置参数值。
                  使用时机:参数传递,都使用#{...}
                • concat(#{...}):执行SQL时,会将#{...)替换为?,concat()方法,将参数输入的值作为字符串和左右拼接到一起
                • ${...} : 拼接SQL。直接将参数拼接在SQL语句中,存在SQL注入问题。
                  使用时机:如果对表名、列表进行动态设置时使用,
              • 如果mapper接口方法形参只有一个普通类型的参数,{#..}里面的属性名可以随便写,如: #{id)、#{value}。


                可以在application.properties中,配置“打开mybatis的日志”的代码,并指定输出到控制台,在控制台查看本次数据的转换
                • 优势:性能更高、更安全(防止SQL注入)


                  如果不用参数,每一次都需要创建新的删除语句;使用参数只需要创建一次删除语句
                  • 缓存:SQL语法解析检查+优化SQL+编译SQL 三合一
                    执行过程:
                    ​1.执行第一条语句,按顺序依次执行;
                    ​2.执行第二条时候,会先检查 缓存 里面是否包含这条语句,
                    ​ 2.1如果包含,直接执行;
                    2.2如果不包含,再次按顺序依次执行
                  • SQL注入是通过操作输入的数据来修改事先定义好的SQL语句,以达到执行代码对服务器进行攻击的方法。

              • 如果mapper接口方法形参 有多个普通类型的 参数,{#..}里面的属性名需要一一对应,一般会封装成一个JavaBean对象,这就需要参数跟JavaBean中的变量名一一对应。


                属性值也是针对数据库中数据表的命名进行定义,将带下划线的写成小驼峰形式
                 
              • 主键返回——@Options(keyProperty="id",useGeneratedkeys = true);


                会自动生成主键值,并赋值给 emp对象的 id变量
            • 2.数据封装——判断JavaBean类中的变量名和数据库是否一致,一致就将数据赋值到数据库(也叫映射)。


              这也是为什么要将JavaBean类中的变量和数据库表头变量名一致,但是多个单词语句,在SQL语句通过“_”下划线连接,java中设置为小驼峰模式。所以两个变量名不一样,这就需要在 application.properties配置文件中 开启 mybatis的驼峰命名自动映射开关
              • 实体类属性名 和 数据库表查询返回的字段名一致,mybatis会自动封装
              • 如果实体类属性名 和 数据库表查询返回的字段名不一致,不能自动封装,
              • 开启mybatis的驼峰命名自动映射开关a_column —>aCloumn
                application.properties文件中:mybatis.configuration.map-underscore-to-camel-case-true
        • 使用XML映射文件编写SQL语句
          • 规范

            • XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)
            • XML映射文件的namespace属性为Mapper接口全限定名一致。
            • XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致。
          • MyBatisX是一款基于IDEA的快速开发MyBatis 的插件,为效率而生,

            • 使用过程
              可以通过点击红蓝小鸟实现两个文件之间的切换
              • 第一步:在java文件中设置 方法,传递参数,确定返回值

              • 第一步:创建同包同名的xml文件。

              • 第二步:设置namespace属性

              • 第三步:设置sql语句的id与Mapper 接口中的方法名一致,并保持返回类型一致。
                id 设为方法名 list; resultType设置为 方法的返回值——单条记录所封装的类型
            • 动态SQL:随着用户的输入或外部条件的变化而变化的SQL语句,我们称为 动态SQL。
              • if : 判断条件,成立就会拼接SQL语句

              • <where> 标签:子元素有内容情况下,在行首插入 where语句,自动去除 子句的开头 and 或者 or


                where 语句 替换成 <where> 标签
              • <set> 标签:子元素有内容情况下,在行首插入 set语句,自动省略额外的 符号(例如 “ ,”),用于update 语句中


                set语句 替换成 <set> 标签
              • <foreach>标签 : 遍历集合。


                collection :集合名称; item :遍历出来的元素/项; separator:元素之间的分隔符 open:遍历开始前拼接 close:遍历结束后拼接
            • 抽取重复的SQL片段


              相当于java中抽取重复的代码定义一个方法一样
              • <sql>:定义可重用的 SQL片段。
              • <include>:通过属性refid,指定包含的sql片段。

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

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

相关文章

Oracle之用TO_CHAR函数将日期格式转化为不带前导零的月份和日

要求&#xff1a; 1、日期格式转化成字符串格式&#xff0c;月和日前面的0需要去掉&#xff0c;如日期2024-09-06需要转化成2024-9-6&#xff1b; 2、如果用截取拼接函数写法就会复杂&#xff0c;最好用TO_CHAR函数格式化实现。 正确写法&#xff1a; SELECT TO_CHAR(SYSDAT…

使用cage工具包生成验证码

目录 1. 导入依赖2. 控制类3. 测试 1. 导入依赖 <!-- 验证码工具 --><dependency><groupId>com.github.cage</groupId><artifactId>cage</artifactId><version>1.0</version></dependency>2. 控制类 RestControl…

SD-WAN解决外贸企业网络搭建问题

在全球化浪潮下&#xff0c;外贸企业日益感受到互联网和数字化技术对业务发展的重要性。作为一种创新的网络解决方案&#xff0c;SD-WAN&#xff08;软件定义广域网&#xff09;正成为外贸企业网络升级的重要助力。本文将深入剖析SD-WAN如何有效解决外贸企业网络搭建中的关键问…

ubuntu java

1、安装&#xff1a;https://zhuanlan.zhihu.com/p/565274672 遇到 sudo kill 8544 2、然后可以正常安装 编写hello world: https://blog.csdn.net/qq_33523925/article/details/92410963 安装IDEA Linux系统安装IDEA保姆级教程_linux安装idea-CSDN博客 3、idea如何设置…

【第0006页 · 数组】寻找重复数

【前言】本文以及之后的一些题解都会陆续整理到目录中&#xff0c;若想了解全部题解整理&#xff0c;请看这里&#xff1a; 第0006页 寻找重复数 今天想讨论的一道题在 LeetCode 上评论也是颇为“不错”。有一说一&#xff0c;是道好题&#xff0c;不过我们还是得先理解了它才…

北京理工大学开设仓颉实践课程,培养特色化软件人才

为响应国家软件发展战略&#xff0c;培养满足产业发展需求的特色化软件人才&#xff0c;北京理工大学信息技术创新学院率先把仓颉语言引入到大二暑期的实践课程中。在今年暑期为期3周的实践课中&#xff0c;信息技术创新学院教研中心副主任徐礼文老师开设了“仓颉语言HarmonyOS…

Git 撤回commit

上一篇&#xff0c;Git撤销add&#xff0c;其实已经讲了用reset命令可以取消commit&#xff0c;这里再啰嗦下。先看&#xff1a; git如何撤回已经commit • Worktile社区 首先明确一点&#xff0c;无论是commit还是撤销commit&#xff0c;都是在本地暂存区操作&#xff0c;而…

CTFHub技能树-Git泄漏-Stash

目录 一、前提知识 1.什么是git stash 2.git文件目录结构 3.git中对象指向 二、解题过程 方法一&#xff1a;使用GitHack 方法二&#xff1a;使用Git_Extract工具&#xff0c;这个是自动解析不用git stash等操作&#xff0c;直接得到flag 当前大量开发人员使用git进行版本…

C/C++:C语言中的__FILE__、__LINE__等几种C标准用法

C语言中的几种特殊标准定义 __FILE__ &#xff1a;正在编译文件的文件名__LINE__ &#xff1a;正在编译文件的行号__DATE__&#xff1a;编译时刻的日期字符串 如“Sep 22 2020”__TIME__&#xff1a;编译时刻的时间字符串 如”10:00:00“__STDC__&#xff1a;判断该文件是不是…

网关功能介绍

在微服务架构中&#xff0c;网关&#xff08;API Gateway&#xff09;扮演着至关重要的角色&#xff0c;它作为客户端和微服务之间的中介&#xff0c;负责路由、过滤、认证、限流等职责。以下是一些常见的网关实现&#xff1a; Spring Cloud Gateway&#xff1a; Spring Cloud …

【佳学基因检测】网站加密证书失效后,如何移除并为新的证书安装准备环境?

【佳学基因检测】网站加密证书失效后&#xff0c;如何移除并为新的证书安装准备环境&#xff1f; 当WoTrus DV Server CA证书失效后&#xff0c;你需要确保你的Nginx配置中不再引用该证书&#xff0c;并且移除或替换相关的证书文件。以下是具体步骤&#xff1a; 1. 确认Nginx…

如何在 cPanel 中使用 PuTTY SSH

cPanel & WHM 的直观网页界面使管理服务器和虚拟主机账户变得轻松。然而&#xff0c;有时在服务器命令行上工作也是很有用的。PuTTY SSH客户端允许您通过加密连接登录到服务器的命令行界面&#xff0c;从而确保敏感数据不会在互联网上暴露。Hostease 提供高性能的服务器&am…

Python | Leetcode Python题解之第391题完美矩形

题目&#xff1a; 题解&#xff1a; class Solution:def isRectangleCover(self, rectangles: List[List[int]]) -> bool:area, minX, minY, maxX, maxY 0, rectangles[0][0], rectangles[0][1], rectangles[0][2], rectangles[0][3]cnt defaultdict(int)for rect in rec…

【区块链 + 物联网】区块链边缘计算网关设备 | FISCO BCOS应用案例

目前边缘端设备主要以人工智能应用为主&#xff0c;或以数据采集网络设备为主&#xff0c;还未有区块链边缘计算网关设备&#xff0c;难以 在依托终端设备的传统行业中进行区块链 应用。本项目研制区块链边缘计算网关&#xff0c;将区块链、计算与网络集成 在一起&#xff0c;…

docker-compose安装mysql8集群

我这里一主两从mysql数据库集群,mysql镜像版本是8.0.39 如下 如下&#xff1a; [rootVM-20-8-centos mysqlData]# docker-compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS mysql-master …

【C题成品论文2已出】24数学建模国赛C题第二套成品论文(附参考代码)免费分享

假设&#xff1a;每个地块每年种植一种农作物。 针对问题一 单目标优化问题&#xff0c;定义决策变量&#xff0c;定义目标函数、定义约束条件、数据预处理、使用整数规划&#xff0c;编程解决问题。 定义决策变量&#xff1a; Xt,i&#xff1a;在第t年种植第i种作物的亩数…

如何规划Web项目

项目规划 规划步骤 1. 用户故事 从用户的角度描述应用程序的功能。所有用户故事放在一起描述了整个应用程序 2. 功能 3. 流程图&#xff08;我们将去构建什么&#xff09; 4. 架构&#xff08;我们如何去构建他&#xff09; 下一步就是开发步骤&#xff08;使用代码来实现我…

聊聊资源调度

资源调度 般分为两个阶段&#xff1a; 是实现物理资源的虚拟化&#xff08;即资源的抽象&#xff09;于当前机器的性能越来越好&#xff0c;硬件配置越来越高&#xff0c;直接用物理机跑业务比较浪费&#xff0c;所以将物理机分割成更小单位的虚拟机&#xff0c;这样可以显著提…

“人大金仓”正式更名为“电科金仓”; TDSQL-C支持回收站/并行DDL等功能; BigQuery支持直接查询AlloyDB

重要更新 1. “人大金仓”正式更名为“电科金仓”&#xff0c;完整名称“中电科金仓&#xff08;北京&#xff09;科技股份有限公司”&#xff0c;突出金仓是中国电子科技集团有限公司在基础软件领域产品( [1] ) 。据悉人大金仓在上半年营收入为9056万元&#xff0c;净利润约21…

idea中配置Translation插件完成翻译功能

文章目录 idea下载插件配置有道云阿里云百度翻译开放平台 idea下载插件 idea中安装Translation插件 使用方法&#xff1a;右下角选择翻译引擎&#xff0c;鼠标选中想翻译的部分&#xff0c;右键翻译即可 之前一直用的微软的翻译&#xff0c;不需要配置&#xff0c;但是最近微软…