Spring Boot项目开发全过程-集成篇

Spring Boot项目开发全过程-集成篇

以下内容仅是对于部分流行技术的集成,并不全面,但掌握这些流行技术的集成方法,其他的就可以照虎画猫, 从而全面掌握Spring Boot集成方法,此方法对于框架本身集成的技术也同样适用。


集成 MyBatis

什么是MyBatis?
MyBatis 是一个Java持久层框架,它提供了简便易用的方法来操作数据库。MyBatis 通过使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射到数据库中的记录。

在Spring Boot中集成MyBatis通常涉及以下几个步骤:

1.添加依赖

<!-- mybatis启动器 -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.2</version>
</dependency>

<!-- mysql连接器 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.13</version>
    <scope>runtime</scope>
</dependency>

<!-- mybatis生成器  -->
<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.2</version>
</dependency>

2.配置数据源

application.propertiesapplication.yml文件中配置数据源,包括数据库驱动、URL、用户名和密码。
例如,使用application.properties配置MySQL数据源可能如下所示:

# 数据库配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456

创建实体类(也称为POJOs或JavaBeans)是推荐的做法,但并不是强制性的。实体类在MyBatis中代表数据库表中的行,通常包含与表列相对应的属性以及相应的getter和setter方法。使用实体类可以提高开发效率,因为它们提供了一种类型安全的方式来处理数据库操作的结果。

3.启用MyBatis映射器扫描

确保SpringBoot能够扫描到MyBatis的Mapper接口。可以用@MapperScan注解指定接口所在的包。

在我的主应用类或配置类上添加@MapperScan:

@SpringBootApplication
@MapperScan("com.example.project.mapper")//指向我的mapper接口所在的包
public class YourApplication{
    public static void main(String[] args){
        SpringApplication.run(YourApplication.class,args);
    }
}

4.定义数据库操作(映射器)

MyBatis 允许你通过两种方式来定义数据库的操作:使用 XML 映射文件或者使用注解。这两种方式可以根据项目的需要和开发者的偏好来选择。

使用 XML 映射文件
  1. 创建 Mapper 接口

    首先,你需要创建一个接口,该接口定义了将要执行的数据库操作。例如:

    package com.example.mapper;
    
    public interface UserMapper {
        User selectUser(int id);
    }
    
  2. 创建 XML 映射文件

    然后,你需要为这个接口创建一个 XML 映射文件。文件名通常是接口的名称加上 .xml 后缀,并放在与接口相同的包路径下。这个文件定义了具体的 SQL 语句和它们如何映射到接口方法。例如:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.example.mapper.UserMapper">
        <select id="selectUser" parameterType="int" resultType="com.example.domain.User">
            SELECT * FROM users WHERE id = #{id}
        </select>
    </mapper>
    

在这个例子中,selectUser 方法会执行一个 SQL 查询来返回一个 User 对象。

使用注解

如果你倾向于使用注解,那么可以省略 XML 映射文件,而是直接在 Mapper 接口的方法上使用 MyBatis 的注解来指定 SQL 语句。例如:

package com.example.mapper;

import org.apache.ibatis.annotations.Select;

public interface UserMapper {

    @Select("SELECT * FROM users WHERE id = #{id}")
    User selectUser(int id);
}

在这种情况下,@Select 注解告诉 MyBatis 执行的 SQL 语句是什么,而参数 #{id} 是一个占位符,它将被方法参数 id 的值所替代。

如果你使用的是XML方式定义MyBatis的SQL映射,则需要告诉MyBatis这些XML文件的位置。在application.propertiesapplication.yml中设置mybatis.mapper-locations属性。

# MyBatis 配置
mybatis.mapper-locations=classpath:mapper/*.xml

6.开始使用

创建完成后,你可以在服务层注入Mapper接口,并开始使用它进行数据库操作。

@Service
public class UserService{
    private final UserMapper userMapper;

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

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


集成 JDBC

JdbcTemplate 是 Spring 对数据库的操作在 jdbc 上面做了深层次的封装。使用 Spring 的注入功能,可以把 DataSource 注册到 JdbcTemplate 之中。

JdbcTemplate 主要提供以下五类方法:

  • execute:用于执行任何 SQL 语句,一般用于执行 DDL 语句;
  • update:用于执行新增、修改、删除等语句;
  • batchUpdate:用于执行批处理相关语句;
  • query 和 queryForXXX:用于执行查询相关语句;
  • call:用于执行存储过程、函数相关语句;

1.添加 POM 依赖

<!-- JDBC依赖(JDBCTemplate) -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
 
<!-- MySQL JDBC Driver -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.13</version>
    <scope>runtime</scope>
</dependency>

2.配置数据源

application.propertiesapplication.yml配置文件中,配置数据源信息,例如对于MySQL数据库:

# application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/数据库名?serverTimezone=UTC
spring.datasource.username=用户名
spring.datasource.password=密码
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

Spring Boot会使用这些配置信息自动配置数据源和JDBC模板(JdbcTemplate)。

创建实体类(也称为POJOs或JavaBeans)是推荐的做法,但并不是强制性的。实体类代表数据库表中的行,通常包含与表列相对应的属性以及相应的getter和setter方法。使用实体类可以提高开发效率,因为它们提供了一种类型安全的方式来处理数据库操作的结果。

3.注入JdbcTemplate

编写 service 类,在该类中注入 JdbcTemplate,然后使用 JdbcTemplate 实现数据库查询。代码如下:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

@Service
public class YourService {
    // 注入JdbcTemplate 实例
    @Autowired
    private JdbcTemplate jdbcTemplate;

    public void someDatabaseOperation() {
        String sql = "SELECT * FROM your_table";
        List<Map<String, Object>> results = jdbcTemplate.queryForList(sql);
        // 处理查询结果
    }
}

4. 执行数据库操作

现在可以使用JdbcTemplate来执行SQL查询或更新。JdbcTemplate提供了多种方法来简化CRUD(创建、读取、更新、删除)操作的执行。


集成 MongoDB

MongoDB是一个开源的文档型数据库,属于NoSQL数据库系列,旨在处理大规模的数据集合和提供高性能、高可用性以及易扩展性的数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 json 的 bson 格式,因此可以存储比较复杂的数据类型。

MongoDB 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

1. 添加依赖

<dependencies>
    <!-- Spring Boot MongoDB Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
</dependencies>

2.配置MongoDB

# MongoDB URI
spring.data.mongodb.uri=mongodb://用户名:密码@localhost:27017/数据库名
# 如果没有启用身份验证,可以更简单:
spring.data.mongodb.database=数据库名
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017

3.创建文档类

在Spring Data MongoDB中,一个文档通常由一个Java类表示,该类用@Document注解标记,字段映射到文档的键值对。

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document
public class User {
    @Id
    private String id;

    private String name;
    private String email;

    // 构造函数、getter和setter
}

4.定义Respository接口

Spring Data提供了一种简化数据访问的方法,即通过自定义Respository接口扩展MongoRepository接口。

import org.springframework.data.mongodb.repository.MongoRepository;

public interface UserRepository extends MongoRepository<User, String> {
    // 这里可以定义查询方法,Spring Data MongoDB会自动实现它们
}

5. 使用Repository

你现在可以在你的服务层中注入UserRepository,执行数据库操作了,如保存文档、查询文档等。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public void addUser(User user) {
        userRepository.save(user);
    }

    public List<User> findAllUsers() {
        return userRepository.findAll();
    }

    // 其他业务逻辑
}

集成 Redis

Redis(Remote Dictionary Server)是一个开源的高性能的键值对数据库。它通常被用作数据结构服务器,因为键(key)可以包含字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)、位图(bitmaps)、超日志(hyperloglogs)或地理空间索引(geospatial indexes)等各种类型的值。

1.添加依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2.配置Redis

resources/application.yml

spring:
  # Redis配置
  redis:
    # Redis数据库索引(默认为0)
    database: 0
    # Redis主机地址
    host: 127.0.0.1
    # redis端口
    port: 6379

3.定义RedisTemplate(可选,因为有默认配置的RedisTemplate)

使用 @Configuration 注解创建一个 RedisTemplate 实例,代码如下:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        // 使用StringRedisSerializer来序列化和反序列化redis的key值
        template.setKeySerializer(new StringRedisSerializer());
        // 设置value的序列化器
        // 这里可以根据情况选择合适的序列化器
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());

        return template;
    }
}

使用 RedisTemplate 进行对象存储时,需要使存储对象实现 Serializable 接口,这样才能够成功将对象进行序列化。
spring-data-redis 提供了多种 Serializer 策略,这对使用 jedis 的开发者而言,实在是非常便捷。spring-data-redis 提供了4种内置的 Serializer:

JdkSerializationRedisSerializer:使用 JDK 的序列化手段 (Serializable 接口,ObjectInputStrean,ObjectOutputStream),数据以字节流存储

StringRedisSerializer:字符串编码,数据以 String 存储

JacksonJsonRedisSerializer:json 格式存储

OxmSerializer:xml 格式存储

由于本实例仅仅用于演示,因此上面的实例将简单将字符串存储到 Redis,序列化对象使用 StringRedisSerializer。

4.使用RedisTemplate

由于前面已经创建了 RedisTemplate 实例,可以使用 @Autowired 注解注入 RedisTemplate 实例。代码如下:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

@Component
public class RedisExample {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    public void setKeyValue(String key, Object value) {
        redisTemplate.opsForValue().set(key, value);
    }

    public Object getValue(String key) {
        return redisTemplate.opsForValue().get(key);
    }
}

5.访问和操作Redis

一旦配置好RedisTemplate,你就可以在应用中自由地使用它来进行各种Redis操作,包括基本的CRUD操作、发布/订阅消息以及其他高级功能。


总结

以下对以上集成的通用性的总结,从而为开发者更好的继承其他技术提供思路。

1. 业务需求

在集成新技术前,清晰地定义为什么需要这项技术,它要解决什么问题,以及它与项目目前技术栈的兼容性。

2. 技术学习

  • 理解新技术: 阅读文档,了解该技术的核心概念、优缺点和最佳实践。
  • 社区探讨: 查看社区论坛、Stack Overflow等地的讨论,了解常见的问题和解决方案。

3. 添加依赖

通过Maven的pom.xml或Gradle的build.gradle文件添加所需技术的依赖。确保依赖的版本与Spring Boot版本兼容。

4. 基础配置

  • 配置文件: 更新application.propertiesapplication.yml,添加所需的配置属性。
  • 初始化代码: 如果必要,编写配置类或初始化代码以集成新技术。

5. 开发示例

实现一个简单的示例,确保新技术能在项目中正常运行。这可以帮助理解如何在项目中使用该技术。

6. 编写测试

添加集成测试和单元测试以验证新技术的集成是否符合预期。

7.开始使用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值