day08-Mybatis入门

MyBatis 是一款优秀的 持久层 框架,用于简化 JDBC 的开发。

官网:https://mybatis.org/mybatis-3/zh/index.html

一、快速入门

1.1 Mybatis 操作数据库的步骤

  1. 准备工作(创建 springboot 工程、数据库表 user、实体类 User)
  2. 引入 Mybatis 的相关依赖,配置 Mybatis (数据库连接信息)
  3. 编写 SQL 语句(注解/XML)

在这里插入图片描述

1.2 入门程序实现

1.2.1 准备工作

创建 springboot 工程,并导入 mybatis 的起步依赖、mysql 的驱动包。
在这里插入图片描述

1.2.2 配置 Mybatis

application.properties:

#配置数据库的连接信息 - 四要素
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
#连接数据库的用户名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=1234

1.2.3 编写 SQL 语句

在创建出来的 springboot 工程中,在引导类所在包下,在创建一个包 mapper。在 mapper 包下创建一个接口 UserMapper ,这是一个持久层接口(Mybatis 的持久层接口规范一般都叫 XxxMapper)。

@Mapper //在运行时,会自动生成该接口的实现类对象(代理对象), 并且将该对象交给IOC容器管理
public interface UserMapper {//查询全部用户信息@Select("select * from user")public List<User> list();}
  • @Mapper注解:表示是 mybatis 中的 Mapper 接口
    程序运行时:框架会自动生成接口的实现类对象(代理对象),并给交 Spring 的 IOC 容器管理
  • @Select注解:代表的就是 select 查询,用于书写 select 查询语句

1.2.4 单元测试

@SpringBootTest //springboot整合单元测试注解
class SpringbootMybatisQuickstartApplicationTests {@Autowiredprivate UserMapper userMapper;@Testpublic void testListUser(){List<User> userList = userMapper.list();userList.stream().forEach(user -> {System.out.println(user);});}}

1.3 解决 SQL 警告与提示

在这里插入图片描述
在这里插入图片描述

二、JDBC 介绍(了解)

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

JDBC 本质:

  1. sun 公司官方定义的一套操作所有关系型数据库的规范,即接口。
  2. 各个数据库厂商去实现这套接口,提供数据库驱动 jar 包。
  3. 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动 jar 包中的实现类。

技术对比
分析了 JDBC 的缺点之后,我们再来看一下在 mybatis 中,是如何解决这些问题的:

  1. 数据库连接四要素(驱动、链接、用户名、密码),都配置在 springboot 默认的配置文件 application.properties 中
  2. 查询结果的解析及封装,由 mybatis 自动完成映射封装,我们无需关注
  3. 在 mybatis 中使用了数据库连接池技术,从而避免了频繁的创建连接、销毁连接而带来的资源浪费。

在这里插入图片描述

三、数据库连接池

1 介绍

数据库连接池

  1. 数据库连接池是个容器,负责分配、管理数据库连接(Connection)
  2. 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个
  3. 释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏

优势

  1. 资源重用
  2. 提升系统响应速度
  3. 避免数据库连接遗漏

2 产品

官方(sun)提供了数据库连接池标准(javax.sql.DataSource接口)

  • 功能:获取连接
public Connection getConnection() throws SQLException; 
  • 第三方组织必须按照DataSource接口实现

常见的数据库连接池:

  • C3P0
  • DBCP
  • Druid
  • Hikari (springboot默认)

Druid(德鲁伊)

  • Druid 连接池是阿里巴巴开源的数据库连接池项目
  • 功能强大,性能优秀,是 Java 语言最好的数据库连接池之一

如果我们想把默认的数据库连接池切换为 Druid 数据库连接池,只需要完成以下两步操作即可:
官方地址:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
(1)在pom.xml文件中引入依赖

<dependency><!-- Druid连接池依赖 --><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.8</version>
</dependency>

(2)在application.properties中引入数据库连接配置

spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.url=jdbc:mysql://localhost:3306/mybatis
spring.datasource.druid.username=root
spring.datasource.druid.password=1234

四、lombok

Lombok 是一个实用的 Java 类库,可以通过简单的注解来简化和消除一些必须有但显得很臃肿的 Java 代码。
在这里插入图片描述

通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方
法,并可以自动化生成日志变量,简化 java 开发、提高效率。
在这里插入图片描述

<!-- 在springboot的父工程中,已经集成了lombok并指定了版本号,故当前引入依赖时不需要指定version -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency>

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

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

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

相关文章

(C语言)strcat函数详解与模拟实现与strncat函数详解

目录 1. strcat函数详解 1. strcat函数模拟实现 3. strcat函数的危险性 4. strncat函数详解 4.1 strncat函数的特殊情况验证 1. strcat函数详解 头文件<string.h> 该函数是用来对字符串末尾追加字符串的&#xff0c;有两个参数&#xff0c;destination是要被追加的字…

强缓存和协商缓存的区别?

协商缓存和强缓存是 HTTP 缓存机制中的两种不同的策略&#xff0c;用于减少网络请求并提高网页加载速度。它们之间的主要区别在于缓存的验证方式和服务器返回的响应头。 强缓存&#xff1a; 强缓存是基于过期时间&#xff08;Expires&#xff09;和缓存标识&#xff08;Cache…

Sklearn支持向量机

支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一种常用的分类算法&#xff0c;它可以用于解决二分类和多分类问题。在Python中&#xff0c;你可以使用Sklearn库来实现SVM。下面是一个简单的例子&#xff0c;展示了如何使用Sklearn进行SVM分类。 # 导入必要…

sourceComponent、onStatusChanged

sourceComponent 在 QML 的 Loader 元素中&#xff0c;sourceComponent 属性用于指定要加载和实例化的组件。与 source 属性不同&#xff0c;sourceComponent 属性直接引用一个已经定义好的组件&#xff0c;而不是通过文件路径或 URL 来加载。 以下是一个示例&#xff0c;展示…

SpringBoot+Vue项目报错(问题已解决)

1、错误日志 2、分析原因&#xff1a; JWT strings must contain exactly 2 period characters. Found: 0 JWT字符串必须包含2个句号字符。发现:0 分析&#xff1a;可以判断出大概可能是token格式出现了问题 3、参考 http://t.csdnimg.cn/hfEiY 4、检查后端代码是否出现问…

鸿蒙Socket通信示例(TCP通信)

前言 DevEco Studio版本&#xff1a;4.0.0.600 参考链接&#xff1a;OpenHarmony Socket 效果 TCPSocket 1、bind绑定本地IP地址 private bindTcpSocket() {let localAddress resolveIP(wifi.getIpInfo().ipAddress)console.info("111111111 localAddress: " …

WordPress网站启用cloudflare的CDN加速后,网站出现多重定向无法访问

这是一个使用Hostease的Linux虚拟主机的客户反馈的问题&#xff0c;Hostease的虚拟主机使用的也是cPanel面板&#xff0c;客户使用的是cPanel的softaculous安装的WordPress&#xff0c;但是在安装完成后&#xff0c;并且解析了域名之后&#xff0c;发现网站无法访问&#xff0c…

ChatGPT提问技巧——对抗性提示

ChatGPT提问技巧——对抗性提示 对抗性提示是一种允许模型生成能够抵御某些类型的攻击或偏差的文本的技术。这种技术可用于训练更健壮、更能抵御某些类型的攻击或偏差的模型。 要在 ChatGPT 中使用对抗性提示&#xff0c;应为模型提供一个提示&#xff0c;该提示的设计应使模…

Combination(n,m)

目录 描述 输入 输出 样例输入 样例输出 描述 input a string(no more than 10characters),select m char from the string,output the permutation characters in lexicographic order. 输入 input a string,and integer m; m less then the length of the string. if m0…

MERGE Into 的用法在ORACLE和高斯数据库上的差异

1.什么是MERGE Into MERGE INTO 是 SQL 中的一个语句&#xff0c;它用于将两个表的数据合并起来。如果记录已经存在&#xff0c;则更新该记录&#xff1b;如果记录不存在&#xff0c;则插入新记录。这种操作也被称为“upsert”&#xff08;更新插入&#xff09;。MERGE INTO …

Android Studio入门——页面跳转

1.工程目录 2.MainActivity package com.example.demo01;import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.TextView;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCo…

如何处理Android悬浮弹窗双击返回事件?

目录 1 前言 1.1 准备知识 1.2 问题概述 2 解决方案 3 代码部分 3.1 动态更新窗口焦点 3.2 窗口监听返回事件 3.3 判断焦点是否在窗口内部 3.4 窗口监听焦点移入/移出 1 前言 1.1 准备知识 1&#xff09;开发环境&#xff1a; 2D开发环境&#xff1a;所有界面或弹窗…

C语言-预处理指令-#ifdef xx #endif-用于检查宏是否被定义

文章目录 问题一&#xff1a;请你描述#ifdef XX #ifdef 语法和 #ifndef XX #endif 语法&#xff1f;&#xff08;区别:n&#xff09;ifdef 基本语法&#xff1a;ifndef基本语法&#xff1a; 问题二&#xff1a;阅读下面代码&#xff0c;看逻辑问题二输出&#xff1a; 问题三&am…

突破编程_C++_C++11新特性(模板的改进与细节)

1 模板右尖括号的改进 在 C11 之前&#xff0c;模板的解析和实例化过程中&#xff0c;右尖括号 > 的处理有时会导致一些意外的结果&#xff0c;特别是在嵌套模板或模板模板参数中。这是因为 C 编译器通常会试图“查看前方”来确定何时结束模板参数的列表&#xff0c;这有时…

【python】anaconda安装过程

【运行环境】Windows11 文章目录 一、anaconda下载二、anaconda安装三、环境变量配置四、测试环境变量是否配置成功五、总结 一、anaconda下载 1、输入网址“https://www.anaconda.com”进入Anaconda官网。 2、找到【Free Download】点击进入&#xff1a; 3、点击对应系统的…

Redis到底是单线程还是多线程!,【工作感悟】

无论你是做 Python&#xff0c;PHP&#xff0c;JAVA&#xff0c;Go 还是 C#&#xff0c;Ruby 开发的&#xff0c;都离不开使用 Redis。 大部分程序员同学工作中都有用到 Redis&#xff0c;但是只限于会简单的使用&#xff0c;对Redis缺乏整体的认知。 无论是在大厂还是在中小…

数据结构 day2

1:思维导图 2&#xff1a;计算结构体大小 3&#xff1a;大小端存储 &#xff08;1&#xff09;&#xff1a;数据溢出 1 #include <stdio.h>2 #include <string.h>3 #include <stdlib.h>4 int main(int argc, const char *argv[])5 {6 short a 0x1234;…

中国金融统计年鉴、中国保险统计年鉴、中国人口与就业统计年鉴、国民经济和社会发展公报、中国劳动统计年鉴

数据下载链接&#xff1a;百度云下载链接 统计年鉴是指以统计图表和分析说明为主&#xff0c;通过高度密集的统计数据来全面、系统、连续地记录年度经济、社会等各方面发展情况的大型工具书来获取统计数据资料。 统计年鉴是进行各项经济、社会研究的必要前提。而借助于统计年…

一文讲懂 C++ 类和对象(1)

0. 面向过程程序设计和面向对象程序设计的区别 面向对象程序设计往往关注的是怎么去做&#xff0c;是将解决问题的步骤分析出来&#xff0c;然后用函数把步骤一步一步实现&#xff0c;然后再依次调用就可以了。而面向对象是将构成问题的事物&#xff0c;分解成若干个对象&…

Windows达梦数据库(下载及使用)

解压安装包 点击最后一个文件 下一步 接受 下一步 下一步 下一步 点击初始化 开始