Spring Boot 常用注解

@Controller

1.注解在类上,声明该类是Controller层的Bean,将该类声明进入Spring容器中进行管理。

@Controller
public class UserController {}

@ResponseBody

1.表明该类的所有方法的返回值都直接进行提交而不经过视图解析器,且返回值的数据自动封装为json的数据格式

@ResponseBody
public class UserController {}

@RestController

1.包含上面两个的作用,且支持Restful风格的数据提交方式

@RestController
public class UserController {}

@Service( value = “name” )

1.注解在类上,表示这是一个服务层的bean。
2.等价于@Service"name"),注解在类上,表示这是一个业务层bean,以value的值做为bean的id存入容器中。如果没有value值(@Service),修饰在哪个类上就实例化哪个类的对象,类的第一个字母小写作为容器中的对象的id,但前提类的名字必须遵守帕斯卡命名法。

@Service
public class UserServiceImpl implements IUserService {}

@Repository

1.注解在类上,表示这是一个数据访问层的bean。同Service@Repository
public class UserServiceImpl implements IUserService {}

@Component

1.注解在类上,表示这是一个未归类的bean。同Service@Component
public class UserServiceImpl implements IUserService {}

@Resource( name = “value” )

1. 按照名字装配Bean,即会按照name属性的值来找到具有相同id的Bean并注入。如果没有指定name属性(@Resource 样式),则会根据这个将要被注入的变量名进行注入(value)。如果变量名在容器中也不存在,就按照变量类型注入,如果类型不存在或者存在多个实现类情况下抛出异常。

@Resource
private UserMapper userMapper;

@Autowired @Qualifier( “value” )

1.默认属性required= true(属性必须存储对象,不能为nullfalse可以),按照名字装配Bean,即会按照value值来找到具有相同id的Bean并注入。如果没有指定vaule值(@Autowired 样式),按照类型注入,类型不存在抛出异常,类型存在,如果类型只有一个实现类就按照类型注入,如果类型有多个实现类先按类型匹配再按变量名称匹配,再匹配不到抛出异常。

@Autowired @Qualifier("yang")
private UserMapper userMapper;

@Inject注解

1.用于对象的在注入,注解隶属于jsr330规范,用于对象的在注入,需要导入一个第三方的jar包。

@Override

1.覆盖的意思,表示该方法是继续过来或者实现的方法,如果加了该注解,它的父类或者实现的接口中没有该方法,则ide会报错。这种机制其实是将运行期的错误放到编译期进行处理了。

@Override
public User getById(int id) {
    return userMapper.getById(id);
}

@Value(“#{xx}”)和@Value(“${xx}”)

1.@Value("#{xx}")表示SpEl表达式通常用来获取bean的属性,或者调用bean的某个方法。当然还有可以表示常量。

@Value("#{1}")  
private int number; //获取数字 1  

@Value("#{'Spring Expression Language'}") //获取字符串常量  
private String str;  

@Value("#{dataSource.url}") //获取bean的属性  
private String jdbcUrl;  

2.@Value("${xx}")注解从配置文件读取值的用法。

@Value("${init.password}")  
private String initPwd;    

@RequestMapping(value = “”, method = RequestMethod.POST)

1.RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。用于方法上则是对方法进行注解以产生访问的路径。

@RequestMapping(value = "/getById", method = RequestMethod.POST)
public Object getById(int id){
    return userService.getById(id);
}

@RequestBody

1. @RequestBody主要用来接收前端传递给后端的json字符串中的数据。

public Object getById(@RequestBody String jsonString){}

@RequestHeader

1.获取请求头中的数据,通过指定参数 value 的值来获取请求头中指定的参数值。其他参数用法和 @RequestParam 完全一样。
2.如果@RequestHeader绑定的变量,如果在请求头中不存在。Spring会将控制器中的参数初始化为nullpublic Object getById(@RequestHeader("token") String token){}

@RequestParam(value = “id”, required = false)

1.@RequestParam接收的是请求参数部分,也就是请求路径问号后面的值。
2.不加@RequestParam前端的参数名需要和后端控制器的变量名保持一致才能生效。
3.不加@RequestParam参数为非必传,加@RequestParam写法参数为必传。但@RequestParam可以通过@RequestParam(required = false)设置为非必传。
4.@RequestParam可以通过@RequestParam("userId")或者@RequestParam(value = "userId")指定传入的参数名。
5.@RequestParam可以通过@RequestParam(defaultValue = "0")指定参数默认值

public Object getById(@RequestParam(required = false) Map<String, Object> totalParams) {}

@PathVariable

1.通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中。

@RequestMapping(value = "/getById/{id}", method = RequestMethod.POST)
public Object getById(@RequestBody String jsonString, @RequestHeader("token") String token, @PathVariable("id") int id) {}

@Bean

1.@Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。添加的bean的id为方法名。

@Configuration
public class AppConfig {
 
    @Bean
    public TransferService transferService() {
        return new TransferServiceImpl();
    }
 
}
2.bean的别名

@Bean(name = { "dataSource", "subsystemA-dataSource", "subsystemB-dataSource" })

3.bean的描述

@Bean
@Description("Provides a basic example of a bean")

@Mapper

1.添加了@Mapper注解之后这个接口在编译时会生成相应的实现类,需要注意的是:这个接口中不可以定义同名的方法,因为会生成相同的id,也就是说这个接口是不支持重载的,如果想每个mapper接口都变成实现类,那么需要在每个接口上添加@Mapper注解这样是很麻烦的,解决这个问题就出现了MapperScan,他的作用就是指定实现类接口所在的包,然后包下面所有的接口都会被编译成实现类,启动类上标注

@Mapper
public interface UserMapper {

User getById(@RequestParam("id") int id);

}

@Transactional(rollbackFor = Exception.class)

事务注解

@SpringBootApplication

@SpringBootApplication包含了@ComponentScan@SpringBootConfiguration@EnableAutoConfiguration三个注解。

@ComponentScan:作用就是根据定义的扫描路径,把符合扫描规则的类装配到spring的bean容器中。
@SpringBootConfiguration :等同于spring的XML配置文件;使用Java代码可以检查类型安全。
@EnableAutoConfiguration :自动配置。@EnableAutoConfiguration实现的关键在于引入了AutoConfigurationImportSelector,其核心逻辑为selectImports方法,借助AutoConfigurationImportSelector,它可以帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot创建并使用的IoC容器。

@SpringBootApplication
public class CanalApplication {
    public static void main(String[] args) {
        SpringApplication.run(CanalApplication.class,args);
    }
}

@SelectProvider(type=xxxx.class,method=”xxxx”)

1.@SelectProvider声明在方法上,声明的方法定义在Mapper对应的的interface中,type 是获取sql语句的指定类,method 是指定类中要执行获取sql语句的方法。
2.@SelectProvider注解用于生成查询用的sql语句,有别于@Select注解,@SelectProvide指定一个Class及其方法,并且通过调用Class上的这个方法来获得sql语句。type的类必须要能够通过无参的构造函数来初始化且type类中的方法必须是public的,返回值必须为String3.对于只有一个参数的情况下,声明方法的参数如果使用@Param注解的话那么相应type类中的method方法必须接受Map<String, Object>做为参数,在超过一个参数的情况下,声明方法的参数如果使用@Param@SelectProvide方法也必须接受Map<String, Object>做为参数,参数使用了@Param注解,那么参数在Map中以@Param的值为key,参数没有使用@Param注解,那么参数在Map中以参数的顺序为key。

@InsertProvider

1.@SelectProvider

@UpdateProvider

1.@SelectProvider

@DeleteProvider

1.@SelectProvider

@GeneratedValue

1.@GeneratedValue注解存在的意义主要就是为一个实体生成一个唯一标识的主键、@GeneratedValue提供了主键的生成策略。
2.@GeneratedValue注解有两个属性,分别是strategy和generator。

generator属性的值是一个字符串,默认为"",其声明了主键生成器的名称(对应于同名的主键生成器@SequenceGenerator@TableGenerator)。

strategy属性:提供四种值:

-AUTO,把主键生成策略交给持久化引擎,持久化引擎会根据数据库在以上三种主键生成策略中选择其中一种。此种主键生成策略比较常用,由于JPA默认的生成策略就是GenerationType.AUTO,所以使用此种策略时.可以显式的指定@GeneratedValue(strategy = GenerationType.AUTO)也可以直接@GeneratedValue-IDENTITY,此种主键生成策略就是通常所说的主键自增长,数据库在插入数据时,会自动给主键赋值,比如MYSQL可以在创建表时声明"auto_increment" 来指定主键自增长。该策略在大部分数据库中都提供了支持(指定方法或关键字可能不同),但还是有少数数据库不支持,所以可移植性略差。Oracle不支持这种方式。
-SEQUENCE,在某些数据库中,不支持主键自增长,比如Oracle,其提供了一种叫做"序列(sequence)"的机制生成主键。此时,GenerationType.SEQUENCE就可以作为主键生成策略。该策略的不足之处正好与TABLE相反,由于只有部分数据库(Oracle,PostgreSQL,DB2)支持序列对象,所以该策略一般不应用于其他数据库。类似的,该策略一般与另外一个注解一起使用@SequenceGenerator,@SequenceGenerator注解指定了生成主键的序列.然后JPA会根据注解内容创建一个序列(或使用一个现有的序列)-Table,使用一个特定的数据库表格来保存主键,持久化引擎通过关系数据库的一张特定的表格来生成主键,这种策略的好处就是不依赖于外部环境和数据库的具体实现,在不同数据库间可以很容易的进行移植,但由于其不能充分利用数据库的特性,所以不会优先使用。该策略一般与另外一个注解一起使用@TableGenerator,@TableGenerator注解指定了生成主键的表(可以在实体类上指定也可以在主键字段或属性上指定),然后JPA将会根据注解内容自动生成一张表作为序列表(或使用现有的序列表)。如果不指定序列表,则会生成一张默认的序列表,表中的列名也是自动生成,数据库上会生成一张名为sequence的表(SEQ_NAME,SEQ_COUNT)。序列表一般只包含两个字段:第一个字段是该生成策略的名称,第二个字段是该关系表的最大序号,它会随着数据的插入逐渐累加。

@GeneratedValue(strategy = GenerationType.TABLE)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值