锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 软件开发
  3. JAVA
  4. Spring Boot + MyBatis 项目中常用注解详解(万字长篇解读)

Spring Boot + MyBatis 项目中常用注解详解(万字长篇解读)

0
  • JAVA
  • 发布于 2024-10-08
  • 17 次阅读
黄健
黄健

Spring Boot + MyBatis 项目中常用注解详解

在现代Java开发中,Spring Boot 和MyBatis是两大热门框架,广泛应用于构建高效、可维护的企业级应用。两者结合使用,可以充分发挥各自的优势,提高开发效率和代码质量。在这个过程中,注解(Annotations)起到了关键作用。本文将详细、全面地讲解在Spring Boot + MyBatis项目中常用的注解及其含义和作用,并通过分类整理,帮助开发者更好地理解和运用这些工具。


目录

  • Spring Boot + MyBatis 项目中常用注解详解
    *
  • Spring Boot 常用注解
    *
    • 核心注解
      *
    • @SpringBootApplication
    • 组件标识注解
      *
    • @RestController
    • @Controller
    • @Service
    • @Repository
    • @Component
    • 依赖注入注解
      *
    • @Autowired
    • @Qualifier
    • @Inject
    • 配置注解
      *
    • @Configuration
    • @Bean
    • @Value
    • @ConfigurationProperties
    • 事务管理注解
      *
    • @Transactional
    • Web层注解
      *
    • 请求映射注解
      *
      • @RequestMapping
      • @GetMapping
      • @PostMapping
      • @PutMapping
      • @DeleteMapping
    • 参数绑定注解
      *
      • @PathVariable
      • @RequestParam
      • @RequestBody
      • @ResponseBody
  • MyBatis 常用注解
    *
    • Mapper接口注解
      *
    • @Mapper
    • SQL操作注解
      *
    • @Select
    • @Insert
    • @Update
    • @Delete
    • 参数绑定注解
      *
    • @Param
    • 结果映射注解
      *
    • @Results 和 @Result
    • 关联映射注解
      *
    • @One 和 @Many
  • 综合示例
    *
    • 项目结构
    • 1. 主类
    • 2. 实体类
    • 3. Mapper 接口
    • 4. 服务类
    • 5. 控制器类
    • 6. 配置文件
  • 总结
  • 附录:常用注解对照表



Spring Boot 常用注解

Spring Boot 提供了丰富的注解来简化开发过程。以下将这些注解按照功能进行分类,便于理解和应用。

核心注解

@SpringBootApplication

含义与作用 :@SpringBootApplication 是一个复合注解,包含了 @Configuration、@EnableAutoConfiguration 和 @ComponentScan。用于标注主类,启用Spring Boot的自动配置和组件扫描功能。

示例:

@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {

        SpringApplication.run(MyApplication.class, args);
    }
}

组件标识注解

这些注解用于标识不同层次的组件,便于Spring进行自动扫描和管理。

@RestController

含义与作用 :@RestController 是 @Controller 和 @ResponseBody 的组合注解,用于标识控制器类,适用于构建RESTful Web服务。所有方法返回的对象会自动序列化为JSON或XML。

示例:

@RestController
@RequestMapping("/api")
public class UserController {


    @GetMapping("/users")
    public List<User> getAllUsers() {

        // 返回用户列表
    }
}
@Controller

含义与作用 :@Controller 用于标识控制器类,通常与视图解析器(如Thymeleaf)配合使用,适用于传统的MVC模式。

示例:

@Controller
public class HomeController {


    @GetMapping("/")
    public String home(Model model) {

        model.addAttribute("message", "Hello World");
        return "home";
    }
}
@Service

含义与作用 :@Service 用于标识业务逻辑层的组件,增强代码的可读性和可维护性。它也是一个 @Component,因此会被Spring扫描和管理。

示例:

@Service
public class UserService {


    @Autowired
    private UserRepository userRepository;

    public List<User> getAllUsers() {

        return userRepository.findAll();
    }
}
@Repository

含义与作用 :@Repository 用于标识数据访问层的组件,通常与持久化技术(如JPA、MyBatis)结合使用。它还提供了异常转换功能,将持久层异常转换为Spring的统一异常。

示例:

@Repository
public class UserRepository {


    @Autowired
    private JdbcTemplate jdbcTemplate;

    public List<User> findAll() {

        // 查询数据库
    }
}
@Component

含义与作用 :@Component 是一个通用的Spring管理的组件注解,用于标识任何Spring管理的Bean。其他注解(如 @Service、@Repository、@Controller)都是 @Component 的特化。

示例:

@Component
public class Utility {


    public void performTask() {

        // 执行任务
    }
}

依赖注入注解

这些注解用于实现Spring的依赖注入机制,简化Bean的管理和使用。

@Autowired

含义与作用 :@Autowired 用于自动装配Bean,可以应用于构造函数、字段或Setter方法。Spring会根据类型自动注入匹配的Bean。

示例:

@Service
public class OrderService {


    @Autowired
    private OrderRepository orderRepository;

    // 或者通过构造函数注入
    // private final OrderRepository orderRepository;
    //
    // @Autowired
    // public OrderService(OrderRepository orderRepository) {

    //     this.orderRepository = orderRepository;
    // }
}
@Qualifier

含义与作用 :@Qualifier 与 @Autowired 一起使用,用于在多个Bean候选者中指定要注入的具体Bean。

示例:

@Service
public class PaymentService {


    @Autowired
    @Qualifier("creditCardPayment")
    private PaymentProcessor paymentProcessor;
}
@Inject

含义与作用 :@Inject 是JSR-330规范的注解,与 @Autowired 类似,用于实现依赖注入。功能上与 @Autowired 基本相同,但不支持 required 属性。

示例:

@Service
public class NotificationService {


    @Inject
    private EmailService emailService;
}

配置注解

用于定义和管理应用的配置和Bean。

@Configuration

含义与作用 :@Configuration 用于标识配置类,类似于传统的XML配置文件。可以在配置类中定义Bean,并进行依赖注入的配置。

示例:

@Configuration
public class AppConfig {


    @Bean
    public RestTemplate restTemplate() {

        return new RestTemplate();
    }
}
@Bean

含义与作用 :@Bean 用于在 @Configuration 类中定义Bean,Spring会管理这些Bean的生命周期和依赖。

示例:

@Configuration
public class DataSourceConfig {


    @Bean
    public DataSource dataSource() {

        // 配置数据源
    }
}
@Value

含义与作用 :@Value 用于注入配置文件中的属性值,可以注入到字段、方法参数或构造函数参数中。

示例:

@Component
public class AppProperties {


    @Value("${app.name}")
    private String appName;

    @Value("${app.version}")
    private String appVersion;
}
@ConfigurationProperties

含义与作用 :@ConfigurationProperties 用于将配置文件中的属性映射到一个Java对象中,适用于大量相关属性的绑定。

示例:

@Component
@ConfigurationProperties(prefix = "app")
public class AppProperties {


    private String name;
    private String version;

    // getters and setters
}

事务管理注解

用于声明事务管理,确保数据一致性和完整性。

@Transactional

含义与作用 :@Transactional 用于声明事务管理,适用于需要事务控制的方法或类。可以指定事务的传播行为、隔离级别、回滚规则等。

示例:

@Service
public class PaymentService {


    @Transactional
    public void processPayment(Order order) {

        // 执行支付逻辑
    }
}

Web层注解

用于处理Web请求和响应,简化控制器的开发。

请求映射注解

这些注解用于定义HTTP请求的路径和方法,简化路由配置。

@RequestMapping

含义与作用 :@RequestMapping 用于定义请求的URL路径和HTTP方法,适用于类级别和方法级别。它是一个通用的映射注解,可以通过 method 属性指定具体的HTTP方法。

示例:

@RestController
@RequestMapping("/api")
public class UserController {


    @RequestMapping(value = "/users", method = RequestMethod.GET)
    public List<User> getAllUsers() {

        // 返回用户列表
    }
}
@GetMapping

含义与作用 :@GetMapping 是 @RequestMapping 的快捷方式,用于处理HTTP GET请求。适用于方法级别,简化代码。

示例:

@GetMapping("/users")
public List<User> getAllUsers() {

    // 返回用户列表
}
@PostMapping

含义与作用 :@PostMapping 是 @RequestMapping 的快捷方式,用于处理HTTP POST请求。适用于方法级别,简化代码。

示例:

@PostMapping("/users")
public ResponseEntity<Void> createUser(@RequestBody User user) {

    // 创建用户
}
@PutMapping

含义与作用 :@PutMapping 是 @RequestMapping 的快捷方式,用于处理HTTP PUT请求。适用于方法级别,简化代码。

示例:

@PutMapping("/users/{id}")
public ResponseEntity<Void> updateUser(@PathVariable Long id, @RequestBody User user) {

    // 更新用户
}
@DeleteMapping

含义与作用 :@DeleteMapping 是 @RequestMapping 的快捷方式,用于处理HTTP DELETE请求。适用于方法级别,简化代码。

示例:

@DeleteMapping("/users/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {

    // 删除用户
}
参数绑定注解

这些注解用于将HTTP请求中的参数绑定到控制器方法的参数上。

@PathVariable

含义与作用 :@PathVariable 用于绑定URL路径中的变量到方法参数,常用于RESTful API中的资源标识。

示例:

@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {

    // 根据ID获取用户
}
@RequestParam

含义与作用 :@RequestParam 用于绑定HTTP请求中的参数到方法参数,适用于查询参数或表单参数。

示例:

@GetMapping("/search")
public List<User> searchUsers(@RequestParam String name, @RequestParam int age) {

    // 根据姓名和年龄搜索用户
}
@RequestBody

含义与作用 :@RequestBody 用于将HTTP请求体中的JSON或XML数据绑定到方法参数,常用于处理POST和PUT请求中的数据。

示例:

@PostMapping("/users")
public ResponseEntity<Void> createUser(@RequestBody User user) {

    // 创建用户
}
@ResponseBody

含义与作用 :@ResponseBody 用于将方法返回的对象序列化为JSON或XML并写入HTTP响应体,通常与 @Controller 一起使用。@RestController 已经包含了 @ResponseBody 的功能。

示例:

@Controller
public class UserController {


    @GetMapping("/users")
    @ResponseBody
    public List<User> getAllUsers() {

        // 返回用户列表
    }
}

MyBatis 常用注解

MyBatis 是一个优秀的持久层框架,通过映射语句将数据库操作与Java方法关联。MyBatis提供了一系列注解,简化了XML映射文件的使用。

Mapper接口注解

@Mapper

含义与作用 :@Mapper 用于标识MyBatis的Mapper接口,Spring会自动扫描并生成代理对象。通常与 @MapperScan 配合使用。

示例:

@Mapper
public interface UserMapper {


    @Select("SELECT * FROM users WHERE id = #{id}")
    User getUserById(@Param("id") Long id);
}

SQL操作注解

这些注解用于定义具体的SQL语句,关联到Mapper接口的方法上,实现数据库的CRUD操作。

@Select

含义与作用 :@Select 用于标注查询语句,关联到接口的方法上,实现数据库的查询操作。

示例:

@Mapper
public interface UserMapper {


    @Select("SELECT * FROM users")
    List<User> getAllUsers();
}
@Insert

含义与作用 :@Insert 用于标注插入语句,关联到接口的方法上,实现数据库的插入操作。

示例:

@Mapper
public interface UserMapper {


    @Insert("INSERT INTO users(name, email) VALUES(#{name}, #{email})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    void insertUser(User user);
}
@Update

含义与作用 :@Update 用于标注更新语句,关联到接口的方法上,实现数据库的更新操作。

示例:

@Mapper
public interface UserMapper {


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

含义与作用 :@Delete 用于标注删除语句,关联到接口的方法上,实现数据库的删除操作。

示例:

@Mapper
public interface UserMapper {


    @Delete("DELETE FROM users WHERE id = #{id}")
    void deleteUser(@Param("id") Long id);
}

参数绑定注解

@Param

含义与作用 :@Param 用于给方法参数命名,以便在SQL语句中引用。特别适用于有多个参数的方法。

示例:

@Mapper
public interface UserMapper {


    @Select("SELECT * FROM users WHERE name = #{name} AND age = #{age}")
    List<User> getUsersByNameAndAge(@Param("name") String name, @Param("age") int age);
}

结果映射注解

这些注解用于定义查询结果与Java对象属性的映射关系,适用于字段名与属性名不一致的情况。

@Results 和 @Result

含义与作用 :@Results 和 @Result 用于定义查询结果与Java对象属性的映射关系,适用于字段名与属性名不一致的情况。

示例:

@Mapper
public interface UserMapper {


    @Select("SELECT id, user_name, email_address FROM users WHERE id = #{id}")
    @Results({

        @Result(property = "id", column = "id"),
        @Result(property = "name", column = "user_name"),
        @Result(property = "email", column = "email_address")
    })
    User getUserById(@Param("id") Long id);
}

关联映射注解

用于定义对象之间的一对一或一对多关系,适用于复杂的对象关系映射。

@One 和 @Many

含义与作用 :@One 和 @Many 用于定义一对一和一对多的关联关系,适用于复杂的对象关系映射。

示例:

@Mapper
public interface OrderMapper {


    @Select("SELECT * FROM orders WHERE id = #{id}")
    @Results({

        @Result(property = "id", column = "id"),
        @Result(property = "user", column = "user_id", 
                one = @One(select = "com.example.mapper.UserMapper.getUserById"))
    })
    Order getOrderById(@Param("id") Long id);
}

综合示例

为了更好地理解上述注解的应用,下面通过一个简单的用户管理系统示例,展示Spring Boot与MyBatis如何协同工作。

项目结构

src
├── main
│   ├── java
│   │   └── com.example.demo
│   │       ├── DemoApplication.java
│   │       ├── controller
│   │       │   └── UserController.java
│   │       ├── service
│   │       │   └── UserService.java
│   │       ├── mapper
│   │       │   └── UserMapper.java
│   │       └── model
│   │           └── User.java
│   └── resources
│       └── application.properties

1. 主类

@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class DemoApplication {

    public static void main(String[] args) {

        SpringApplication.run(DemoApplication.class, args);
    }
}

说明 :@MapperScan 指定MyBatis的Mapper接口扫描路径,确保@Mapper接口能够被正确识别和代理。

2. 实体类

public class User {

    private Long id;
    private String name;
    private String email;

    // getters and setters
}

3. Mapper 接口

@Mapper
public interface UserMapper {


    @Select("SELECT * FROM users")
    List<User> getAllUsers();

    @Select("SELECT * FROM users WHERE id = #{id}")
    User getUserById(@Param("id") Long id);

    @Insert("INSERT INTO users(name, email) VALUES(#{name}, #{email})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    void insertUser(User user);

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

    @Delete("DELETE FROM users WHERE id = #{id}")
    void deleteUser(@Param("id") Long id);
}

4. 服务类

@Service
public class UserService {


    @Autowired
    private UserMapper userMapper;

    public List<User> getAllUsers() {

        return userMapper.getAllUsers();
    }

    public User getUserById(Long id) {

        return userMapper.getUserById(id);
    }

    public void createUser(User user) {

        userMapper.insertUser(user);
    }

    public void updateUser(User user) {

        userMapper.updateUser(user);
    }

    public void deleteUser(Long id) {

        userMapper.deleteUser(id);
    }
}

5. 控制器类

@RestController
@RequestMapping("/api/users")
public class UserController {


    @Autowired
    private UserService userService;

    // 获取所有用户
    @GetMapping
    public List<User> listUsers() {

        return userService.getAllUsers();
    }

    // 根据ID获取用户
    @GetMapping("/{id}")
    public ResponseEntity<User> getUser(@PathVariable Long id) {

        User user = userService.getUserById(id);
        if(user != null){

            return ResponseEntity.ok(user);
        } else {

            return ResponseEntity.notFound().build();
        }
    }

    // 创建用户
    @PostMapping
    public ResponseEntity<Void> createUser(@RequestBody User user) {

        userService.createUser(user);
        return ResponseEntity.status(HttpStatus.CREATED).build();
    }

    // 更新用户
    @PutMapping("/{id}")
    public ResponseEntity<Void> updateUser(@PathVariable Long id, @RequestBody User user) {

        user.setId(id);
        userService.updateUser(user);
        return ResponseEntity.ok().build();
    }

    // 删除用户
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteUser(@PathVariable Long id) {

        userService.deleteUser(id);
        return ResponseEntity.noContent().build();
    }
}

6. 配置文件

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

mybatis.configuration.map-underscore-to-camel-case=true

# 显示SQL语句
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

说明:

  • map-underscore-to-camel-case=true:自动将数据库下划线命名转换为Java的驼峰命名。
  • log-impl:设置MyBatis的日志实现,这里使用标准输出日志。

总结

在Spring Boot + MyBatis项目中,注解的使用极大地简化了配置和开发流程。通过合理运用各种注解,可以实现代码的高内聚低耦合,提升项目的可维护性和扩展性。本文按照功能对Spring Boot和MyBatis中的常用注解进行了分类讲解,并通过一个综合示例展示了它们的实际应用。希望能帮助开发者在实际项目中更好地理解和运用这些注解,构建高效、稳定的应用系统。


附录:常用注解对照表

| 注解类别 | 注解名称 | 作用 |
|—————|—————————-|————————|
| 核心注解 | @SpringBootApplication | 标注主类,启用自动配置和组件扫描 |
| 组件标识注解 | @RestController | 标识REST控制器,返回JSON/XML数据 |
| | @Controller | 标识MVC控制器,返回视图 |
| | @Service | 标识业务逻辑层组件 |
| | @Repository | 标识数据访问层组件,提供异常转换 |
| | @Component | 通用组件注解 |
| 依赖注入注解 | @Autowired | 自动装配Bean |
| | @Qualifier | 指定注入的具体Bean |
| | @Inject | 实现依赖注入(JSR-330规范) |
| 配置注解 | @Configuration | 标识配置类 |
| | @Bean | 定义Bean |
| | @Value | 注入配置属性值 |
| | @ConfigurationProperties | 绑定配置属性到Java对象 |
| 事务管理注解 | @Transactional | 声明事务管理 |
| Web层注解 | @RequestMapping | 定义请求路径和方法 |
| | @GetMapping | 处理GET请求 |
| | @PostMapping | 处理POST请求 |
| | @PutMapping | 处理PUT请求 |
| | @DeleteMapping | 处理DELETE请求 |
| | @PathVariable | 绑定URL路径变量到方法参数 |
| | @RequestParam | 绑定请求参数到方法参数 |
| | @RequestBody | 绑定请求体到方法参数 |
| | @ResponseBody | 将方法返回值序列化到响应体 |
| MyBatis注解 | @Mapper | 标识Mapper接口 |
| | @Select | 定义SELECT语句 |
| | @Insert | 定义INSERT语句 |
| | @Update | 定义UPDATE语句 |
| | @Delete | 定义DELETE语句 |
| | @Param | 命名方法参数 |
| | @Results | 定义结果集映射 |
| | @Result | 定义单个结果映射 |
| | @One | 定义一对一关联 |
| | @Many | 定义一对多关联 |

通过对这些注解的深入理解和正确使用,可以有效提升Spring Boot + MyBatis项目的开发效率和代码质量。


摊牌了,不装了,整理不易,我想要你手中的赞和关注🌼🌼🌼

原文链接: https://blog.csdn.net/2301_79858914/article/details/142682369

标签: #JAVA 991 #Spring Boot 173 #Mybatis 37
相关文章

Spring 实现 3 种异步接口 2024-10-18 09:07

大家好,我是苏三~ 如何处理比较耗时的接口? 这题我熟,直接上异步接口,使用 Callable、WebAsyncTask 和 DeferredResult、CompletableFuture等均可实现。 但这些方法有局限性,处理结果仅返回单个值。在某些场景下,如果需要接口异步处理的同时,还持续不断地

重学SpringBoot3-集成Redis(五)之布隆过滤器 2024-10-08 11:24

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(五)之布隆过滤器 1. 什么是布隆过滤器? * 基本概念 适用场景 2. 使用 Redis 实现布隆过滤器 * 项目依赖 Redis 配置

SpringBoot整合异步任务执行 2024-10-08 11:24

同步任务: 同步任务是在单线程中按顺序执行,每次只有一个任务在执行,不会引发线程安全和数据一致性等 并发问题 同步任务需要等待任务执行完成后才能执行下一个任务,无法同时处理多个任务,响应慢,影响用 户体验 异步任务: 异步任务是在多线程中同时执行,多个任务可以并发执行,同时处理多个请求,响应快,资源

springboot kafka多数据源,通过配置动态加载发送者和消费者 2024-10-08 11:24

前言 最近做项目,需要支持kafka多数据源,实际上我们也可以通过代码固定写死多套kafka集群逻辑,但是如果需要不修改代码扩展呢,因为kafka本身不处理额外逻辑,只是起到削峰,和数据的传递,那么就需要对架构做一定的设计了。 准备test kafka本身非常容易上手,如果我们需要单元测试,引入ja

SpringBoot 集成 Redis 2024-10-08 11:24

一:SpringBoot 集成 Redis ①Redis是一个 NoSQL(not only)数据库, 常作用缓存 Cache 使用。 ②Redis是一个中间件、是一个独立的服务器;常用的数据类型: string , hash ,set ,zset , list ③通过Redis客户端可以使用多种语

SpringBoot整合QQ邮箱 2024-10-08 11:24

SpringBoot可以通过导入依赖的方式集成多种技术,这当然少不了我们常用的邮箱,现在本章演示SpringBoot整合QQ邮箱发送邮件…. 下面按步骤进行: 1.获取QQ邮箱授权码 1.1 登录QQ邮箱 1.2 开启SMTP服务 找到下图中的SMTP服务区域,如果当前账号未开启的话自己手动开启。

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.