🔥博客主页: 【小扳_-CSDN博客】
❤感谢大家点赞👍收藏⭐评论✍
文件目录
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>