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 左右。 但随着业务的发展,问题也逐渐开始暴露࿰…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...