SSM框架-注解站
一.SSM注解汇总
1.MyBatis注解
1.1常见注解
-
@Mapper:为了把mapper这个DAO交给Spring容器管理,一般不加,我们在XXXMapper.xml中的namespace中已经指定过了。
-
@Param(value属性值为键,以参数为值):@Param注解为相应的查询接口传递值,但是具体SQL语句中的参数要与@Param中定义的参数保持一致,标识mapper接口中的方法参数。
-
@lnsert:实现新增
-
@Update:实现更新
-
@Delete:实现删除
-
@Select:实现查询
-
@Result:实现结果集封装
-
@Results:可以与@Result一起使用,封装多个结果集
-
@One:实现一对一结果集封装
-
@Many:实现一对多结果集封装
@Select("SELECT * FROM account_info WHERE username=#{username}")
@Results({
@Result(column = "account",property = "account"),
@Result(column = "username",property = "username"),
@Result(column = "password",property = "password"),
@Result(column = "account",
property = "userRole",
javaType = UserRole.class,
one = @One(select="com.cqgcxy.mapper.UserRoleMapper.selectByAccount")
)
})
AccountInfoDto selectAccountAndRole(String username);
1.2其他注解
-
@Options:用于指定一些高级选项,比如设置缓存、批量操作等。
@Insert("INSERT INTO orders(order_no, user_id) VALUES(#{orderNo}, #{userId})") @Options(useGeneratedKeys = true, keyProperty = "id") int insert(Order order);
-
@MapKey:用于指定查询结果集中作为Map的key的属性。
@Select("SELECT * FROM orders WHERE user_id = #{userId}") @MapKey("orderNo") Map<String, Order> getOrdersByUserId(@Param("userId") Long userId);
-
@SelectKey:用于在插入操作时获取生成的主键值。
@Insert("INSERT INTO users(username, password) VALUES(#{username}, #{password})") @SelectKey(statement = "SELECT last_insert_id()", keyProperty = "id", before = false, resultType = Long.class) int insert(User user);
-
@Flush:用于在执行SQL语句后刷新缓存。(只能用于查询方法,只对开启了二级缓存起作用)
@Select("SELECT * FROM users WHERE id = #{id}") @Flush User getUserById(@Param("id") Long id);
2.Spring注解
2.1Spring常见注解
- @Component:用于标注一个类为组件类,通常与@Autowired配合使用进行自动装配。
- @Service:用于标注一个类为服务类,通常作为业务逻辑层的实现类使用。
- @Repository:用于标注一个类为数据访问层的实现类,通常与@Mapper或@MapperScan一起使用。
- @Autowired:用于进行自动装配,将一个类的实例自动注入到另一个类中。
- @Qualifier:用于指定要注入的实例名称,与@Autowired一起使用。
- @Value:用于注入配置文件中的属性值。
- @RequestMapping:用于映射请求路径和处理方法,可以指定HTTP请求方法、请求参数等信息。
- @PathVariable:用于获取URL路径中的变量值。
- @RequestParam:用于获取HTTP请求参数的值。
- @ResponseBody:用于将方法返回值转换为JSON格式并返回客户端。
- @Controller:用于标注一个类为控制器类,通常用来处理HTTP请求。
- @RestController:用于标注一个类为RESTful风格的控制器类,通常用来处理HTTP请求并返回JSON格式的数据。
- @Configuration:用于标注一个类为配置类,通常与@Bean配合使用。
- @Bean:用于将一个方法的返回值作为Bean注册到Spring容器中。
- @Import:用于导入其他配置类。
- @Aspect:用于定义切面(Aspect),通常与@Before、@After、@Around等注解一起使用来实现面向切面编程(AOP)。
- @Transactional:用于标注事务处理相关的方法或类,表明该方法或类需要进行事务管理。
2.2Spring其他注解
-
@Conditional:用于条件是否装配Bean(满足
MyCondition
的条件)@Configuration public class AppConfig { @Bean @Conditional(MyCondition.class) public MyBean myBean() { *// 创建并返回一个MyBean实例* } }
-
@Scheduled:用于标注一个方法为定时任务方法,可以指定方法执行的时间间隔、固定延迟等。
@Component public class helloScheduler { @Scheduled(fixedRate = 5000) *// 每隔5秒执行一次* public void myTask() { *// 执行定时任务的逻辑* } }
-
@EnableScheduling:用于开启定时任务的支持,通常与@Configuration一起使用。
-
@EnableAsync:用于开启异步方法的支持,可以使标注为@Async的方法在异步执行。
-
@Validated:用于标注在方法参数、方法、类上,表示开启参数校验功能,通常与@Valid等注解一起使用。
-
@ExceptionHandler:用于捕获并处理异常,通常用在Controller层的方法上。
-
@ControllerAdvice:用于定义全局的异常处理器,可以统一处理应用程序中抛出的异常。
-
@RequestScope、@SessionScope、@ApplicationScope:用于定义Bean的作用域范围,分别表示请求范围、会话范围和应用程序范围
3.SpringMVC注解
3.1SpringMVC常见注解
@Controller
:用于标识一个类是控制器,处理HTTP请求。该注解通常与@RequestMapping
一起使用。@RestController
:与@Controller
类似,但其返回的是RESTful风格的响应,会自动将响应数据转换为JSON/XML格式。@RequestMapping
:用于映射请求路径和方法,可以标注在类和方法上。可以指定请求的URL、HTTP方法、请求头等条件,以及指定处理方法的返回视图。@GetMapping
、@PostMapping
、@PutMapping
、@DeleteMapping
:这些注解是对@RequestMapping
的缩写形式,用于指定HTTP方法的映射。@PathVariable
:用于获取请求路径中的参数值,将其绑定到方法参数。@RequestParam
:用于获取请求参数的值,可以指定参数名称、默认值等。@RequestBody
:用于将请求体中的数据绑定到方法参数,通常用于接收JSON/XML格式的请求数据。@ResponseBody
:用于将方法返回值直接作为响应体返回,可以自动将对象转换为JSON/XML格式。@ModelAttribute
:用于将请求中的属性绑定到方法参数或方法返回值,可以用于表单提交或请求数据的预处理。@Valid
:用于开启参数校验,通常与@Validated
一起使用。可以在方法参数上标注,表示需要对该参数进行校验。@InitBinder
:用于配置WebDataBinder,可以自定义数据绑定和格式化操作。@ExceptionHandler
:用于捕获并处理异常,通常用在Controller层的方法上。@ControllerAdvice
:用于定义全局的异常处理器,可以统一处理应用程序中抛出的异常。@SessionAttributes
:用于指定哪些模型属性需要存储到会话中。@RequestHeader
:用于获取请求头的值,将其绑定到方法参数。@CookieValue
:用于获取cookie的值,将其绑定到方法参数。@EnableWebMvc
:通常与@Configuration
一起使用,用于开启Spring MVC的支持,可以自定义配置Web MVC功能。
3.2SpringMVC其他注解
-
@CrossOrigin
:用于处理跨域请求,可以标注在Controller类或方法上,指定允许的跨域请求来源、方法和头信息。@RestController public class helloController { @CrossOrigin(origins = "http://localhost:8080") @GetMapping("/hello") public String hello() { return "Hello, World!"; } }
-
@Async
:标注在方法上,表示该方法是一个异步方法,可以在方法内部执行异步操作。@RestController public class MyController { @Autowired private MyService myService; @Async @GetMapping("/async") public CompletableFuture<String> async() { return myService.doSomethingAsync(); } } @Service public class MyService { @Async public CompletableFuture<String> doSomethingAsync() { *// 异步操作* return CompletableFuture.completedFuture("Done!"); } }
-
@ResponseStatus
:用于定义请求处理完成后的HTTP响应状态码和原因。@RestController public class MyController { @GetMapping("/notfound") public void notFound() throws NotFoundException { throw new NotFoundException("Not found"); } @ResponseStatus(HttpStatus.NOT_FOUND) @ExceptionHandler(NotFoundException.class) public void handleNotFound() {} }
-
@SessionScope
(用户打开浏览器时创建该Bean实例,直到用户关闭浏览器时才销毁该实例)、@RequestScope
、@ApplicationScope
:这些注解用于定义Bean的作用域范围,分别表示会话范围、请求范围和应用程序范围。 -
@PathVariableMap
:用于获取所有路径参数的Map集合。 -
@MatrixVariable
:用于获取路径中的矩阵变量,即URL中分号分隔的键值对。@RestController @RequestMapping("/books/{bookId}") public class BookController { @GetMapping(path = "/authors/{authorId}") public String getAuthor( @PathVariable int bookId, @MatrixVariable(name = "name") String name, @MatrixVariable(name = "age") int age) { return "Book: " + bookId + ", Author: " + name + ", " + age; } }
-
@RequestPart
:用于处理multipart/form-data类型的请求,将请求中的部分内容绑定到方法参数。
@RestController
@RequestMapping("/files")
public class FileController {
@PostMapping("/upload")
public String uploadFile(
@RequestPart("file") MultipartFile file) {
*// 处理上传的文件*
return "File uploaded successfully!"; } }
二.用注解搭建SSM-Maven项目
详细步骤:
-
创建Maven项目: 使用Maven的命令行工具或者IDE(如IntelliJ IDEA、Eclipse)创建一个新的Maven项目。
-
添加依赖: 在项目的
pom.xml
文件中添加Spring、Spring MVC、MyBatis等框架所需的依赖项:<dependencies> <!-- springmvc--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.8</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.3.8</version> </dependency> <!-- jackson,json相关(响应数据)--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.0</version> </dependency> <!-- servlet(web.xml) --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!-- 数据库--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> <!-- mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <!-- 连接池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.4</version> </dependency> <!-- data--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version> </dependency> </dependencies>
-
加载Spring配置类: 配置DispatcherServlet和字符编码过滤器等内容:
public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
//加载Spring配置类
protected Class<?>[] getRootConfigClasses() { return new Class[]{SpringConfig.class}; } //加载SpringMVC配置类 protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}
//设置SpringMVC请求地址拦截规则
protected String[] getServletMappings() {
return new String[]{“/”};
}
//设置post请求中文乱码过滤器
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding(“utf-8”);
return new Filter[]{filter};
}
}
4.创建SpringMVC配置类替换springmvc.xml 作用:配置视图解析器、MVC注解扫描等内容
java
@Configuration
@ComponentScan("com.cqgcxy.controller")
@EnableWebMvc
public class SpringMvcConfig {
}
5.创建SpringConfig配置类替换applicationContext.xml
作用:配置数据源、事务管理器、扫描包路径等内容
@Configuration
@ComponentScan({"com.cqgcxy.service"})
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class,MyBatisConfig.class})
@EnableTransactionManagement
public class SpringConfig {
}
6.创建JdbcConfig配置类(设置数据源)
public class JdbcConfig {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource){
DataSourceTransactionManager ds = new DataSourceTransactionManager();
ds.setDataSource(dataSource);
return ds;
}}
7.创建MybatisConfig配置类(配置扫描包,数据源等)
public class MyBatisConfig {
@Bean
public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
// 设置数据源
factoryBean.setDataSource(dataSource);
// 设置别名
factoryBean.setTypeAliasesPackage("com.cqgcxy.entity");
// 开启驼峰命名
Configuration configuration = new Configuration();
configuration.setMapUnderscoreToCamelCase(true);
// 设置
factoryBean.setConfiguration(configuration);
return factoryBean;
}
//MapperScannerConfigurer(mapper文件扫描)
@Bean
public MapperScannerConfigurer mapperScannerConfigurer(){
MapperScannerConfigurer msc = new MapperScannerConfigurer();
// 设置扫描包
msc.setBasePackage("com.cqgcxy.mapper");
return msc;
}
}
8.创建Controller、Service、Mapper等类: 创建相应的Controller、Service、Mapper接口和Mapper映射文件,并进行相应的注解配置。
9.编写业务逻辑和SQL语句: 在Service层编写业务逻辑处理,在Mapper接口对应的Mapper映射文件中编写SQL语句。
10.部署和测试: 部署项目到服务器,启动服务器并进行测试,确保项目能够正常运行。