本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:本项目演示了如何在SpringBoot 2.6.4环境中整合MyBatis框架,使用PostgreSQL数据库,并结合JUnit5进行单元测试。通过详细配置 pom.xml 文件及实际操作数据库,我们展示了完整的Java Web开发流程,并包括了数据访问层的实现以及全面的单元测试。
SpringBoot 2.6.4 MyBatis PostgreSQL JUnit5 代码示例

1. SpringBoot 2.6.4版本集成MyBatis框架

1.1 SpringBoot与MyBatis的集成概述

SpringBoot是一个基于Spring的全功能、独立的、生产级别的Spring应用程序,提供了快速搭建和运行Spring应用的方法。MyBatis是一个强大的SQL映射框架,通过简单的Java接口和配置文件,就可以使用数据库的API。SpringBoot 2.6.4版本集成了MyBatis,为Java Web开发者提供了一个更为高效和灵活的解决方案。

1.2 开始集成MyBatis

集成MyBatis到SpringBoot项目中,首先需要在项目的 pom.xml 文件中添加MyBatis和数据库驱动的依赖。举例如下:

<dependencies>
    <!-- 添加SpringBoot的启动器 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <!-- 添加MyBatis的启动器 -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.4</version>
    </dependency>
    <!-- 添加数据库驱动 -->
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.2.12</version>
    </dependency>
</dependencies>

1.3 配置MyBatis

配置文件 application.properties application.yml 需要指定MyBatis的相关设置,例如:

# MyBatis配置
mybatis.mapper-locations=classpath*:mapper/*.xml
mybatis.type-aliases-package=com.example.demo.model

这个配置指定了MyBatis的Mapper XML文件的路径和别名包的路径。之后,就可以创建Mapper接口和对应的XML文件,实现数据库操作了。

以上就是SpringBoot集成MyBatis框架的基本流程,它不仅可以简化数据库操作,还能够更加直观地管理SQL语句,使得Java Web开发更加高效。

2. PostgreSQL数据库配置与操作

2.1 PostgreSQL数据库的安装与配置

2.1.1 PostgreSQL的安装过程

PostgreSQL的安装过程在不同的操作系统中可能会有所不同,但是安装步骤基本类似,主要包括下载安装包、解压安装包、初始化数据库和启动服务等步骤。以下是在Ubuntu系统中安装PostgreSQL的示例步骤:

首先,通过命令行下载PostgreSQL的安装包:

wget https://ftp.postgresql.org/pub/source/v13.2/postgresql-13.2.tar.gz

然后解压安装包:

tar -xzf postgresql-13.2.tar.gz

解压完成后,进入解压得到的目录:

cd postgresql-13.2

进行编译安装前的配置:

./configure --prefix=/usr/local/postgres

编译安装:

make
sudo make install

安装完成后初始化数据库:

sudo /usr/local/postgres/bin/initdb -D /usr/local/postgres/data

最后,启动PostgreSQL服务:

sudo /usr/local/postgres/bin/pg_ctl -D /usr/local/postgres/data -l logfile start

2.1.2 PostgreSQL的配置方法

PostgreSQL的配置文件通常位于数据目录下的 postgresql.conf 文件中。编辑该文件,可以根据需要调整数据库的配置参数,比如连接参数、存储参数、性能参数等。

例如,修改监听地址和端口:

listen_addresses = '*'
port = 5432

此外,还可以配置密码认证方式、内存分配参数等。例如,配置密码验证方式为密码:

password_encryption = scram-sha-256

内存分配参数:

shared_buffers = 1GB
work_mem = 10MB

修改完毕后,重启PostgreSQL服务使配置生效。

2.2 PostgreSQL数据库的基本操作

2.2.1 PostgreSQL的基本SQL语句

PostgreSQL数据库使用SQL(Structured Query Language)语言进行数据库操作。以下是一些基本的SQL语句示例:

创建一个新的数据库:

CREATE DATABASE mydatabase;

连接到指定数据库:

\c mydatabase

创建一个新表:

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100)
);

插入新记录:

INSERT INTO users (username, email) VALUES ('johndoe', 'johndoe@example.com');

查询记录:

SELECT * FROM users WHERE username = 'johndoe';

更新记录:

UPDATE users SET email = 'john.doe@example.com' WHERE username = 'johndoe';

删除记录:

DELETE FROM users WHERE username = 'johndoe';

2.2.2 PostgreSQL的数据类型和函数

PostgreSQL提供了多种数据类型,可以满足各种应用场景的需求。例如:

  • INT: 用于存储整数。
  • VARCHAR(n): 用于存储可变长度的字符串,最多n个字符。
  • DATE: 用于存储日期值。

除了数据类型,PostgreSQL还提供了丰富的函数来处理数据:

  • NOW(): 返回当前的日期和时间。
  • COUNT(column_name): 返回某列的记录数。
  • SUM(column_name): 返回某列的总和。

例如,计算 users 表中所有用户的总数:

SELECT COUNT(*) FROM users;

获取所有用户的平均年龄(假设表中有 age 列):

SELECT AVG(age) FROM users;

2.3 PostgreSQL数据库的高级操作

2.3.1 PostgreSQL的事务和锁机制

PostgreSQL的事务控制提供了四个关键的命令: BEGIN , COMMIT , ROLLBACK , SAVEPOINT 。它们能够帮助用户保证数据的一致性和完整性。

例如,开始一个事务:

BEGIN;

执行一系列操作…

如果所有操作都正确无误,提交事务:

COMMIT;

如果遇到错误,回滚事务:

ROLLBACK;

此外,PostgreSQL通过锁机制来控制并发事务的访问,提供了行级锁、表级锁等。例如, FOR UPDATE 用于锁定选中行:

SELECT * FROM users WHERE id = 1 FOR UPDATE;
2.3.2 PostgreSQL的索引和性能优化

索引是数据库性能优化的重要工具,PostgreSQL支持多种类型的索引,包括B-tree, Hash, GIN, GiST等。

创建索引可以使用CREATE INDEX命令,例如为 users 表的 username 列创建一个B-tree索引:

CREATE INDEX idx_username ON users(username);

索引能够显著提高查询性能,但是也需要权衡其对插入、更新和删除操作的影响。

PostgreSQL还提供了其他性能优化的策略,比如调整工作内存设置、优化查询语句等。需要注意的是,所有的优化措施都应根据实际应用场景进行调整。

第二章小结

本章介绍了PostgreSQL数据库的安装与配置、基本操作以及高级操作。通过学习PostgreSQL的安装过程和配置方法,开发者可以为应用部署稳定可靠的数据库环境。基本SQL语句和函数的介绍帮助用户进行数据的增删改查操作,而事务和锁机制是保证数据库操作一致性的重要手段。最后,索引和性能优化是提高数据库性能的关键策略。掌握这些知识对于维护高效、安全的数据库至关重要。

3. Maven依赖管理( pom.xml

Maven是一个项目管理工具,它主要用来帮助我们构建项目、文档化项目、管理项目依赖等。在现代Java Web开发中,Maven扮演着不可或缺的角色,尤其是在项目依赖管理方面。它通过 pom.xml 文件来控制项目的构建、报告和文档生成过程。

3.1 Maven依赖管理的基本概念

3.1.1 Maven依赖的导入和导出

Maven的核心是它的依赖管理系统,它允许开发者声明项目所需的所有依赖项。这些依赖项通过 groupId artifactId version 三个基本坐标进行唯一标识。在 pom.xml 文件中,你可以通过 <dependencies> 标签来管理这些依赖。

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.6.4</version>
  </dependency>
</dependencies>

在上面的例子中,声明了对Spring Boot Web Starter的依赖。Maven将解析这个依赖,并自动下载所需的jar文件及其依赖。

3.1.2 Maven依赖的版本控制

在实际开发中,保持依赖版本的更新是非常重要的。Maven允许我们使用版本范围或者使用变量来控制依赖的版本。例如,使用 <properties> 标签设置一个属性变量,并在依赖中使用它。

<properties>
  <spring.boot.version>2.6.4</spring.boot.version>
</properties>

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>${spring.boot.version}</version>
  </dependency>
</dependencies>

这种方式使得版本的更新变得非常容易,只需更改一个属性值即可。

3.2 Maven依赖管理的高级应用

3.2.1 Maven仓库的配置和使用

Maven仓库是用于存储所有Maven项目所需构建的插件和依赖的存储库。它分为三种类型:本地仓库、中央仓库和远程仓库。配置Maven仓库时,通常只需要在 settings.xml 文件中指定本地仓库的位置。

<settings>
  <localRepository>/path/to/local/repo</localRepository>
</settings>

pom.xml 文件中,你可以指定镜像来覆盖对中央仓库的访问,或者配置私有仓库用于存放公司内部或私有的依赖。

3.2.2 Maven依赖冲突的解决方法

当项目中存在多个依赖,且这些依赖之间存在冲突时,Maven需要采取措施解决这些冲突。默认情况下,Maven将选择首先声明的依赖项。

<dependency>
  <groupId>org.example</groupId>
  <artifactId>artifact</artifactId>
  <version>1.0</version>
  <exclusions>
    <exclusion>
      <groupId>org.gnu</groupId>
      <artifactId>conflicting-artifact</artifactId>
    </exclusion>
  </exclusions>
</dependency>

在上面的代码中,我们排除了一个特定的冲突依赖。此外,还可以使用Maven的依赖调解机制,或者使用 <dependencyManagement> 标签来控制依赖版本。

Maven的依赖管理功能使得Java项目的构建和依赖配置变得简单而高效,它避免了复杂的依赖冲突问题,提高了开发效率,并为持续集成提供了便利。通过掌握Maven的这些基础与高级特性,开发者可以更加专注于业务逻辑的实现,而不必担心构建和依赖管理的繁琐问题。

4. SpringBoot配置文件( application.properties/yml

4.1 SpringBoot配置文件的基本使用

4.1.1 application.properties/yml的配置方法

在Spring Boot项目中,配置文件 application.properties application.yml 是开发者用于管理应用程序配置的常用方式。它们允许开发者修改框架和应用的默认设置,以适应不同的部署环境和业务需求。

  • application.properties : 传统的属性配置文件,使用键值对的方式定义属性,易于阅读和编辑。
  • application.yml : YAML格式的配置文件,结构清晰,支持层次结构,使得复杂配置更加易于管理。

配置文件通常位于项目的 src/main/resources 目录下。Spring Boot会自动加载这些文件中的配置,并将属性值注入到Spring环境中,可以通过 @Value 注解或 @ConfigurationProperties 注解使用这些属性值。

例如,定义一个数据源的URL:

# application.properties
spring.datasource.url=jdbc:postgresql://localhost:5432/mydatabase

或者使用YAML格式:

# application.yml
spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/mydatabase

4.1.2 SpringBoot的配置类和配置属性

除了在 application.properties/yml 中配置外,Spring Boot也支持使用配置类来管理配置。通过创建一个带有 @Configuration 注解的类,并使用 @Bean 注解方法来创建Bean,可以实现更复杂的配置逻辑。

@Configuration
public class AppConfig {

    @Value("${some.property}")
    private String someProperty;

    @Bean
    public SomeService someService() {
        SomeService service = new SomeService();
        service.setSomeProperty(someProperty);
        return service;
    }
}

配置属性也可以通过 @ConfigurationProperties 注解与配置文件结合使用,将一组属性自动绑定到一个Bean的属性上。这通常用于配置复杂对象。

@ConfigurationProperties(prefix = "some")
@Component
public class SomeProperties {

    private String propertyOne;
    private int propertyTwo;

    // Getters and setters...
}

配置文件中的属性:

# application.properties
some.propertyOne=value1
some.propertyTwo=2

或者YAML格式:

# application.yml
some:
  propertyOne: value1
  propertyTwo: 2

4.2 SpringBoot配置文件的高级应用

4.2.1 SpringBoot的环境配置和属性覆盖

Spring Boot提供了灵活的配置环境,可以通过命令行参数、系统属性或环境变量来覆盖配置文件中的值。这种覆盖机制在部署应用程序到不同环境时非常有用。

  • 命令行参数 :在启动应用程序时,可以通过命令行传递参数来覆盖配置值。
java -jar myapp.jar --some.property=value
  • 系统属性和环境变量 :操作系统级别的属性和环境变量也可以用来覆盖配置值。
export SOME_PROPERTY=value
java -jar myapp.jar
  • 配置文件激活 :可以通过激活不同的配置文件(如 application-dev.properties application-prod.yml )来使用不同的配置集。
# application-dev.properties
spring.profiles.active=dev

4.2.2 SpringBoot的配置文件加密和安全

对于敏感信息(如密码、密钥等),Spring Boot提供了加密和解密的方法,以保护配置信息的安全。可以使用Jasypt(Java Simplified Encryption)等库来实现配置文件的加密和解密。

加密配置信息:

encrypt my.property=someValue --algorithm=encyrptedAlgorithm --password=somePassword

配置文件中使用加密后的属性:

# application.properties
my.property: ENC(encryptedValue)

然后在Spring Boot应用中,通过定义 StringValueEncryptor Bean来解密配置值。

@Bean
public StringValueEncryptor stringEncryptor() {
    StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
    encryptor.setPassword("somePassword");
    return encryptor;
}

通过使用Spring Boot的配置文件,可以灵活地管理和控制应用程序的行为。从基本使用到环境配置和属性覆盖,再到配置文件的加密和安全,Spring Boot都提供了强大的支持,使得开发者可以在不同场景下更安全、更有效地管理应用配置。

5. MyBatis Mapper接口实现与SQL映射

5.1 MyBatis Mapper接口的基本实现

5.1.1 MyBatis Mapper接口的定义和使用

MyBatis的Mapper接口是与数据库交互的接口层,它定义了与数据库进行交互所需的方法。每个接口方法对应数据库中的一个操作,如查询、插入、更新或删除数据。MyBatis的动态代理机制会在运行时自动为这些接口生成动态代理对象,通过代理对象调用这些方法时,MyBatis会根据方法的名称、参数以及注解来生成相应的SQL语句,并执行数据库操作。

实现步骤如下:

  1. 定义Mapper接口

在项目中的Mapper包下定义一个接口,接口中的方法名应与数据库操作对应,可以使用注解来指定具体的SQL语句,如 @Select @Insert @Update @Delete 等。

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM users WHERE id = #{id}")
    User getUserById(Integer id);

    @Insert("INSERT INTO users(name, age) VALUES(#{name}, #{age})")
    int insertUser(User user);

    @Update("UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}")
    int updateUser(User user);

    @Delete("DELETE FROM users WHERE id = #{id}")
    int deleteUserById(Integer id);
}
  1. 使用Mapper接口

在业务逻辑层中注入Mapper接口的实例,并调用接口方法,MyBatis会处理具体的数据库操作。

@Service
public class UserService {
    private final UserMapper userMapper;

    @Autowired
    public UserService(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    public User getUserDetails(Integer userId) {
        return userMapper.getUserById(userId);
    }
}

5.1.2 MyBatis的SQL映射文件和注解

在MyBatis中,可以通过两种方式来配置SQL映射:SQL映射文件和注解。SQL映射文件通常位于resources目录下的mapper文件夹中,每个映射文件对应一个Mapper接口。而注解则直接写在Mapper接口的方法上。

SQL映射文件示例:

<mapper namespace="com.example.mapper.UserMapper">
    <select id="getUserById" resultType="com.example.model.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
    <insert id="insertUser" parameterType="com.example.model.User">
        INSERT INTO users(name, age) VALUES(#{name}, #{age})
    </insert>
    <update id="updateUser" parameterType="com.example.model.User">
        UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}
    </update>
    <delete id="deleteUserById" parameterType="int">
        DELETE FROM users WHERE id = #{id}
    </delete>
</mapper>

通过命名空间 namespace 将映射文件与对应的Mapper接口关联,映射文件中定义的每个SQL语句对应接口中声明的一个方法。

在使用注解时,通过简单的注解直接在接口方法上声明SQL语句,这种方式使得代码更加简洁,减少了配置文件的数量。

总结 :Mapper接口是MyBatis框架中与数据库交互的核心组件。通过接口定义与数据库表的操作,MyBatis能够利用动态代理机制简化数据库操作代码。同时,SQL映射文件和注解提供了灵活的SQL配置方式,使得开发者可以根据项目需求灵活地管理SQL语句。在接下来的章节中,我们将讨论Mapper接口的高级应用,包括动态SQL、缓存机制和事务管理等。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:本项目演示了如何在SpringBoot 2.6.4环境中整合MyBatis框架,使用PostgreSQL数据库,并结合JUnit5进行单元测试。通过详细配置 pom.xml 文件及实际操作数据库,我们展示了完整的Java Web开发流程,并包括了数据访问层的实现以及全面的单元测试。


本文还有配套的精品资源,点击获取
menu-r.4af5f7ec.gif

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐