JavaEE开发常用注解大全(注解开发大全)

本文全面介绍了Java中各类注解的用途与示例,包括Spring框架、RESTful API、持久化、验证、Lombok、MyBatis、SpringBoot、Bean注入、Java内置注解等关键领域。

文章目录

1、最基础注解(spring-context包下的org.springframework.stereotype)

1.1、@Controller @Service @Repository @Configuration @Component

(1)解释
用于标注各个层级的注解,注入到spring容器管理
@Controller @Service @Repository @Configuration 都是@Component组合注解只是区分层级关系

注解 层级
@Controller 标注于控制层
@Service 标注于业务层
@Repository 标注于dao持久层(Mybatis使用@Mapper)
@Configuration 标注于配置层
@Component 泛指组件,当组件不好归类时可用
(2)示例

@Controller
public class UserController {
   
   

}

1.2、 @Bean

(1)解释
@Bean等价于< Bean >< /Bean >,添加的bean的id为方法名。

(2)例子

@Configuration
public class AppConfig {
   
   }
//@bean 也可以依赖其他任意数量的bean,如果TransferService 依赖 AccountRepository,我们可以通过方法参数实现这个依赖
    @Bean
    public TransferService transferService(AccountRepository accountRepository) {
   
   
        return new TransferServiceImpl(accountRepository);
    }
}

这个配置就等同于之前在xml里的配置:
@Configuration可理解为用spring的时候xml里面的< beans >标签
@Bean可理解为用spring的时候xml里面的< bean >标签

2、最基础注解(spring-web包下的org.springframework.web.bind.annotation)

2.1、@ResponseBody

(1)解释
该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中。
一般在异步获取数据时使用,通常是在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上 @Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中。

(2)例子
/例子一********/
@RequestMapping(value=“user/login”)
@ResponseBody
//将ajax(datas)发出的请求写入User对象中,返回json对象响应回去
public User login(User user) {
User user = new User();
user.setUserid(1);
user.setUsername(“MrF”);
user.setStatus(“1”);
return user ;
}
/例子二********/
@Controller
public class UserController {
@GetMapping("/hello")
@ResponseBody public String hello() {
return “hello spring”;
}
}

2.2、@RequestBody

(1)解释
将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。换句话就是:用于接收前端请求的Json参数,并且封装到对应的JavaBean

(2)例子
@RequestMapping(value = “user/login”)
@ResponseBody
// 将ajax(datas)发出的请求写入User对象中
public User login(@RequestBody User user) {
// 这样就不会再被解析为跳转路径,而是直接将user对象写入 HTTP 响应正文中
return user;
}
(3)使用时机
A) GET、POST方式提时, 根据request header Content-Type的值来判断:

application/x-www-form-urlencoded,可选(即非必须,因为这种情况的数据@RequestParam,@ModelAttribute也可以处理,当然@RequestBody也能处理);
multipart/form-data,不能处理(即使用@RequestBody不能处理这种格式的数据);
其他格式,必须(其他格式包括application/json,application/xml等。这些格式的数据,必须使用@RequestBody来处理);

B) PUT方式提交时, 根据request header Content-Type的值来判断:

application/x-www-form-urlencoded,必须;multipart/form-data,不能处理;其他格式,必须;

2.3、@RequestMapping

(1)解释
用来处理请求地址映射的注解

(2)例子

/**
* 用于类上,可以没有
*/
@RequestMapping(value = "/controllerDemo")
public class ControllerDemo {
   
   
    // 用于方法上,必须有
    @RequestMapping(value = "/methodDemo")    
    public String methodDemo() {
   
   
        return "helloWorld";
    }
}

(3)注解参数
RequestMapping注解有六个属性,下面我们把她分成三类进行说明。
1、value, method
value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明)
method:指定请求的method类型,GET、POST、PUT、DELETE等
2、consumes,produces
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
3、params,headers
params:指定request中必须包含某些参数值是,才让该方法处理。
headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。

2.4、@PostMapping

(1)解释
一个组合注解,是@RequestMapping(method = RequestMethod.POST)的缩写。

(2)例子

@PostMapping("/pay")
	public JsonResponse pay(HttpServletRequest request){
   
   }

2.5、@GetMapping

(1)解释
一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。

(2)例子

@GetMapping("/getAll/{companyName}")
public ReturnModel getAllBusByCompany(@PathVariable(value="companyName",required=false)String companyName){
   
   }

2.6、@PathVariable

(1)解释
用于接受前端url路径参数,通过路径参数作为接口接受的参数,Result风格
区分:
使用@RequestParam时,URL是这样的:http://host:port/path?参数名=参数值
使用@PathVariable时,URL是这样的:http://host:port/path/参数值

(2)例子
访问路径:localhost:8080/hello/1

  @GetMapping("/hello/{id}")
    public String func(@PathVariable String id) {
   
   
        return id;
    }

(3)参数
返回值 参数 作用
String value name别名
String name url参数的绑定值

2.7、@RequestParam

(1)解释
用于接受前端提交的参数

(2)参数
返回值 参数 作用
String value name别名
String name 请求参数对应的属性
boolean required 是否必传
Stirng defaultValue 默认值
(2)例子
访问方式:localhost:8080/hello?name=张三

  @GetMapping("/hello")
    public String func(@RequestParam(name = "name", required = false, defaultValue = "张三") String name) {
   
   
        return "OK";
    }

2.8、@RestController

(1)解释
相当于@ResponseBody + @Controller,Controller中的方法无法返回jsp页面,
返回的内容就是Return 里的内容。

3、persistence注解(javax.persistence包下的javax.persistence)

3.1、@Entity,@Table,@Id,@GeneratedValue, @Column,@Temporal,@Generated

(1)解释
@Entity表明该类是实体类,并且使用默认的orm规则,即class名即数据库表中表名,class字段名即表中的字段名。如果class名和数据库表中名字不一致就用@Table,如果class字段名和表中的字段名不一直就用@Column
@Column用来标识实体类中属性与数据表中字段的对应关系
name定义了被标注字段在数据库表中所对应字段的名称;
unique表示该字段是否为唯一标识,默认为false。如果表中有一个字段需要唯一标识,则既可以使用该标记,也可以使用@Table标记中的@UniqueConstraint。
nullable表示该字段是否可以为null值,默认为true。
insertable表示在使用“INSERT”脚本插入数据时,是否需要插入该字段的值。
updatable表示在使用“UPDATE”脚本插入数据时,是否需要更新该字段的值。insertable和updatable属性一般多用于只读的属性,例如主键和外键等。这些字段的值通常是自动生成的。
columnDefinition表示创建表时,该字段创建的SQL语句,一般用于通过Entity生成表定义时使用。(也就是说,如果DB中表已经建好,该属性没有必要使用。)
table表示当映射多个表时,指定表的表中的字段。默认值为主表的表名。
length表示字段的长度,当字段的类型为varchar时,该属性才有效,默认为255个字符。
precision和scaleprecision属性和scale属性表示精度,当字段类型为double时,precision表示数值的总长度,scale表示小数点所占的位数。

@Id表名该字段是主键,如果要开启自增主键就用@GeneratedValue
@Temporal帮Java的Date类型进行格式化,一共有三种注解值
第一种:@Temporal(TemporalType.DATE)——>实体类会封装成日期“yyyy-MM-dd”的 Date类型。
第二种:@Temporal(TemporalType.TIME)——>实体类会封装成时间“hh-MM-ss”的 Date类型。
第三种:@Temporal(TemporalType.TIMESTAMP)——>实体类会封装成完整的时间“yyyy-MM-dd hh:MM:ss”的 Date类型。

@Generated自动生成
generated= never 标明此属性值不是从数据库中生成。
generated默认值是never。
generated= insert 标明此属性值在insert的时候生成,但是不会在随后的update时重新生成。
generated= always 标明此属性值在insert和update时都会被生成

(2)例子

import org.hibernate.annotations.Generated;
import org.hibernate.annotations.GenerationTime;
import javax.persistence.*;
import java.util.Date;

@Entity
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值