SSM: 常用注解 | 标签总结说明 (Spring、MyBatis、SpringMVC、SpringBoot、SpringCloud)

目录

总结

一、Spring:IoC、AOP

二、SpringMVC

三、SpringBook

四、SpringCloud


常用端口:

3306:Mysql 默认端口

9066:Mysql 管理端口

8080:Tomcat  轻量级服务器

8080:Jetty  比Tomcat还轻量级的服务器

6379:Redis   NoSql数据库,缓存

80:Nginx   负载均衡反向代理

2181:Zookeeper   注册中心

5672 (java链接) 15672(管理插件) 25672(集群间通信):RabbitMQ

9527:gateway  网关

9001:Eureka  注册中心

9411:zipkin (Sleuth链路追踪) 负责数据展示

8848:Nacos  注册与配置中心 (2.0需要 9848、9849)

8080:Sentinel  熔断与限流

8719:应用与Sentinel控制台交互的端口

27017 :MongoDB

9200 9300:ElasticSearch

5601:kibana

8066:myCat

9000:minio 服务端口

9001:minio 客户端端口(浏览器)

5044:logstash 日志收集

9876:rocketMq | nameserver

@FunctionalInterface:函数式接口

总结

一、Spring:IoC、AOP

  • spring.xml 标签配置:
<!--指定注解扫描基准路径  会自动扫描base-package及其子包下的注解-->
<context:component-scan base-package="com.atguigu"></context:component-scan>
<!-- 开启基于注解的AOP功能 -->
<aop:aspectj-autoproxy/>

<!-- 启动AOP自动代理
 proxy-target-class:底层采用什么动态代理技术
 false: 默认  有接口使用JDK动态代理,没有接口使用CGLIB
 true:不管是否有接口,都使用CGLIB-->
<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
  • 创建Bean的注解:

@Component  标记该类,spring配置文件中base-package 扫描后会创建对象并装配到IoC容器

@Controller  标记控制器组件(控制层),MVC中进行了相关判断,不能换

@Service  标记业务逻辑组件(业务逻辑层)

@Repository  标记持久化层组件(持久化、数据访问层)

@Configuration  说明这是一个配置类,要达到全注解开发还需要使用 @ComponentScan 

以上注解本质上相同,只是在@Component  基础上换了名字提高了代码的可读性。 

  • 注入Bean的注解:

@Value  基本类型的参数注入赋值,可以用在属性、set方法上,可以使用${} SpringEL表达式
前提:当前类需要在Spring容器中!

@Autowired  引用类型参数注入赋值, 可以用在属性、set、构造方法上。(先byType再byName)

@Qualifier  根据指定的Bean的name进行匹配注入;不会单独使用,而是和@Autowired配合使用
(1)在使用@Autowire自动注入的时候,加上@Qualifier(“test”)可以指定注入哪个对象;
(2)可以作为筛选的限定符,我们在做自定义注解时可以在其定义上增加@Qualifier

@Resource 依赖注入,JDK提供,通用。 (先ByName再ByType)

  • 全注解开发:

@ComponentScan()  组件扫描根据定义的扫描路径,把符合扫描规则的类装配到IoC容器中。

  • 整合Junit4 测试框架:

@RunWith(SpringJUnit4ClassRunner.class)  指定Spring为Junit提供的运行器

@ContextConfiguration  指定Spring配置文件的位置

单个文件
@ContextConfiguration(locations = {"classpath:spring.xml"})
@ContextConfiguration("classpath:spring.xml") (locations{}也可省略)
@ContextConfiguration(classes = SimpleConfiguration.class)

多个文件
@ContextConfiguration(locations = {"classpath:spring.xml","classpath:spring2.xml"})
  • Junit5测试框架

@SpringJUnitConfig (locations = "classpath:spring.xml")   复合注解,底层包含 ExtendWith

@ExtendWith(SpringExtension.class)  Junit4为RunWith,Junit5为ExtendWith

@ContextConfiguration(locations = "classpath:spring.xml")

@SpringJUnitConfig(locations = "classpath:springmvc.xml")
//@ExtendWith(SpringExtension.class)
//@ContextConfiguration(locations = "classpath:springmvc.xml")
  • AOP 面向切面编程:声明切面类与通知方法

@Aspect  表示这个类是一个切面类

@Before(value)  前置通知方法

@AfterReturning(value)  返回通知方法

@AfterThrowing(value)  异常通知方法

@After(value)  后置通知方法

@Around(value):环绕通知方法 对应整个try...catch...finally结构,包括四种通知的所有功能
需要在对应方法声明 ProceedingJoinPoint 类型的形参,proceed() 调用切入点的方法。

value()属性:指定切入点表达式,由切入点表达式控制当前通知方法要作用在哪一个目标方法上

    @Aspect//这是一个切面类
    public class LogAspect {
    //前置通知: 指定的方法在执行之前要做什么 (切入点,表达式)
    @Before("execution(* com.atguigu.service.impl.CalculatorImpl.*(..))")
    public void beforeLog(){
        System.out.println("[日志] xxx 方法开始执行,参数是:");
    }
  • 创建IOC容器对象

BeanFactory  IoC容器的基本实现类
ApplicationContext  BeanFactory 的子接口,更多功能。

ClassPathXmlApplicationContext  根据XML配置文件创建IoC容器对象

// ClassPathXmlApplicationContext根据XML配置文件创建IOC容器对象
private ApplicationContext iocContainer = new ClassPathXmlApplicationContext("applicationContext.xml");

AnnotationConfigApplicationContext  根据XML配置类创建IoC容器对象 (全注解开发)

​// AnnotationConfigApplicationContext根据配置类创建IOC容器对象
private ApplicationContext iocContainerAnnotation = new AnnotationConfigApplicationContext(MyConfiguration.class);

WebApplicationContext  Web项目 

  • 切入点表达式语法

execution (* com.atguigu...method(int i))

  • 重用切入点

@Pointcut ("execution(切入点表达式)")

需要使用在一个方法上,使用时直接传入该方法即可

  • 获取连接点信息

获取方法信息:通知方法加入形参JoinPoint joinPoint方法内调用 getSignature()

获取方法返回值@AfterReturning中通过 returning属性设置名称,通知方法中声明对应名称Object类型 形参

获取方法抛出异常:@AfterThrowing中声明 throwing 属性设定名称,通知方法中声明对应名称声明 Exception类型 形参

环绕通知:声明 ProceedingJoinPoint 类型的形参,里面包含各种方法,可通过proceed() 调用切入点的方法。

  • 多个切面优先级

@Order(int i)  数值越小越早执行

  • 声明式事物

@Transactional:对当前类所有方法、或当前方法应用事物

相关属性:

只读:readOnly = true 

超时:timeout = ?

回滚异常类型:rollbackFor = Exception.class  

事物隔离级别:Isolation

事物传播行为:propagation

  • 配置事物管理器、注解驱动:
    <!--配置事物管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!--配置事物的注解驱动
    transaction-manager: 指定事物管理器,如果事物名称是transactionManager,可以省略
    proxy-target-class="true: 不管是否有接口,底层都使用CGLIB
                        false: 默认 有接口使用JDK动态代理,没有使用CGLIB
    -->
    <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
    //注意:要选tx命名空间的

二、SpringMVC

  • web.xml 配置总控制器
    <!--配置总控制器:springMVC中唯一的Servlet  DispatcherServlet-->
	<servlet>
		<servlet-name>dispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
            <!--读取配置文件-->
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:springmvc.xml</param-value>
		</init-param>
		<!--总控制器启动时机-->
		<load-on-startup>1</load-on-startup>
	</servlet>
    <!--Servlet映射路径-->
	<servlet-mapping>
		<servlet-name>dispatcherServlet</servlet-name>
		<!--重点:总控制器访问路径-->
		<!--<url-pattern>*.action</url-pattern>-->
        <!--可用于 restful风格-->
		<url-pattern>/</url-pattern>
	</servlet-mapping>

	<!--过滤器: 解决post中文乱码问题-->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>utf-8</param-value>
		</init-param>
		<!--强制请求编码(可选)-->
		<init-param>
			<param-name>forceRequestEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
		<!--强制响应编码(可选)-->
		<init-param>
			<param-name>forceResponseEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<!--过滤器映射-->
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern><!--过滤路径-->
	</filter-mapping>
  • springmvc.xml配置 (SpringMVC配置文件)
<!-- 自动扫描包 目前@Controller注解-->
<context:component-scan base-package="com.atguigu.controller"></context:component-scan>

<!--(检查员) 总控制器的路径如果是/,会导致静态资源无法访问,配置该选项可以访问 (但是动态又访问不了了)-->
<mvc:default-servlet-handler></mvc:default-servlet-handler>

<!--启用mvc的注解驱动,这是标配 (使动态资源也可以访问)-->
<mvc:annotation-driven></mvc:annotation-driven>

<!--·视图控制器,进行页面跳转,就不用专门写方法了-->
<mvc:view-controller path="/hello/toLogin" view-name="login"></mvc:view-controller>

<!-- 配置Thymeleaf视图解析器-->
    <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <property name="order" value="1"/>
        <property name="characterEncoding" value="UTF-8"/>
        <property name="templateEngine">
            <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                <property name="templateResolver">
                    <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                        <!-- 视图前缀 -->
                        <property name="prefix" value="/WEB-INF/templates/"/>
                        <!-- 视图后缀 -->
                        <property name="suffix" value=".html"/>
                        <property name="templateMode" value="HTML5"/>
                        <property name="characterEncoding" value="UTF-8" />
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
  • 日志

@Slf4j  生成日志记录器

底层自动生成
private Logger logger = LoggerFactory.getLogger(HelloController.class)
  • 接收请求

@RequestMapping()   映射请求路径,接收所有请求,声明在类上表示所有方法的请求前缀

@GetMapping()  只接收Get请求

@PostMapping()  只接收POST请求

@PutMapping ("/{empId}")        处理put请求

@DeleteMapping ("/{empId}")   处理delete请求

  • 获取请求参数

@RequestParam()   接收请求路径问号后的参数,参数名和形参名一致可以省略
required = false   请求参数必须,有则传入,没有不报错。默认为 true
defaultValue = "missing"   请求参数默认值

@RequestHeader ("Referer")   获取请求消息头中的具体数据

@RequestBody  获取请求体

@CookieValue(value = "JSESSIONID")   获取当前请求中的 Cookie 数据,注意:参数还需加上 HttpSessioncookie数据存放在客户的浏览器上,session数据放在服务器,session的id存储在cookie中。

@PathVariable("empId")  映射 URL 绑定的占位符('/'),绑定到xxx传参中。资源环境变量(资源所在的位置)。一般与 @GetMapping(/abc/{xxx}) 一起使用。

  • 页面跳转控制

@RequestMapping()   映射请求路径,接收

return,默认为请求转发。

转发、重定向路径前添加 forward:、redirect: 后,路径不会再拼接前后缀(不会被thymeleaf解析)

    //请求转发
    @RequestMapping("/dispatcher2")
    public String dispatcher2(){
        return "forward:/WEB-INF/templates/result.html";
    }
    //重定向
    @RequestMapping("/redirect1")
    public String redirect1(){
        return "redirect:/WEB-INF/templates/result.html";
  • Restful风格

@PathVariable("empId")  映射 URL 绑定的占位符('/'),绑定到xxx传参中。资源环境变量(资源所在的位置)。一般与 @GetMapping(/abc/{xxx}) 一起使用。

@GetMapping ("/{empId}")        处理get请求

@PostMapping ("/{empId}")      处理post请求

@PutMapping ("/{empId}")        处理put请求

@DeleteMapping ("/{empId}")   处理delete请求

传统的方式:@RequestMapping(value = “/get/{id}”, method = RequestMethod.GET)

  • lombok

@Data    集成了@Getter和@Setter、@ToString、@EqualsAndHashCode

@RequiredArgsConstructor这几个注解与一身,是一个非常强大的注解,这个注解更可以简化注解的代码量

@NoArgsConstructor    在JavaBean中使用,注解会生成对应的无参构造方法

@AllArgsConstructor    在JavaBean中使用,注解会生成对应的有参构造方法
 

  • Ajax

@ResponseBody   响应体。将方法的返回值以特定的格式写入到response的body区域,进而将数据返回给客户端,不再进行请求转发页面跳转异步获取数据时使用

类上的 @ResponseBody 注解可以和 @Controller 注解合并为 @RestController 注解。所以使用了 @RestController 注解就相当于给类中的每个方法都加了 @ResponseBody 注解。

  • 异常映射

@ExceptionHandler  声明为异常处理类

  • Dubbo 框架

@Service  发布项目到订阅中心

@Reference   调用远程服务: RPC,从注册中心订阅服务 (Autowired只能注入本项目的bean,Reference可以远程调用。dubbo底层tcp网络编程实现)

三、SpringBook

@SpringBootApplication  声明当前项目是一个SpringBoot项目   在主程序类声明
主程序类其实也是配置类,@SpringBootApplication底层有@SpringBootConfiguration
参数:exclude = DataSourceAutoConfiguration.class)//取消数据源  排除自动配置类

@SpringBootConfiguration  声明一个配置类

@Bean  主要用在@Configuration注解的类里,等同于在xml中配置

@ConfigurationProperties(prefix = "xxx")  可以将一些配置属性批量注入到bean对象(需要提供get set方法)

@Value("${spring.jdbc.datasource.url}")  给基本属性赋值 (无需getset方法) 可以使用SpringEL表达式

@ConfigurationProperties(prefix = "spring.jdbc.datasource")   设置相关类生效,即创建对象初始化。
@EnableConfigurationProperties(value = {DataSourceProperties.class})  启用属性配置类,带@ConfigurationProperties属性的类要先生效 (条件化配置)

@EnableTransactionManagement   开启声明式事务

  • Spring Data JPA (底层是hibernate)

@Entity  //声明实体类

@Table (name = "t_user") //推荐使用JPA提供的注解,声明表

@Id //当前属性为主键

@GeneratedValue (strategy = GenerationType.IDENTITY)  //设置主键生成方式: auto_increment 由数据库生成

@Column (name = "id",unique = false)   //字段名,长度,不为空 字段的约束

@ConditionalOnExpression

@ConditionalOnExpression(“'true”) 当括号中的内容为true时 ,使用该注解的类被实例化
它可以和@Service、@Component、@Controller、@Repository 、@Bean 、@Configuration 等注解一起使用。可以通过SPEL 表达式、读取配置文件属性来让IOC容器选择性的扫描加入指定的某个Bean。而不是将所有实现类Bean都加入到IOC。简单来说就是按需加载,而不是全部加载。
 

@Slf4j
@ConditionalOnExpression("'${PROVINCE_SERVICE}'.equals('jiangxi')")
@Service
public class JxLocationServiceImpl implements ZjLocationService {
    ...
}

  • JUint 测试

@RunWith (SpringRunner.class)   指定Junit核心运行类

@SpringBootTest  指定这是一个Spring Boot的测试类, 运行时会自动加载Spring Boot运行环境
约定大于配置:测试类为主程序的子包,配置自动生效,否则通过可以通过classes属性指定

//@ContextConfiguration (locations = "classpath:/spring/spring-*/xml") 普通xml文件的方式

 
  • 健康监控 服务端 SpringBoot Admin组件 健康监控图形化界面

@EnableAdminServer  开启管理服务

  • SpringBoot Admin组件

@MapperScan (basePackages = "com.atguigu.dao")  通用Mapper,编译之后会生成相应的接口实现类

@MapperScan和@ComponentScan 区别

@ComponentScan是组件扫描注解,用来扫描@Controller @Service @Repository等,封装到spring容器中

@MapperScan 是扫描mapper类的注解

@MapperScan和@ComponentScan一起使用,可能会导致mapper扫描不到
需要改为@MapperScan(basePackages = {})的形式。
或者只使用@MapperScan()去扫描mapper包,让项目启动自己去扫描swagger配置类的包

  • Rabbit

@RabbitListener(queues = {“”})  监听的队列

@QueueBinding   定义一个队列、它要绑定到的交换机和一个可选的绑定键

@Queue(value=)  指定绑定的队列

@Exchange(value=)   指定绑定的交换机

    //接收消息
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(value = MqConst.QUEUE_MSM_ITEM, durable = "true"),
            exchange = @Exchange(value = MqConst.EXCHANGE_DIRECT_MSM),
            key = {MqConst.ROUTING_MSM_ITEM}
    ))
    public void send(MsmVo msmVo, Message message, Channel channel) {
        msmService.send(msmVo);
    }
    /**
     *  发送消息
     * @param exchange 交换机
     * @param routingKey 路由键
     * @param message 消息
     */
    public boolean sendMessage(String exchange, String routingKey, Object message) {
        rabbitTemplate.convertAndSend(exchange, routingKey, message);
        return true;
    }

  • Rocket

@RocketMQMessageListener(consumerGroup = "CONSUMER_GPS_LOCATION_GROUP"
        , topic = "topic-iot-gps-location"
        , consumeMode = ConsumeMode.CONCURRENTLY
        , enableMsgTrace = false)

监听器,需要实现 RocketMQListener<MessageExt>

四、SpringCloud

  • Eureka 注册中心

@EnableEurekaServer   声明当前应用为Eureka服务端  声明在主启动类

@EnableEurekaClient  声明当前应用80为Eureka(7001)的客户端  声明在主启动类

  • Ribbon 负载均衡

@LoadBalanced  RestTemplate + Ribbon 实现远程调用和负载均衡(轮询)  声明在配置类RestEmplate (Feign、Gateway 底层集成Ribbon,无需声明)

@RibbonClient (name = "CLOUD-PAYMENT-SERVICE",configuration = MySelfRule.class)  自定义负载均衡规律  用在主启动类 传入自定义配置类

  • OpenFeign 服务接口远程调用

@EnableFeignClients  启用OpenFeign组件远程调用功能  用在主启动类

@FeignClient("CLOUD-PAYMENT-SERVICE")   指定调用微服务的名称 用在服务接口上

  • hystrix 降级熔断限流

@EnableCircuitBreaker   开启降级熔断功能    声明在主启动类

@EnableHystrix    底层组合代替了@EnableCircuitBreaker),消费者feign远程调用  声明在主启动类

@HystrixCommand (fallbackMethod = "payment_TimeoutHandler",commandProperties = {
            //指定降级方法名,5秒钟后超时执行
            @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="5000")
    })  声明在要降级处理的方法上

@DefaultProperties (defaultFallback = "globalHandler")  指定全局处理方法  声明在类上

@HystrixCommand   开启降级熔断功能(配置,开启断路器)

@HystrixCommand(fallbackMethod = "paymentCircuitBreaker_fallback",commandProperties = {

        @HystrixProperty(name = "circuitBreaker.enabled",value = "true"),  //是否开启断路器

        @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "20"),   //当快照时间窗(默认10秒)内达到此数量才有资格打开断路,默认20个

        @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "50000"),  //断路多久以后开始尝试是否恢复,默认5s

        @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "50"), //出错百分比阈值,当达到此阈值后,开始短路。默认50%
})

涉及到断路器的三个重要参数:快照时间窗、请求总数阈值、错误百分比阈值。

  • hystrixDashboard 服务监控

@EnableHystrixDashboard   启用监控功能 声明在启动类

  • Gateway

没有相关注解,导入Jar包自动开启,进行yml路由配置即可

  • Alibaba Nacos服务注册和配置中心

@EnableDiscoveryClient   作用: 与 @EnableEurekaClient作用相同,声明注册中心客户端,更加通用,适用于Eureka,Nacos,Consul,Zookeeper。 声明在启动类  (spring cloud提供)

@RefreshScope  实现配置自动更新(热部署)   (spring cloud提供)  声明在Controller类上
配合@Value使用 

  • Alibaba Sentinal熔断与限流

@SentinelResource (value = "testHotKey",blockHandler = "deal_testHotKey")    与Hystrix中@HystrixCommand注解作用一致,降级熔断处理。指定资源映射名称

参数-  blockHandler:处理配置违规。 fallback:处理程序代码异常

//降级方法定义在独立的处理类中,必须是static修饰的,其他要求一致
//        1.public
//        2.返回值类型和目标方法一致
//        3.参数列表要一致,并且最后多一BlockException类型参数
//        4.方法名任意,与上面blockHandler指定一致
//注意:处理代码异常的降级方法,参数要与目标方法一致,最后多一个Throwable类型参数 (可加可不加)

  • MyBatisPlus   (baomidou)

@TableName("order_info")   指定类绑定的数据库  (声明在类)

@TableId(type = IdType.ASSIGN_ID)   配置主键策略

@TableField(fill = FieldFill.INSERT)   MP实现自动填充  

@Version MP实现乐观锁 ,还需要注册 OptimisticLockerInterceptor  乐观锁插件

@TableLogic  逻辑删除(软删除)
    value = "" 未删除的值,默认值为0
    delval = "" 删除后的值,默认值为1

  • Swagger2

常用注解

@EnableSwagger2    Swagger支持。声明在配置类“@Configuration”

@Api(description = "医院设置接口")   定义接口说明

@ApiOperation(value = "医院设置列表")   定义方法说明

@ApiModelProperty(value = "是否成功")   定义属性说明

@ApiParam(name = "id", value = "讲师ID", required = true)   定义参数说明

  • Spring 异常处理

@ControllerAdvice  spring AOP面向切面编程,对Controller进行切面环绕。作用:全局异常处理、全局数据预处理、全局数据绑定

@ExceptionHandler (Exception.class)  异常拦截器(自定义异常处理器),需要结合@ControllerAdvice一起使用 统一异常处理

  • 解决跨域问题

@CrossOrigin   controller类上加入,解决跨域问题

  • EasyExcel

@ExcelProperty (value = "学生编号",index = 0)    设置表头名称,指定映射关系(第0行)

  • Redis

@EnableCaching  配置类,开启缓存功能

@Cacheable   根据方法对其返回结果进行缓存

@CachePut   每次都会执行,并将结果存入指定的缓存中

@CacheEvict   声明在方法,清空指定的缓存。

属性/方法名

解释

value

缓存名,必填,它指定了你的缓存存放在哪块命名空间

cacheNames

与 value 差不多,二选一即可

key

可选属性,可以使用 SpEL 标签自定义缓存的key

allEntries

是否清空所有缓存,默认为 false。如果指定为 true,则方法调用后将立即清空所有的缓存

beforeInvocation

是否在方法执行前就清空,默认为 false。如果指定为 true,则在方法执行前就会清空缓存

  • mongoDB

@Document ("User")   指定集合;标识需要持久化到MongoDB的域对象

@Id   主键

@Transient //被该注解标注的,将不会被录入到数据库中。只作为普通的javaBean属性

  • 定时任务 七域表达式

@EnableScheduling //开启定时任务

@Scheduled  指定七域表达式

@ConfigurationProperties(prefix = "elasticsearch") 通过前缀,注入属性。要求属性名相同

  • ElasticSearch

实体类加入注解,会自动创建索引库 (Text才会分词 keyWord不分词)

@Document(indexName = "product",shards = 1, replicas = 1)  指定索引名、主分片、副分片,声明在映射对象上

@Id 声明主键ID

@Field(type = FieldType.Text, analyzer = "ik_max_word")  指定类型,分词词库,声明在成员变量上

 type:字段类型,取值是枚举:FieldType
 index:是否索引,布尔类型,默认是true
 store:是否存储,布尔类型,默认是false
 analyzer:分词器名称:ik_max_word (Text才会分词 keyWord不分词)

  • Seata 分布式事务

@GlobalTransactional  开启全局事务

@PostConstruct 指定一个初始化方法

@Valid  数据校验,controller中 dto类

使用@Valid相关注解非常简单,只需要在参数的实体类属性上添加如@NotBlank,@Max,@Min等注解对字段进行限制。如下

public class User{
    @NotBlank(message = "姓名不为空")
    private String username;
    @NotBlank(message = "密码不为空")
    private String password;
}

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SSM框架中,SpringSpringMVCMyBatis分别负责以下不同的任务: 1. SpringSpring是一个轻量级的容器和开发框架,用于管理和组织应用程序中的各个组件(如实体类,服务类等)。它负责提供依赖注入和控制反转的功能,以便降低组件之间的耦合性。同时,Spring还提供了一整套模块化的功能,例如事务管理,安全性控制,AOP(面向切面编程)等。 2. SpringMVCSpringMVC是基于MVC(模型-视图-控制器)设计模式的Web应用程序开发框架。它负责处理和响应来自用户的HTTP请求,并且将请求分发给适当的控制器进行处理。SpringMVC提供了一种灵活和可定制的方式来组织和处理Web请求和相应,以及在视图呈现时提供数据。 3. MyBatisMyBatis是一个开源的持久化框架,用于将Java对象映射到数据库中的数据。它通过提供一个简单的XML或注解配置方式,实现了对象与数据库之间的映射关系。MyBatis提供了丰富的SQL映射能力,包括高级的查询功能和结果集映射。它还提供了一些性能优化的功能,如缓存和延迟加载,以提高数据库访问效率。 总而言之,Spring负责统一管理应用程序的各个组件,处理依赖注入和控制反转;SpringMVC负责处理Web请求和响应,并提供灵活的视图展示方式;MyBatis负责数据库访问,通过映射Java对象和数据库数据,实现持久化操作。这三个框架在SSM框架中紧密合作,共同组成了一个完整的应用程序开发框架。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值