MyBatis入门(JDBC规范,MyBatis,连接池,Lombok)【详解】
目录
一、JDBC规范【了解】
1. JDBC介绍
2. JDBC示例
3. JDBC的问题
二、MyBatis入门【重点】
1. Mybatis是什么
2. Mybatis使用步骤
3. Mybatis入门案例
1.创建SpringBoot工程
2.创建Mapper
3.功能测试
三、连接池【了解】
1. 什么是连接池
2. 有哪些数据库连接池
3. 如何在项目里使用Druid连接池
四、Lombok【重点】
1. Lombok介绍
2. Lombok用法
3. 使用示例
一、JDBC规范【了解】
1. JDBC介绍
Java DataBase Connectivity,是Java连接数据库,是Sun公司提供的的API规范,用于执行SQL语句。是一切Java操作数据库的基础技术。
Java里的“规范”,通常指的是接口
JDBC的作用:实现Java程序对不同数据库的统一访问
数据库驱动:由数据库厂商提供的,实现了JDBC接口规范的一些API实现类,这些类打成jar包,我们称为驱动包
-
操作什么数据库,就要有什么驱动包
-
如果要操作MySQL,就必须有MySQL驱动包:我们有maven坐标
<dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.33</version>
</dependency>
2. JDBC示例
准备数据库表
create database if not exists db3;
use db3;
create table user(id int unsigned primary key auto_increment comment 'ID',name varchar(100) comment '姓名',age tinyint unsigned comment '年龄',gender tinyint unsigned comment '性别, 1:男, 2:女',phone varchar(11) comment '手机号'
) comment '用户表';insert into user(id, name, age, gender, phone) VALUES (null,'白眉鹰王',55,'1','18800000000');
insert into user(id, name, age, gender, phone) VALUES (null,'金毛狮王',45,'1','18800000001');
insert into user(id, name, age, gender, phone) VALUES (null,'青翼蝠王',38,'1','18800000002');
insert into user(id, name, age, gender, phone) VALUES (null,'紫衫龙王',42,'2','18800000003');
insert into user(id, name, age, gender, phone) VALUES (null,'光明左使',37,'1','18800000004');
insert into user(id, name, age, gender, phone) VALUES (null,'光明右使',48,'1','18800000005');
准备实体类
public class User {private Integer id;private String name;private Integer age;private Integer gender;private String phone;//get 和 set方法,略//toString方法,略
}
JDBC示例
package com.itheima;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;public class DemoJdbc {public static void main(String[] args) throws Exception {//1. 注册驱动Class.forName("com.mysql.cj.jdbc.Driver");//2. 获取连接Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");//3. 创建SQL执行平台PreparedStatement pstmt = conn.prepareStatement("select * from user");//4. 执行SQLResultSet resultSet = pstmt.executeQuery();//5. 处理结果List<User> userList = new ArrayList<>();while (resultSet.next()) {User user = new User();int id = resultSet.getInt("id");user.setId(id);String name = resultSet.getString("name");user.setName(name);int age = resultSet.getInt("age");user.setAge(age);int gender = resultSet.getInt("gender");user.setGender(gender);String phone = resultSet.getString("phone");user.setPhone(phone);userList.add(user);}//6. 释放资源resultSet.close();pstmt.close();conn.close();userList.forEach(System.out::println);}
}
3. JDBC的问题
-
硬编码问题:数据库连接信息等等参数,都在Java源码里写死了。如果将来部署到生产环境后,需要调整配置,就不得不修改源码
Mybatis整合SpringBoot,把所有参数写到了配置文件,可以很方便的修改,而不用修改源码
-
操作太繁琐:执行一条SQL语句,要写十几行甚至几十行代码
Mybatis对JDBC做了再封装,执行一条SQL只需要很少的代码就能实现
-
性能不够强:每次操作数据库,Java程序都会与数据库建立连接、创建Connection对象;操作完成要释放关闭掉。在数据库操作高峰期,会有频繁的对象创建与销毁,非常消耗性能
Mybatis使用了连接池技术解决这个问题
二、MyBatis入门【重点】
1. Mybatis是什么
MySQL是持久层Dao层的框架,它用于简化JDBC的操作。
拓展:目前持久层的框架,常见的有:
Mybatis:目前国内最流行的Dao层框架
Hibernate:国内使用的少了,国外使用的很多。国内的一些老项目,可能使用的是Hibernate
SpringData JPA:对持久层的技术再封装,比如对Hibernate再封装,提供了更简便的操作
2. Mybatis使用步骤
-
准备数据库和表:前边JDBC里已经准备过了,略
-
准备一个maven工程:
创建一个SpringBoot工程,添加依赖、配置文件、引导类
-
使用Mybatis操作数据库
准备实体类:一张表通常要准备一个类。类的属性和表的字段要对应
修改配置文件:准备数据库的连接信息,包括驱动类名、地址、帐号、密码
编写一个接口,接口里写一个方法,方法上配置SQL语句
调用这个接口的方法,就可以了
3. Mybatis入门案例
1.创建SpringBoot工程
如果要创建空的maven工程,改造成SpringBoot工程,只需要三件事:
-
依赖:SpringBoot父工程坐标和起步依赖
<!-- SpringBoot父工程坐标 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.3</version></parent><dependencies><!--mybatis的起步依赖--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependency><!-- mysql驱动包, 刚刚发布的最新版本的驱动包--><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.33</version></dependency><!--springboot单元测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
-
配置:创建一个名称为
application.properties
的文件,放到src\main\resources
目录里 -
引导类:创建一个引导类,固定写法
@SpringbootApplication
public class 引导类名{public static void main(String[] args){SpringApplication.run(引导类.class, args);}
}
准备配置文件
修改application.properties
文件,添加如下配置:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/db3
spring.datasource.username=root
spring.datasource.password=root
准备实体类
前边JDBC部分已经创建了User类,直接复制过来使用即可
2.创建Mapper
package com.itheima.mapper;import com.itheima.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.util.List;/*** 1. Mapper接口,名称通常是XxxMapper,比如UserMapper、DeptMapper* 2. Mapper接口,上边加@Mapper注解,目的是让SpringBoot扫描这个注解,生成它的对象放到IoC容器里。类似于@Controller、@Service*/
@Mapper
public interface UserMapper {/*** 查询所有用户,得到List<user>*/@Select("select * from user")List<User> queryAll();
}
3.功能测试
注意:
-
单元测试类上需要加
@SpringBootTest
,然后才可以在测试类里使用@Autowired注入
package com.itheima;import com.itheima.mapper.UserMapper;
import com.itheima.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@SpringBootTest
public class MybatisTest {@Autowiredprivate UserMapper userMapper;@Testpublic void testQueryAll(){List<User> userList = userMapper.queryAll();userList.forEach(System.out::println);}
}
三、连接池【了解】
1. 什么是连接池
池化思想,用于提供有限数量的资源对象,重复利用,可以减少频繁创建对象与销毁对象的开销。
-
创建池子:在池子里初始化一堆对象,备用
-
使用的时候:如果需要使用,就从池子里取出一个进行使用;使用完成,再把对象交还到池子里
-
例如:线程池,数据库连接池
数据库连接池:
-
只需要池子里准备少量的Connection连接对象,就可以支持海量的数据库操作。因为这些对象是可以循环使用的
-
避免频繁创建Connection与数据库建立连接所造成的资源开销,从而大大提升性能
2. 有哪些数据库连接池
-
DBCP:比较早的连接池,早期Tomcat内置的有这种连接池
-
C3P0:使用相对广泛的连接池
-
Druid:德鲁伊,Alibaba提供的连接池技术,它以丰富的功能著称,除了连接池的基本功能,还具备数据库的监控能力
-
HikariCP:以性能著称的连接池,SpringBoot官方内置了HikariCP连接池,默认使用的
所有连接都有相同的使用规范:
-
所有连接池类都必须实现
javax.sql.DataSource
接口 -
从任意连接池里获取连接的方法,都是
getConnection()
3. 如何在项目里使用Druid连接池
1.添加druid的起步依赖
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.8</version>
</dependency>
2.配置一下,指定使用Druid连接池:只要修改application.properties文件
#没有指定使用哪种连接池,默认使用的是HikariCP
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_homework
#spring.datasource.username=root
#spring.datasource.password=root
#如果想指定使用Druid连接池
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.url=jdbc:mysql://localhost:3306/mybatis_homework
spring.datasource.druid.username=root
spring.datasource.druid.password=root
四、Lombok【重点】
1. Lombok介绍
Lombok是一个插件,目前已经被idea内置进去了。
用于在代码编译过程中,帮我们生成一些代码。从而让我们的代码更简洁
2. Lombok用法
-
添加lombok的依赖坐标
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency>
2.使用Lombok简化代码:通过注解实现的
-
@Data
:加在实体类上,Lombok会帮我们给实体类生成无参构造、所有成员变量的get和set方法、toString、equals、hashCode等等方法 -
@NoArgsConstructor
:加在实体类上,Lombok会帮我们生成无参构造 -
@AllArgsConstructor
:加在实体类上,Lombok会帮我们生成全参构造 -
@Getter
:生成get方法的。可以加在类上,也可以加在某个成员变量上 -
@Setter
:生成set方法的。可以加在类上,也可以加在某个成员变量上
3. 使用示例
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Emp {private Integer id;private String username;private String password;private String name;private Integer gender;private String image;private Integer job;
}
相关文章:

MyBatis入门(JDBC规范,MyBatis,连接池,Lombok)【详解】
目录 一、JDBC规范【了解】 1. JDBC介绍 2. JDBC示例 3. JDBC的问题 二、MyBatis入门【重点】 1. Mybatis是什么 2. Mybatis使用步骤 3. Mybatis入门案例 1.创建SpringBoot工程 2.创建Mapper 3.功能测试 三、连接池【了解】 1. 什么是连接池 2. 有哪些数据库连接池…...

Vue3--数据和方法
data 组件的 data 选项是一个函数。Vue 在创建新组件实例的过程中会自动调用此函数。 data选项通常返回一个对象,然后 Vue 会通过响应性系统将其包裹起来,并以 $data 的形式存储在组件实例中。 <!DOCTYPE html> <html lang"en"&g…...

网络编程面试题
一、什么是IP地址 1.IP地址是主机在网路中的唯一标识,,当主机从一个网络切换到另一个网络时,会更改IP地址,同样的IP地址也是路由器进行路由选择的标识 2.IP地址的分类 IPV4:采用4字节无符号整数存储 IPV6ÿ…...
移动端区分点击和长按
为了适配移动端,图片加入touchstart,touchend,并加了 e.preventDefault() 屏蔽默认菜单。 然而突然发现移动端图片的链接无响应了,PC端没问题。 而且功能需要区分点击和长按。 原生js如何判断移动端的tap,dbltap,lo…...

虚拟环境的激活
(此博客仅用于我记录虚拟环境的激活方法) 虚拟环境的激活命令: venv/Scripts/activate 在F:\git repo\Database-Course-Design 这个文件夹中启动命令行 这个文件夹中含有虚拟环境venv 输入命令venv/Scripts/activate,就得到下面的结果: 此时就激活了虚拟环境&…...

宏集案例 | 风电滑动轴承齿轮箱内多点温度采集与处理
前言 风力发电机组中的滑动轴承齿轮箱作为关键的传动装置,承担着将风能转化为电能的重要角色。齿轮箱内多点温度的实时监测可以有效地预防设备故障和性能下降。实时监测齿轮箱内多点温度可以有效地预防设备故障和性能下降。 为了确保风力发电机组的安全稳定运行&a…...
linux 16进制写入
1.简单用法[推荐] echo 001122334455 | xxd -r -ps > test // 6 个字节xxd // xxd 命令用于用二进制或十六进制显示文件的内容 -r // 把xxd的十六进制输出内容转换回原文件的二进制内容 -ps // 以 postscript的连续十六进制转储输出,这也叫做纯十六进…...
代码随想录算法训练营第60天| Leetcode 84.柱状图中最大的矩形
文章目录 Leetcode 84.柱状图中最大的矩形 Leetcode 84.柱状图中最大的矩形 题目链接:Leetcode 84.柱状图中最大的矩形 题目描述: 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状…...
编写一个简单的cmakelist.txt
文章目录 代码main.cpp头文件和子模块CMakeLists.txtsubModule/CMakeLists.txt顶层CMakeLists.txtCMakeList中的内容说明生成跨平台到Visual studio下上一篇提到了cmake的设计目的与作用,这一篇就来手动编写一个基本的cmakelist.txt,并演示一下如何生成不同平台的构建文件。 …...

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的零售柜商品检测软件(Python+PySide6界面+训练代码)
摘要:开发高效的零售柜商品识别系统对于智能零售领域的进步至关重要。本文深入介绍了如何运用深度学习技术开发此类系统,并分享了全套实现代码。系统采用了领先的YOLOv8算法,并与YOLOv7、YOLOv6、YOLOv5进行了性能比较,呈现了诸如…...
数据库的学习
数据库软件: 关系型数据库:Mysql Oracle SqlServer Sqlite 非关系型数据库:Redis NoSQL 1.数组,链表,文件,数据库 数组,链表:内存存放数据的方式&…...

matlab去除图片上的噪声
本问题来自CSDN-问答板块,题主提问。 如何利用matlab去除图片上的噪声? 一、运行效果图 左边是原图,右边是去掉噪音后的图片。 二、中文说明 中值滤波是一种常见的图像处理技术,用于去除图像中的噪声。其原理如下: 1. 滤波器移动:中值滤波器是一个小的窗口,在图像上移…...
C++超详细知识点(五):类的友元函数和友元类
目录 标题: 友元函数和友元类1. 友元函数2. 友元类 标题: 友元函数和友元类 友元函数和友元类是C中的概念,它们允许某些函数或类访问另一个类的私有成员。这样的访问权限超过了通常的私有和保护访问级别。请注意,友元类的使用应该…...
SOC设计:关于reset的细节
有如下几个信号 1、时钟:clk_top 2、总的reset信号:rstn_top 3、scan的reset信号:scan_rstn 4、软件复位信号:rstn_soft_sub 5、scan模式信号:scan_mode 6、reset bypass 信号:scan_rstn_sel 功能&a…...

支小蜜AI校园防欺凌系统可以使用在宿舍吗?
随着人工智能技术的快速发展,AI校园防欺凌系统已成为维护校园安全的重要手段。然而,关于这一系统是否适用于宿舍环境,仍存在一些争议和讨论。本文将探讨AI校园防欺凌系统在宿舍中的适用性,分析其潜在的优势与挑战,并提…...

外卖平台订餐流程架构的实践
当我们想要在外卖平台上订餐时,背后其实涉及到复杂的技术架构和流程设计。本文将就外卖平台订餐流程的架构进行介绍,并探讨其中涉及的关键技术和流程。 ## 第一步:用户端体验 用户通过手机应用或网页访问外卖平台,浏览菜单、选择…...

[AIGC] Spring Boot中的切面编程和实例演示
切面编程(Aspect Oriented Programming,AOP)是Spring框架的关键功能之一。通过AOP,我们可以将代码下沉到多个模块中,有助于解决业务逻辑和非业务逻辑耦合的问题。本文将详细介绍Spring Boot中的切面编程,并…...
各个类型和Json类型的相互转换
ObjectMapper类(com.fasterxml.jackson.databind.ObjectMapper)是Jackson的主要类,它可以帮助我们快速的进行各个类型和Json类型的相互转换。 对应maven: <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId&…...

C语言:操作符详解(下)
目录 一、逗号表达式二、下标访问[ ]、函数调用()1. [ ]下标引用操作符2.函数调用操作符 三、结构成员访问操作符1.结构体(1) 结构的声明(2) 结构体变量的定义和初始化 2.结构成员访问操作符(1)结构体成员的直接访问(2)结构体成员的间接访问 四、操作符的属性:优先级…...

电商场景下 ES 搜索引擎的稳定性治理实践
继上文在完成了第一阶段 ES 搜索引擎的搭建后,已经能够实现对千万级别的商品索引的读写请求的支持。目前,单机房读流量在 500~1000 QPS 之间,写流量在 500 QPS 左右。 但随着业务的发展,问题也逐渐开始暴露࿰…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...

STM32标准库-ADC数模转换器
文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”:输入模块(GPIO、温度、V_REFINT)1.4.2 信号 “调度站”:多路开关1.4.3 信号 “加工厂”:ADC 转换器(规则组 注入…...