Spring Boot 常用注解

目录

Spring Boot 的注解具有以下作用:

我给大家介绍几个我常用的Spring Boot注解

实体类(entity classes)

@Data

@TableName

 @TableId

@TableField

注解结合使用

数据持久层Mapper接口

@Mapper @Results

现业务逻辑Service类

@Service @Autowired

控制层Controller类

@Controller

@RequestMapping

 @PathVariable

@ModelAttribute

@RequestParam

注解结合使用

总结


Spring Boot 的注解具有以下作用:

  1. 简化配置: 注解可以帮助开发者简化配置文件的编写。通过使用注解,开发者可以在代码中直接标识出组件的作用、依赖关系等,而无需手动在配置文件中进行繁琐的配置。

  2. 自动装配: Spring Boot 的注解可以实现自动装配,即根据特定的规则自动地将组件注入到容器中,简化了依赖注入的过程。

  3. 提高可读性: 注解可以使代码更加直观和易于理解。通过在类或方法上添加注解,可以清晰地表明它们的作用和特性,使代码更加易于维护。

  4. 框架集成: Spring Boot 的注解与其他框架的注解可以进行良好的集成,例如与Spring MVC、JPA、Hibernate等框架结合使用,能够提供更丰富的功能和更高的灵活性。

  5. 提高开发效率: 注解的使用可以减少大量样板式的代码,降低了开发工作量,提高了开发效率。

  6. 方便扩展: 注解提供了更为灵活的扩展机制,可以根据需要自定义注解,从而实现各种自定义的功能和特性

我给大家介绍几个我常用的Spring Boot注解

实体类(entity classes)

 在Java中,实体类(Entity classes)通常与数据库表相映射,用于表示数据库表中的数据行。在不同的Java持久化框架中,实体类使用的注解会有所不同

@Data

@Data是Lombok库提供的一个注解,它可以为Java类自动生成一些通用的方法,如toString()equals()hashCode()以及所有字段的gettersetter方法。

它能够大大简化类的编写,避免了手动编写这些通用方法所带来的重复性工作。通常用在数据对象(POJO,Plain Old Java Object)类上,这些类主要用于保存数据,而不包含复杂的业务逻辑。

举例来说,假设有一个简单的Java类:

​
import lombok.Data;

@Data
public class Person {
    private String name;
    private int age;
}

​

使用@Data注解后,Lombok将自动生成该类的toString()equals()hashCode()方法以及nameage字段的gettersetter方法。这使得代码更简洁,易于理解,且减少了开发者的工作量。

然而,需要注意的是,尽管@Data提供了便利,但有时可能会因为自动生成的方法不符合特定需求而产生问题。在某些情况下,你可能需要更精细的控制和定制生成的代码。

@TableName

@TableName 注解通常与 Java 持久化框架相关,尤其是在使用 MyBatis Plus ORM 框架时。MyBatis Plus 是 MyBatis 的一个增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

在 MyBatis Plus 中,@TableName 注解用于指定一个实体类对应的数据库表名。如果实体类的名称与数据库中的表名不一致,可以使用这个注解来明确映射关系。

例如,如果有一个数据库表名为 tbl_user,而你希望在代码中使用 User 作为实体类的名称,你可以这样使用 @TableName

​
import com.baomidou.mybatisplus.annotation.TableName;

@TableName("tbl_user")
public class User {
    // 类的字段和数据库列的映射
}

​

这样,MyBatis Plus 在构建查询或执行操作时,就会将 User 类映射到 tbl_user 表。

 @TableId

 @TableId 是 MyBatis Plus 框架中的一个注解,用于标识实体类的主键属性。这个注解告诉 MyBatis Plus,该字段是数据库表的主键列,并且可以指定主键生成策略。

在 MyBatis Plus 中,@TableId 注解通常与 @TableName 注解一起使用,以便将实体类的字段映射到数据库表的对应列上。@TableId 注解可以接受两个参数:

  1. value:指定数据库表的主键列名。如果实体类属性名和表的主键列名一致,这个参数可以省略。
  2. type:指定主键生成策略。MyBatis Plus 支持多种主键生成策略,如自增(IdType.AUTO)、手动输入(IdType.NONE)、UUID(IdType.UUID)等。

下面是一个使用 @TableId 注解的例子:

​
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableName;

@TableName("tbl_user")
public class User {
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    // 其他字段...
}

​

 在这个例子中,User 类映射到数据库的 tbl_user 表,id 字段被标记为主键列,并且指定了主键生成策略为自增。这意味着当你插入一个新的 User 记录时,id 字段的值将由数据库自动生成。

@TableField

@TableField 是 MyBatis Plus 框架中的一个注解,用于指定实体类的属性如何映射到数据库表的列。当实体类的属性名与表中的列名不一致时,可以使用这个注解来定义映射关系。

这个注解非常有用,因为在实际开发中,数据库表的列名通常使用下划线命名法(例如 user_name),而Java实体类的属性名则遵循驼峰命名法(例如 userName)。@TableField 注解可以帮助框架理解这两种命名法之间的对应关系。

@TableField 注解的常用参数:

  • value:指定数据库表的列名。
  • exist:标识该字段在数据库表中是否存在,默认值为true。如果设置为false,则表示该字段在数据库表中不存在,MyBatis Plus 在构建SQL语句时会忽略该字段。

下面是一个使用 @TableField 注解的例子:

​
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;

@TableName("tbl_user")
public class User {
    // 如果数据库表的列名与属性名一致,或者遵循驼峰转下划线的规则,可以不用指定value
    private Long id;

    // 明确指定属性userName对应数据库表中的user_name列
    @TableField("user_name")
    private String userName;

    // 标识该属性在数据库表中不存在
    @TableField(exist = false)
    private String someOtherFieldNotInTable;

    // 其他字段...
}

​

在这个例子中,User 类映射到数据库的 tbl_user 表。userName 属性通过 @TableField 注解映射到 user_name 列。someOtherFieldNotInTable 属性在数据库表中不存在,因此使用 @TableField(exist = false) 来标识。这样,MyBatis Plus 在构建SQL语句时,不会包含 someOtherFieldNotInTable 属性。 

注解结合使用

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.IdType;
import lombok.Data;

@Data // Lombok注解,自动生成getter、setter、toString等方法
@TableName("tbl_user") // 映射数据库表名
public class User {

    @TableId(value = "user_id", type = IdType.AUTO) // 映射主键字段,自增
    private Long id;

    @TableField("user_name") // 映射用户名字段
    private String userName;

    @TableField("email") // 映射电子邮件字段
    private String email;

    // 其他字段和方法...
}

在这个例子中:

  • @Data 注解来自 Lombok,它为类自动生成了getter和setter方法,以及toStringequalshashCode方法。这减少了样板代码,使类更加简洁。
  • @TableName("tbl_user") 指定了实体类 User 映射到数据库中的 tbl_user 表。
  • @TableId(value = "user_id", type = IdType.AUTO) 指定了 id 属性映射到表的 user_id 列,并且这个列是自增的主键。
  • @TableField 注解用于映射 userName 和 email 属性到对应的数据库列。

这种组合的使用方式使得实体类的定义既清晰又简洁,同时也充分利用了MyBatis Plus的自动映射功能和Lombok的代码简化功能。这样,你可以专注于业务逻辑,而不是编写和维护大量的样板代码。

数据持久层Mapper接口

在Spring Boot中,通常我们会使用MyBatis作为持久层框架,而在MyBatis中,Mapper指的是数据访问层的接口。这些Mapper接口定义了对数据库的CRUD操作,包括插入、更新、删除和查询等。

在Spring Boot中,这些Mapper接口通常不需要显式地编写实现类,而是由MyBatis框架通过动态代理来实现。开发者只需要编写Mapper接口及其对应的SQL语句,MyBatis框架会根据接口定义自动生成相应的实现,从而实现了数据访问层的逻辑。

因此,在Spring Boot中,Mapper并不是一个特定的类,而是一组接口,用于定义数据访问层的操作。

@Mapper @Results

 @Results@Mapper注解通常一起使用,以便在MyBatis中定义结果集映射。@Results注解用于定义一个或多个结果集映射,它可以与@Select@Insert@Update@Delete等注解一起使用,以便将查询结果映射到Java对象中。

下面是一个使用@Results@Mapper注解的示例:

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM users WHERE id = #{id}")
    @Results({
        @Result(property = "id", column = "id"),
        @Result(property = "name", column = "name"),
        @Result(property = "email", column = "email")
    })
    User findById(Long id);
}

在这个例子中,UserMapper接口使用了@Mapper注解,这意味着它是一个MyBatis的Mapper接口。findById方法使用了@Select注解,它指定了查询语句。@Results注解用于定义结果集映射,它指定了如何将查询结果映射到User对象中。@Result注解用于定义单个属性的映射关系,它指定了Java对象的属性名和数据库表的列名。

需要注意的是,@Results@Result注解通常与Java对象的属性名和数据库表的列名一一对应。如果Java对象的属性名和数据库表的列名一致,你可以省略@Result注解中的propertycolumn属性。

现业务逻辑Service类

在Spring框架中,Service类通常用于实现业务逻辑,它们封装了对数据访问层(DAO)的调用,并提供了一组操作数据的方法。Service类通常是一个中间层,它们与控制器(Controller)和数据访问层(DAO)之间进行交互,负责处理业务逻辑和数据处理。

@Service @Autowired

@Service@Autowired注解通常一起使用,以便在Spring Boot中创建和注入Service实例。@Service注解用于标识一个类是一个服务类(Service),它封装了业务逻辑,并提供了一组操作数据的方法。@Autowired注解用于自动注入依赖项,它可以将其他组件的实例注入到Service类中,以便访问其他组件的功能。

下面是一个使用@Service@Autowired注解的示例:

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

@Service
public class UserService {
    @Autowired
    private UserDao userDao;

    public User getUserById(Long id) {
        return userDao.findById(id);
    }

    public void saveUser(User user) {
        userDao.save(user);
    }

    public void updateUser(User user) {
        userDao.update(user);
    }

    public void deleteUser(Long id) {
        userDao.delete(id);
    }
}

在这个例子中,UserService类使用了@Service注解,这意味着它是一个服务类(Service)。@Autowired注解用于自动注入UserDao实例,以便访问数据库。getUserByIdsaveUserupdateUserdeleteUser方法分别用于查询、插入、更新和删除用户数据。这些方法可以在控制器(Controller)中调用,以实现对用户数据的操作。

需要注意的是,@Service@Autowired注解通常与其他注解一起使用,以便让Spring Boot自动扫描并创建Service实例,并自动注入依赖项。如果你的Service类没有使用这些注解,你需要手动将它们注册为Spring组件,并手动注入依赖项。

控制层Controller类

Controller层是Spring MVC框架中的一个组件,它负责处理HTTP请求和响应。Controller层通常是一个中间层,它们与服务层(Service)和数据访问层(DAO)之间进行交互,负责处理HTTP请求和响应。

@Controller

@Controller注解是Spring框架中的一个注解,它用于标识一个类是一个控制器(Controller)。Controller类通常用于处理HTTP请求和响应,它们接收HTTP请求并返回HTTP响应。

使用@Controller注解可以让Spring框架自动扫描并创建Controller实例,从而简化了Controller类的创建和配置。在Spring Boot中,你可以使用@Controller注解来标记Controller类,以便让Spring Boot自动扫描并创建Controller实例。

@RequestMapping

 @RequestMapping注解是Spring框架中的一个注解,它用于映射HTTP请求到方法上。它可以指定HTTP请求的路径、请求方法、请求参数等信息。

在Spring Boot中,@RequestMapping注解通常与@Controller@RestController注解一起使用,以便将HTTP请求映射到Controller类的方法上。下面是一些常用的@RequestMapping注解的示例:

  1. @RequestMapping("/users"):指定HTTP请求的路径为/users,可以通过HTTP GET、POST、PUT、DELETE等方法访问。

  2. @RequestMapping(value = "/users/{id}", method = RequestMethod.GET):指定HTTP请求的路径为/users/{id},可以通过HTTP GET方法访问。

  3. @RequestMapping(value = "/users", method = RequestMethod.POST):指定HTTP请求的路径为/users,可以通过HTTP POST方法访问。

  4. @RequestMapping(value = "/users/{id}", method = RequestMethod.PUT):指定HTTP请求的路径为/users/{id},可以通过HTTP PUT方法访问。

  5. @RequestMapping(value = "/users/{id}", method = RequestMethod.DELETE):指定HTTP请求的路径为/users/{id},可以通过HTTP DELETE方法访问。

 @PathVariable

@PathVariable注解是Spring框架中的一个注解,它用于从请求路径中获取参数值。在Spring MVC中,@PathVariable注解通常与@RequestMapping注解一起使用,以便将HTTP请求映射到Controller类的方法上。

使用@PathVariable注解可以让Spring框架自动从请求路径中获取参数值,并将其绑定到方法的参数上。例如:

@RestController
@RequestMapping("/users")
public class UserController {
    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }
}

在这个例子中,@GetMapping注解用于指定HTTP GET请求的路径为/users/{id},其中{id}表示一个动态参数。@PathVariable注解用于将请求路径中的id参数值绑定到getUserById方法的id参数上,以便查询对应的用户数据。

@ModelAttribute

 @ModelAttribute注解是Spring框架中的一个注解,它用于将请求参数绑定到Model对象上。在Spring MVC中,@ModelAttribute注解通常与@RequestMapping注解一起使用,以便将HTTP请求映射到Controller类的方法上。

使用@ModelAttribute注解可以让Spring框架自动将请求参数绑定到Model对象上,并将其传递给Controller类的方法。例如:

@Controller
@RequestMapping("/users")
public class UserController {
    @GetMapping("/register")
    public String showRegistrationForm(@ModelAttribute("user") User user) {
        return "registration-form";
    }

    @PostMapping("/register")
    public String processRegistrationForm(@ModelAttribute("user") User user) {
        userService.registerUser(user);
        return "redirect:/users/login";
    }
}

在这个例子中,@GetMapping注解用于指定HTTP GET请求的路径为/users/register,它的作用是显示用户注册表单。@ModelAttribute注解用于将一个名为user的Model对象传递给showRegistrationForm方法,以便在表单中显示用户数据。@PostMapping注解用于指定HTTP POST请求的路径为/users/register,它的作用是处理用户提交的注册表单数据。@ModelAttribute注解用于将请求参数绑定到user对象上,以便注册用户数据。

@RequestParam

 @RequestParam注解是Spring框架中的一个注解,它用于从HTTP请求中获取参数值。在Spring MVC中,@RequestParam注解通常与@RequestMapping注解一起使用,以便将HTTP请求映射到Controller类的方法上。

使用@RequestParam注解可以让Spring框架自动从HTTP请求中获取参数值,并将其绑定到方法的参数上。例如:

@RestController
@RequestMapping("/users")
public class UserController {
    @GetMapping("/search")
    public List<User> searchUsers(@RequestParam("query") String query) {
        return userService.searchUsers(query);
    }
}

注解结合使用

@Controller
@RequestMapping("/users")
public class UserController {
    @GetMapping("/{id}")
    public String getUserById(@PathVariable("id") Long id, Model model) {
        User user = userService.getUserById(id);
        model.addAttribute("user", user);
        return "user-details";
    }

    @GetMapping("/search")
    public String searchUsers(@ModelAttribute("query") String query,
                              @RequestParam(name = "page", defaultValue = "1") int page,
                              @RequestParam(name = "size", defaultValue = "10") int size,
                              Model model) {
        List<User> users = userService.searchUsers(query, page, size);
        model.addAttribute("users", users);
        return "user-list";
    }

    @PostMapping("/create")
    public String createUser(@ModelAttribute("user") User user) {
        userService.createUser(user);
        return "redirect:/users/" + user.getId();
    }
}

在这个例子中,@Controller注解用于声明这是一个Controller类。@RequestMapping注解用于指定Controller类的根路径为/users,它的作用是处理与用户相关的HTTP请求。@PathVariable注解用于将HTTP请求中的路径变量id绑定到getUserById方法的id参数上,以便获取指定ID的用户数据。Model对象用于将查询结果传递给视图层,以便在用户详情页中显示用户数据。

@ModelAttribute注解用于将一个名为query的Model对象传递给searchUsers方法,以便在搜索表单中显示查询条件。@RequestParam注解用于将名为pagesize的请求参数绑定到searchUsers方法的pagesize参数上,以便分页查询用户数据。Model对象用于将查询结果传递给视图层,以便在用户列表中显示用户数据。

@PostMapping注解用于处理HTTP POST请求,它的作用是创建新的用户数据。@ModelAttribute注解用于将一个名为user的Model对象传递给createUser方法,以便获取表单提交的用户数据。userService.createUser(user)用于将用户数据保存到数据库中。"redirect:/users/" + user.getId()用于重定向到新创建的用户详情页。

总结

我只是列举了我使用的部分注解

这些注解使Spring Boot开发更加简单和高效,帮助开发者避免繁琐的配置和大量的样板代码,从而快速构建和部署应用程序。它们提供了便捷的方式来定义应用程序的结构、配置和行为

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值