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

目录

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.mzph.cn/diannao/53490.shtml

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

相关文章

【Leetcode152】乘积最大子数组(动态规划)

文章目录 一、题目二、思路三、代码 一、题目 二、思路 &#xff08;0&#xff09;读懂题意&#xff1a;题目的“连续”是指位置的连续&#xff0c;而不是说数字的连续&#xff0c;这是个大坑。 &#xff08;1&#xff09;确定状态&#xff1a;定义两个状态来记录当前子数组的…

Python 爬虫项目实战(一):爬取某云热歌榜歌曲

前言 网络爬虫&#xff08;Web Crawler&#xff09;&#xff0c;也称为网页蜘蛛&#xff08;Web Spider&#xff09;或网页机器人&#xff08;Web Bot&#xff09;&#xff0c;是一种按照既定规则自动浏览网络并提取信息的程序。爬虫的主要用途包括数据采集、网络索引、内容抓…

MySQL笔记2(DQL查询语言【条件、分组、排序、限制、子查询、左右连接、内连接、联合查询】)

DQL数据查询语言与项目高级查询实战 先安装数据库并创建一个库 并创建以下数据 /*创建部门表*/CREATE TABLE dept( deptnu INT PRIMARY KEY comment 部门编号, dname VARCHAR(50) comment 部门名称, addr VARCHAR(50) comment 部门地址 );/*某个公司的员工表*/ CREATE TABLE…

「ComfyUI」比 joy_caption 更好用的提示词反推模型!

前言 距离我们上次介绍 joy_caption 还没几天呢&#xff0c;这就又出新模型来与 joy_caption 一争高下了。 今天我们要介绍的是&#xff1a;Florence-2-X-PromptGen-v1.5&#xff0c;是在 Florence-2 的基础上进行精细调优的一款高级图像标注工具&#xff0c;专门为生成和标注…

Flutter框架——2.状态-路由-包-资源

文章参考了Flutter中国开源项目发起人杜文&#xff08;网名wendux&#xff09;创作的一本系统介绍Flutter技术的中文书籍《Flutter实战第二版》&#xff0c;网址&#xff1a;第二版序 | 《Flutter实战第二版》 https://book.flutterchina.club/#第二版变化 文章目录 一、状态管…

【C#跨平台开发详解】C#跨平台开发技术之.NET Core基础学习及快速入门

1. C#与.NET的发展历程 C#是由Microsoft开发的现代编程语言&#xff0c;最初伴随着.NET Framework发布。随着技术的进步&#xff0c;特别是针对跨平台开发的需求&#xff0c;Microsoft推出了.NET Core&#xff0c;这是一个开源且跨平台的框架&#xff0c;支持Windows、macOS和…

利用数据分析提升SEO排名的7种方法

我们都听过“大数据分析”这个词。科技让我们能够清晰地了解我们的活动和内容的表现——向我们提供了关于受众的宝贵信息&#xff0c;甚至可以精确到他们在Google和其他搜索引擎上使用的具体搜索词。 你已经在你的业务中使用数据分析了吗&#xff1f;如果是&#xff0c;你有利…

828华为云征文|华为云Flexus X实例docker部署MinIO对象存储系统obs

828华为云征文&#xff5c;华为云Flexus X实例docker部署MinIO对象存储系统obs 华为云最近正在举办828 B2B企业节&#xff0c;Flexus X实例的促销力度非常大&#xff0c;特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求&#xff0c;一定…

数据分析:R语言计算XGBoost线性回归模型的SHAP值

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍SHAP用途计算方法:应用加载R包导入数据数据预处理函数模型介绍 SHAP(SHapley Additive exPlanations)值是一种解释机器学习模型预测的方法。它基于博弈论中的Shapley值概念,…

5G网络建设

题目描述 现需要在基城市进行5G网络建设&#xff0c;已经选取N个地点设置5G基站&#xff0c;编号固定为1到N&#xff0c;接下来需要各个基站之间使用光纤进行连接以确保基 站能互联互通&#xff0c;不同基站之间假设光纤的成本各不相同&#xff0c;且有些节点之间已经存在光纤…

GeekDesk:不只是桌面美化,更是你的时间管理与效率提升专家

前言 科技&#xff0c;如同织就未来的经纬线&#xff0c;以智慧为梭&#xff0c;穿梭于生活的每一个角落&#xff0c;编织出一张便捷之网&#xff0c;让人类的生活如诗如画&#xff0c;绚烂多彩--这一理念深刻地影响着每一个科技产品的诞生与发展。在众多旨在提升工作效率与生…

基于SpringBoot的宠物服务系统+uniapp小程序+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

函数指针和指针函数

指针 指针函数 指针函数一个函数&#xff0c;只不过这个函数的返回值是一个地址值 和普通函数唯一的区别就是在函数名前面多了一个*号 函数返回值必须用同类型的指针变量来接受 也可以将其返回值定义为 void*类型&#xff0c;在调用的时候强制转换返回值为自己想要的类型 str…

一、selenium自动化简介selenium工具集

文章目录 一、简介二、组成部分三、selenium工具集3.1 Selenium IDE3.2 Selenium WebDriver3.3 Selenium Grid3.4 Appium 一、简介 官方网站 Selenium 是支持 web 浏览器自动化的一系列工具和库的综合项目。 它提供了扩展来模拟用户与浏览器的交互&#xff0c;用于扩展浏览器分…

Excel使用VLOOKUP公式匹配不出正确公式,返回#N/A

问题&#xff1a; Excel使用VLOOKUP公式匹配不出正确公式&#xff0c;返回#N/A 原因&#xff1a; 原数据和匹配的数据格式不一致 解决办法&#xff1a; 把格式都设置为文本。 例如添加一列&#xff0c;输入英文符号&#xff0c;然后把数据源拼接起来&#xff0c;转换为文…

Linux入门攻坚——31、rpc概念及nfs和samba

NFS&#xff1a;Network File System 传统意义上&#xff0c;文件系统在内核中实现 RPC&#xff1a;函数调用&#xff08;远程主机上的函数&#xff09;&#xff0c;Remote Procedure Call protocol 一部分功能由本地程序完成 另一部分功能由远程主机上的 NFS本质…

基于阿里云函数计算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方案最佳实践

作者&#xff1a;计缘 LLM Chat 应用大家应该都不陌生&#xff0c;这类应用也逐渐称为了我们日常的得力助手&#xff0c;如果只是个人使用&#xff0c;那么目前市面上有很多方案可以快速的构建出一个LLM Chat应用&#xff0c;但是如果要用在企业生产级别的项目中&#xff0c;那…

C#高级:递归2-根据ID反向递归求其所有的祖先节点信息

目录 一、实现demo 二、封装方法 【ID>祖先ID】 【ID>祖先实体】 三、递归讲解 一、实现demo class MainClass {static List<Person> PersonList new List<Person>(){new Person(){ Id1,ParentIDnull,Name"小明曾祖父",},new Person(){ Id2…

python文件自动化(4)

接上节课内容&#xff0c;在开始正式移动文件到目标文件夹之前&#xff0c;我们需要再思考一个问题。在代码运行之前&#xff0c;阿文的下载文件夹里已经存在一些分类文件夹了&#xff0c;比如图例中“PDF文件”这个文件夹就是已经存在的。这样的话&#xff0c;在程序运行时&am…

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext new ClassPathXmlApplicationContext("bean.xml"); } BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanFactory的功能相似&#xff0c;都是…