Java中常见注解的笔记(持续更新):
一、Java基础注解
1. @Override
用来标识方法重写,使得在调用父类方法时可以调用重写后的方法。
public class Animal {
public void move() {
System.out.println("动物在移动");
}
}
public class Dog extends Animal {
@Override
public void move() {
System.out.println("狗在奔跑");
}
}
在上面的例子中,@Override
注解标识了Dog
类的move
方法重写了父类Animal
中的move
方法。
2. @Deprecated
用来标识该方法或类已过时,不建议使用。
@Deprecated
public class OldClass {
// ...
}
public class NewClass {
/**
* @deprecated 不推荐使用
*/
@Deprecated
public void oldMethod() {
// ...
}
}
在上面的例子中,@Deprecated
注解标识了类OldClass
已过时,方法oldMethod
也已过时,不建议使用。
3. @SuppressWarnings
用来抑制编译器警告。
@SuppressWarnings("unchecked")
List<String> list = new ArrayList();
在上面的例子中,@SuppressWarnings
注解抑制了编译器警告,List<String> list = new ArrayList()
语句不再发出警告信息。
4. @SafeVarargs
用来标识泛型可变参数构造器或方法声明中的泛型类型是安全的。
@SafeVarargs
public final <T> void doSomething(T... args) {
// ...
}
在上面的例子中,@SafeVarargs
注解标识泛型可变参数类型是安全的,编译器就不会再发出警告信息。
5. @FunctionalInterface
用来标识接口是函数式接口,即只包含一个抽象方法的接口。
@FunctionalInterface
public interface GreetingService {
void greet(String name);
}
在上面的例子中,@FunctionalInterface
注解标识接口GreetingService
是一个函数式接口,只包含一个抽象方法greet
。
二、MyBatis注解
1. @Select
用于映射一个查询SQL。
@Select("SELECT * FROM user WHERE id = #{id}")
User getUserById(Long id);
在上面的例子中,@Select
注解表示将SQL字符串映射到getUserById
方法上,其中#{id}
表示占位符,由方法参数进行替换。
2. @Update
用于映射一个更新SQL。
@Update("UPDATE user SET name = #{name} WHERE id = #{id}")
int updateUserById(Long id, String name);
在上面的例子中,@Update
注解表示将SQL字符串映射到updateUserById
方法上,其中#{id}
和#{name}
表示占位符,由方法参数进行替换。
3. @Insert
用于映射一个插入SQL。
@Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")
int addUser(User user);
在上面的例子中,@Insert
注解表示将SQL字符串映射到addUser
方法上,其中#{name}
和#{age}
表示占位符,由User
对象的属性进行替换。
4. @Delete
用于映射一个删除SQL。
@Delete("DELETE FROM user WHERE id = #{id}")
int deleteUserById(Long id);
在上面的例子中,@Delete
注解表示将SQL字符串映射到deleteUserById
方法上,其中#{id}
表示占位符,由方法参数进行替换。
三、Spring注解
1. @Autowired
自动装配,用于自动注入依赖。
@Service
public class UserServiceImpl继续:
```java
@Autowired
private UserDao userDao;
public User getUserById(Long id) {
return userDao.getUserById(id);
}
在上面的例子中,@Autowired
注解表示自动注入UserDao
组件,不需要通过new
关键字手动创建对象。
2. @Service
用于标识服务层组件。
@Service
public class UserServiceImpl implements UserService {
// ...
}
在上面的例子中,@Service
注解表示该类是一个服务层组件,可以被其他组件进行自动注入。
3. @Controller
用于标识Controller层组件。
@Controller
@RequestMapping("/user")
public class UserController {
// ...
}
在上面的例子中,@Controller
注解表示该类是Controller层组件,可以处理/user
请求的数据。
4. @RequestMapping
用于映射请求路径和请求方法。
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String userList() {
// ...
}
}
在上面的例子中,@RequestMapping
注解表示请求路径为/user/list
,请求方法为GET
,对应处理方法是userList
。
四、Spring Boot注解
1. @SpringBootApplication
用于标识启动类,包含了@Configuration
、@EnableAutoConfiguration
、@ComponentScan
三个注解。
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
在上面的例子中,@SpringBootApplication
注解表示该类是Spring Boot应用程序的启动类。
2. @EnableAutoConfiguration
自动配置,自动根据类路径下的依赖以及项目定义的Bean进行自动配置。
3. @RestController
类似于@Controller
,但是其中的所有方法都返回JSON
格式的数据。
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
return userService.getUserById(id);
}
}
在上面的例子中,@RestController
注解表示该类可以处理/user
请求,并返回JSON
格式的数据。
4. @RequestMapping
用于映射请求路径和请求方法。
@RestController
@RequestMapping("/user")
public class UserController {
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
// ...
}
}
在上面的例子中,@RequestMapping
注解表示请求路径为/user/{id}
,请求方法为GET
,对应处理方法是getUserById
。
五、MySQL注解
1. @Table
用于标识表名。
@Table(name = "user")
public class User {
// ...
}
在上面的例子中,@Table
注解表示该实体类对应的表名为user
。
2. @Column
用于标识字段名。
@Table(name = "user")
public class User {
@Column(name = "user_id")
private Long id;
// ...
}
在上面的例子中,@Column
注解表示该字段对应的列名为user_id
。
3. @GeneratedValue
用于标识该字段自动生成。
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// ...
}
在上面的例子中,@GeneratedValue
注解表示该字段自动生成,由数据库自动递增。
4. @Id
用于标识主键字段。
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// ...
}
在上面的例子中,@Id
注解表示该字段是主键。