Spring Boot实战:深入理解@Service与@Mapper注解

1. @Service 注解

@Service 是Spring框架提供的一个注解,用于标记类为业务逻辑层的组件。当类上标注了@Service注解后,Spring容器会自动扫描并创建该类的一个实例(即Bean),这样我们就可以在其他地方通过自动装配(Autowired)的方式注入这个Bean。

示例代码:

假设我们有一个用户服务类UserService,它包含了一些与用户相关的业务逻辑方法。

import org.springframework.stereotype.Service;

@Service
public class UserService {
   

    // 假设有一个userRepository用于数据库操作
    private final UserRepository userRepository;

    // 通过构造器注入UserRepository
    public UserService(UserRepository userRepository) {
   
        this.userRepository = userRepository;
    }

    public User findUserById(Long id) {
   
        return userRepository.findById(id)
                             .orElseThrow(() -> new UserNotFoundException("User with id " + id + " not found"));
    }
    
    // 其他业务逻辑方法...
}

在上面的代码中,UserService类上标注了@Service注解,这意味着Spring容器会管理它的生命周期,并且我们可以在其他地方通过@Autowired来注入这个服务。

2. @Mapper 注解(通常与MyBatis一起使用)

@Mapper注解通常不是Spring框架的一部分,而是MyBatis框架提供的。在Spring Boot项目中,如果集成了MyBatis,那么@Mapper注解用于标记接口,使得接口可以被MyBatis扫描到并生成对应的代理实现类。这样我们就可以通过这个接口来调用数据库的操作。

示例代码:

假设我们有一个用户映射器接口UserMapper,它定义了与数据库交互的方法。

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.Optional;

@Mapper
public interface UserMapper {
   
    
    @Select("SELECT * FROM users WHERE id = #{id}")
    Optional<User> findById(Long id);
    
    // 其他数据库操作方法...
}

在上面的代码中,UserMapper接口上标注了@Mapper注解,并且方法上使用了MyBatis提供的注解如@Select来定义SQL查询。这样,MyBatis会为这个接口生成一个实现类,我们可以在服务类中注入这个映射器接口来调用数据库操作。

注意:在某些配置中,如果你已经在启动类或配置类上使用了@MapperScan注解来指定扫描的包路径,那么映射器接口上的@Mapper注解可以省略。例如:

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.example.demo.mapper") // 指定扫描的包路径
public class DemoApplication {
   
    public static void main(String[] args) {
   
        SpringApplication.run(DemoApplication.class, args);
    }
}

在这个例子中,所有位于com.example.demo.mapper包下的接口都会被MyBatis扫描并处理,无需在每个接口上单独使用@Mapper注解。

相关推荐

  1. Spring Boot实战深入理解@Service@Mapper注解

    2024-01-02 09:44:02       54 阅读
  2. 深入理解@Transactional注解

    2024-01-02 09:44:02       36 阅读
  3. 深入理解实战CSS变量

    2024-01-02 09:44:02       44 阅读
  4. 深入理解springboot

    2024-01-02 09:44:02       124 阅读
  5. 深入理解Spring中的@Autowired注解

    2024-01-02 09:44:02       25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-02 09:44:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-02 09:44:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-02 09:44:02       82 阅读
  4. Python语言-面向对象

    2024-01-02 09:44:02       91 阅读

热门阅读

  1. ARM AArch64的虚拟化(virtualization)详解(下)

    2024-01-02 09:44:02       59 阅读
  2. http基本格式

    2024-01-02 09:44:02       62 阅读
  3. 位运算trick

    2024-01-02 09:44:02       64 阅读
  4. ChatGPT的基本原理?

    2024-01-02 09:44:02       61 阅读
  5. GitHub Copilot的快速入门

    2024-01-02 09:44:02       71 阅读
  6. element ui upload 源码解析-逐行逐析

    2024-01-02 09:44:02       43 阅读
  7. 2023年12月第4周面试算法题总结

    2024-01-02 09:44:02       60 阅读
  8. Redis 简介

    2024-01-02 09:44:02       60 阅读
  9. junit.Test 的使用方法

    2024-01-02 09:44:02       50 阅读
  10. 【Vue】什么是nextTick?

    2024-01-02 09:44:02       52 阅读