0


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

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

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>

标签: mybatis java-ee java

本文转载自: https://blog.csdn.net/Tingfeng__/article/details/139097158
版权归原作者 小扳 所有, 如有侵权,请联系我们删除。

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

还没有评论