SpringBootWeb 篇-深入了解 Mybatis 概念、数据库连接池、环境配置和 Lombok 工具包

🔥博客主页: 【小扳_-CSDN博客】
❤感谢大家点赞👍收藏⭐评论✍

文件目录

        1.0 Mybatis 概述

        2.0 数据库连接池

        2.1 数据库连接池的主要作用包括

        2.2 如何切换数据库连接池?

        3.0 配置环境

        4.0 Lombok 工具包

        4.1 如何导入到项目中呢?

        5.0 application 属性文件数据库连接的信息与 pom XML文件的依赖


        1.0 Mybatis 概述

        MyBatis 是一个持久层框架,它简化了数据库操作和 SQL 语句的处理。MyBatis 通过 XML 或注解的方式配置 SQL 语句,将 Java 对象和数据库表进行映射,提供了一种方便的方式来进行数据库操作。

        MyBatis 是基于 JDBC 的持久层框架,它封装了 JDBC 的操作,简化了数据库访问的过程。

Mybatis 与 JDBC 的关系:

        1)SQL 语句处理:JDBC 需要在 Java 代码中编写 SQL 语句并进行参数设置,而 MyBatis 可以通过 XML 或注解的方式配置 SQL 语句,将 SQL 语句与 Java 代码分离,提高了代码的可维护性和可读性。

        2)数据库连接管理:JDBC 需要手动管理数据库连接的打开和关闭,而 MyBatis 可以通过配置文件自动管理数据库连接的打开和关闭,减少了开发人员的工作量。

        3)数据映射:JDBC 需要手动将查询结果映射为 Java 对象,而 MyBatis 提供了强大的映射功能,可以自动将查询结果映射为 Java 对象,简化了数据的处理和转换。

        4)缓存机制:JDBC 没有缓存机制,每次查询都需要访问数据库,而 MyBatis 提供了缓存机制,可以缓存查询结果,减少数据库访问次数,提高性能。

        2.0 数据库连接池

        数据库连接池是一种管理数据库连接的技术,它可以在应用程序启动时创建一定数量的数据库连接,并在需要时将这些连接分配给应用程序使用。使用数据库连接池可以减少数据库连接的创建和销毁次数,提高数据库操作的性能和效率。

        常见的四个数据库连接池:DBCP、C3P0、Hikari、Druid

        HikariCP:是一个高性能、轻量级的 JDBC 数据库连接池,被认为是目前性能最好的连接池之一。HikariCP 具有快速的启动时间、低资源消耗和优秀的性能表现,适合用于高并发、性能要求较高的项目。在 Springboot 项目中默认自带的连接池。

        Druid:是阿里巴巴开源的一个 JDBC 连接池和监控组件,集成了连接池、SQL 解析、SQL 监控等功能。Druid 具有强大的监控和管理功能,支持防火墙、密码加密、SQL 注入等安全特性,被广泛应用于企业级项目中。

        2.1 数据库连接池的主要作用包括

        1)资源重用:数据库连接池可以重用已经创建的数据库连接,减少了连接的创建和销毁开销,提高了系统的性能。

        2)连接管理:数据库连接池可以管理连接的分配和释放,确保连接的有效性和可靠性。

        3)连接池大小控制:数据库连接池可以根据应用程序的需求动态调整连接池的大小,避免连接过多或过少的情况发生。

        4)连接超时处理:数据库连接池可以设置连接的超时时间,当连接空闲时间超过设定的时间时,连接将被释放,避免连接过期或长时间占用的情况发生。

        2.2 如何切换数据库连接池?

        1)先引入相关依赖。比如,切换成 Druid 数据库连接池,需要先导入该数据库连接池的依赖。

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

        2)在Springboot 项目中 resources 包下的 applocation.properties 属性文件中配置数据库的连接信息。

spring.datasource.drive-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/db01?characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=123456

        3)运行结果,只要程序需要连接数据库,那么数据库连接池就会分配给当前程序。

 

        3.0 配置环境

        创建一个新的 Springboot 工程,选择引入对应的起步依赖(mybatis、mysql 驱动)和 application.properties 属性文件中引入数据库连接信息。

        1)引入 mybatis 依赖

    <!--mybatis的起步依赖-->
    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>2.2.2</version>
    </dependency>

        2)引入 mysql 驱动包依赖

    <!--mysql驱动包-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <scope>runtime</scope>
    </dependency>

        3)application.properties 属性文件中配置数据库连接的信息

spring.datasource.drive-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/db01?characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=123456

        需要注意的是,这里的密码和数据库名都是自定义的,不是完全相同的,要依据你当前要操作的数据库名和你当前的数据库密码。

        4)额外的配置,如控制日志打印在控制台上,配置 pplication.properties 属性文件即可。

#将日志打印在控制台上
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

 

        4.0 Lombok 工具包

        Lombok 是一个用于简化 Java 代码开发的工具包,它通过添加注解来减少样板代码的编写,提高代码的简洁性和可读性。使用 Lombok 可以减少一些常见的代码模板,如 getter 和 setter 方法、构造函数、equals 和 hashCode 方法等,从而简化 Java 开发过程。

提供的注解为:

        1)@Getter/@Setter:为所有的属性提供 get/set 方法。

        2)@ToString:会给类自动生成易读阅读的 ToString 方法。

        3)@EqualsAndHashCode:根据类所拥有的非静态字段自动重写 equals 方法和 hasCode 方法。

        4)@Data:提供了更综合的生成代码功能(包括:@Getter、@Setter、@ToString、@EqualsAndHashCode)

        5)@NoArgsConstructor:为实体类生成无参的构造器方法。

        6)@AllArgsConstructor:为实体类生成除了 static 修饰的字段之外带有各参数的构造器方法。

代码演示:

没有使用 Lombok 的实体类:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Objects;


public class Emp {
    private int id;
    private String username;
    private String password;
    private String name;
    private int gender;
    private int job;
    private LocalDate entrydate;
    private int deptId;
    private LocalDateTime createTime;
    private LocalDateTime updateTime;

    public Emp() {
    }

    public Emp(int id, String username, String password, String name, int gender, int job, LocalDate entrydate, int deptId, LocalDateTime createTime, LocalDateTime updateTime) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.name = name;
        this.gender = gender;
        this.job = job;
        this.entrydate = entrydate;
        this.deptId = deptId;
        this.createTime = createTime;
        this.updateTime = updateTime;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Emp emp = (Emp) o;
        return id == emp.id && gender == emp.gender && job == emp.job && deptId == emp.deptId && Objects.equals(username, emp.username) && Objects.equals(password, emp.password) && Objects.equals(name, emp.name) && Objects.equals(entrydate, emp.entrydate) && Objects.equals(createTime, emp.createTime) && Objects.equals(updateTime, emp.updateTime);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, username, password, name, gender, job, entrydate, deptId, createTime, updateTime);
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getGender() {
        return gender;
    }

    public void setGender(int gender) {
        this.gender = gender;
    }

    public int getJob() {
        return job;
    }

    public void setJob(int job) {
        this.job = job;
    }

    public LocalDate getEntrydate() {
        return entrydate;
    }

    public void setEntrydate(LocalDate entrydate) {
        this.entrydate = entrydate;
    }

    public int getDeptId() {
        return deptId;
    }

    public void setDeptId(int deptId) {
        this.deptId = deptId;
    }

    public LocalDateTime getCreateTime() {
        return createTime;
    }

    public void setCreateTime(LocalDateTime createTime) {
        this.createTime = createTime;
    }

    public LocalDateTime getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(LocalDateTime updateTime) {
        this.updateTime = updateTime;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", name='" + name + '\'' +
                ", gender=" + gender +
                ", job=" + job +
                ", entrydate=" + entrydate +
                ", deptId=" + deptId +
                ", createTime=" + createTime +
                ", updateTime=" + updateTime +
                '}';
    }
}

        看起来非常非常的臃肿,代码量还不少。

现在使用 Lombok 工具包进行代码演示:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDate;
import java.time.LocalDateTime;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Emp {
    private int id;
    private String username;
    private String password;
    private String name;
    private int gender;
    private int job;
    private LocalDate entrydate;
    private int deptId;
    private LocalDateTime createTime;
    private LocalDateTime updateTime;
    
}

        看起来非常的整洁,代码量不多。

        4.1 如何导入到项目中呢?

        引入 Lombok 的相关依赖即可。

Lombok 的依赖:

    <!--lombok-->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
    </dependency>

        5.0 application 属性文件数据库连接的信息与 pom XML文件的依赖

属性文件:

spring.datasource.drive-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/db01?characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=123456

#将日志打印在控制台上
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

#开启 mybatis 的驼峰命名自动映射开关
mybatis.configuration.map-underscore-to-camel-case=true

XML 文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>code_24_5_20_2</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>code_24_5_20_2</name>
  <url>http://maven.apache.org</url>

  <!--1、spring-boot-starter-parent自动引入springboot中最基础的组件,所有springboot项目都要依赖它进行构建-->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.4</version>
  </parent>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <!--2、引入springboot依赖,spring-boot-starter-web表示在项目中增加支持javaweb的功能,版本信息已经在parent中定义-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <!--mybatis的起步依赖-->
    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>2.2.2</version>
    </dependency>

    <!--mysql驱动包-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <scope>runtime</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>


    <!--lombok-->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
    </dependency>

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


  </dependencies>

  <!--3、定义springboot的打包方式,spring-boot-maven-plugin可以在打包时自动将所有类和资源打包成一个独立可运行的jar包-->
  <build>
    <!--打包指定名称-->
    <finalName>projectName</finalName>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>



</project>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

虹科Pico汽车示波器 | 免拆诊断案例 | 2017款奔驰E300L车行驶中发动机偶尔无法加速

故障现象 一辆2017款奔驰E300L车&#xff0c;搭载274 920发动机&#xff0c;累计行驶里程约为21万km。车主反映&#xff0c;该车行驶中发动机偶尔无法加速&#xff0c;且车辆发闯。 故障诊断 用故障检测仪检测&#xff0c;发动机控制单元&#xff08;N3/10&#xff09;中存储…

2024“电工杯”数学建模A题《园区微电网风光储协调优化配置》思路和代码分享

A 题&#xff1a;园区微电网风光储协调优化配置 这个题目整体就是一个优化问题&#xff0c;可以采用MatlabYalmipGurobi求解器进行求解&#xff0c;持续更新中&#xff0c;敬请关注&#xff01;&#xff01; 园区微电网由风光发电和主电网联合为负荷供电&#xff0c;为了尽量提…

在未来你将何去何从?

在数字化的浪潮中&#xff0c;信息技术行业无疑是推动全球经济和社会发展的重要动力。随着科技的不断迭代与进步&#xff0c;云计算、大数据、人工智能&#xff08;AI&#xff09;、物联网&#xff08;IoT&#xff09;、5G通信和区块链等技术已经深入到我们生活的每一个角落&am…

大模型日报|今日必读的 13 篇大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 1.MIT新研究&#xff1a;并非所有语言模型特征都是线性的 最近的研究提出了线性表征假说&#xff1a;语言模型通过操作激活空间中概念&#xff08;“特征”&#xff09;的一维表征来执行计算。与此相反&#xff0c;来…

计算机如何将输入文字显示出来的?渲染Image rendering

1.文字渲染的简单理解 渲染图像&#xff0c;可以理解为用cpu/gpu构造出原本不存在的图像。比如输入计算机的英文字符都是ASCII码&#xff0c;而我们在屏幕上看到显示的字符对应的应该是RGB/YUV的像素。计算机把ASCII字符转化成像素的过程就是文字渲染。又比如我们GPU用多个2D图…

BioMistral 7B——医疗领域的新方法,专为医疗领域设计的大规模语言模型

1. 概述 自然语言处理领域正在以惊人的速度发展&#xff0c;ChatGPT 和 Vicuna 等大型语言模型正在从根本上改变我们与计算机交互的方式。从简单的文本理解到复杂的问题解决&#xff0c;这些先进的模型展示了类似人类的推理能力。 特别是&#xff0c;BLOOM 和 LLaMA 等开源模…

【简单介绍下近邻算法】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

案例题(第一版)

案例题目 软件架构设计考点&#xff08;历年必考&#xff09; 软件架构设计通常在每年的第一题&#xff0c;该题必考 必备概念 必备概念即考试必须要默写出来的概念 概念描述软件架构风格是指描述特定软件系统组织方式和惯用模式。组织方式描述了系统的组成构件和这些构件的组…

力扣刷题---返回word中所有不重复的单词

当需要从一个数据集合中去除重复元素时&#xff0c;set是一个很好的选择。由于其不允许存储重复的元素&#xff0c;因此可以很容易地实现去重功能。这在处理原始数据或进行数据分析时特别有用。 题目&#xff1a; 给定一个字符串数组 words&#xff0c;请返回一个由 words 中所…

表现层框架设计之表现层设计模式_2.MVP模式

1.MVP模式 MVP&#xff08;Model-View-Presenter&#xff09;模式提供数据&#xff0c;View负责显示&#xff0c;Controller/Presenter负责逻辑的处理。MVP是从经典的模式MVC演变而来&#xff0c;它们的基本思想有相通的地方&#xff1a;Controller/Presenter负责逻辑的处理&am…

构建健壮的机器学习大数据平台:任务实现与数据治理的关键

随着数据驱动决策成为现代企业的核心&#xff0c;构建安全、可靠且可扩展的大数据平台变得至关重要。这样的平台不仅需要支持复杂的机器学习任务&#xff0c;还需要在数据质量、合规性和分发方面提供严格的控制。本文旨在探讨构建大型企业机器学习大数据平台时需要考虑的关键要…

【软件设计师】2018年的上午题总结

2018 2018上半年2018下半年 2018上半年 1.小阶向大阶对齐 2.吞吐率是最长流水段操作时间的倒数 3.ssh的端口号是22 4.s所发送的信息使用s的私钥进行数字签名&#xff0c;t收到后使用s的公钥验证消息的真实性 5.数据流分析是被动攻击方式 6.《计算机软件保护条例》是国务院颁布…

OSPF问题

.ospf 选路 域内 --- 1类&#xff0c;2类LSA 域间 --- 3类LSA 域外 --- 5类&#xff0c;7类LSA --- 根据开销值的计算规则不同&#xff0c;还分为类型1和类型2 ospf 防环机制 区域内防环&#xff1a;在同一OSPF区域内&#xff0c;所有路由器通过交换链路状态通告&#xff…

操作视频号小店,新手最关心的问题,一篇给你讲解清楚!

大家好&#xff0c;我是电商小V 新手去做视频号小店的时候&#xff0c;心里面一定是有很多疑问的&#xff0c;会反复咨询一些最关心的问题&#xff0c;因为他们要做好准备&#xff0c;以防后续做店过程中出现问题&#xff0c;其实新手关心的问题就那几个&#xff0c;咱们今天就…

第2天 搭建安全拓展_小迪网络安全笔记

1.常见搭建平台脚本使用: 例如 phpstudy IIS Nginx(俗称中间件): 什么是中间件: 中间件是介于应用系统和系统软件之间的一类软件&#xff0c;它使用系统软件所提供的基础服务&#xff08;功能&#xff09;&#xff0c;衔接网络上应用系统的各个部分或不同的应用&#…

我的文章分类合集目录

文章目录 Java相关基础常规问题类Docker类RabbitMQ类分库分表 网络工程相关路由交换、Cisco Packet TracerIP地址 前端相关数据库 Java相关 基础 Java开发规范、项目开发流程 SpringBoot整合MyBatis实现增删改查(简单,详细) SpringBoot整合MybatisPlus&#xff08;详细&#…

HAL库点LED灯

文章目录 一、创建CubeMX项目操作步骤1.STM32CubeMX创建工程2.选择芯片3.Pinout & Configuration配置4.Clock Configuration配置5.Project Manager配置 二、实验&#xff08;一&#xff09;LED流水灯1.Keil修改代码2.实验现象3.keil波形仿真 &#xff08;二&#xff09;2只…

春秋CVE-2022-23906

简介 CMS Made Simple v2.2.15 被发现包含通过上传图片功能的远程命令执行 (RCE) 漏洞。此漏洞通过精心制作的图像文件被利用。 正文 1.进入靶场2.进入登录界面&#xff0c;弱口令admin/123456 3.进入后台&#xff0c;文件上传点 4.上传一句话木马图片 5.复制图片&#xf…

【MYSQL】分数排名

表: Scores ---------------------- | Column Name | Type | ---------------------- | id | int | | score | decimal | ---------------------- id 是该表的主键&#xff08;有不同值的列&#xff09;。 该表的每一行都包含了一场比赛的分数。Score 是…

element-ui输入框和多行文字输入框字体不一样解决

element-ui的type"textarea"的字体样式与其他样式不同 <el-input type"textarea"></el-input> <el-input ></el-input>设置&#xff1a; .el-textarea__inner::placeholder {font-family: "Helvetica Neue", Helvetic…