SpringBoot常用注解汇总

目录

  • SpringBoot

    • controller层
    • service层
    • dao层
    • 实体类注解
    • 配置
    • 事务注解
  • 启动类
  • Mybatis
  • SpringDataJpa-主键生成策略
    • 一、SpringDataJpa标准用法
    • 二、Hibernate主键策略生成
    • 三、通过@GenericGenerator自定义主键生成策略

SpringBoot

controller层

1、@Controller
	@Controller 用来响应页面,表示当前的类为控制器。

2、@RestController
	@RestController 是@ResponseBody和@Controller的结合
	表明当前类是控制器且返回的是一组数据,不是页面
  @ResponseBody
      表示该方法的返回结果直接写入HTTP response body中
      一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析
      为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。

3、@Autowired
	这个注解的作用是将其他的类,接口引入,类似于之前的类的初始化等,用这个注解,类中或接口的方法就可以直接调用了。

4、@RequestMapping
	当前台界面调用Controller处理数据时候告诉控制器怎么操作
	作用:URL映射。
      RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
    该注解有六个属性:
          params:指定request中必须包含某些参数值是,才让该方法处理。
          headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
          value:指定请求的实际地址,指定的地址可以是URI Template 模式
          method:指定请求的method类型, GET、POST、PUT、DELETE等
          consumes:指定处理请求的提交内容类型(Content-Type),如application/json,text/html;
          produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回

5、@GetMapping
	@RequestMapping(method = RequestMethod.GET)的简写
	作用:对应查询,表明是一个查询URL映射

6、@PostMapping
	@RequestMapping(method = RequestMethod.POST)的简写
	作用:对应增加,表明是一个增加URL映射

7、@PutMapping
	@RequestMapping(method = RequestMethod.PUT)的简写
	作用:对应更新,表明是一个更新URL映射

8、@DeleteMapping
	@RequestMapping(method = RequestMethod.DELETE)的简写

9、@RequestBody和@RequestParam
  两个注解都是用于方法中接收参数使用的,两者也有一定的区别。
  @RequestBody这个一般处理的是在ajax请求中声明contentType: “application/json; charset=utf-8”时候。也就是json数据或者xml(我没用过这个,用的是json)
  @RequestParam这个一般就是在ajax里面没有声明contentType的时候,为默认的。。。urlencode格式时,用这个。
  @RequestBody可以直接将页面中的参数封装成实体类中的数据传输给后天

service层

[email protected]
		用于标注业务层组件
[email protected]
		泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

dao层

[email protected]
		是用来注解接口,@Repository注解可以标记在任何的类上,用来表明该类是用来执行与数据库相关的操作(即dao对象),并支持自动处理数据库操作产生的异常

实体类注解

@Entity实体类注解
@Table(name ="数据库表名"),这个注解也注释在实体类上,对应数据库中相应的表。
@Id、@Column注解用于标注实体类中的字段,pk字段标注为@Id,其余@Column。

SpringJPA主键生成策略
  数据库使用Oracle,常用的就是UUID和整形自增。
  UUID能达到全局唯一,而且不受数据库限制,比如Oracle的自增就要用序列来做。但是存储控件需求会更多,另外性能上不及整形。
  整形自增MySQL中只要设置一个整形列即可,Oracle中需要建立一个SEQUENCE。

public enum GenerationType {
      TABLE,
      SEQUENCE,
      IDENTITY,
      AUTO;

      private GenerationType() {
     }
}
GenerationType源码
从源码中可以看出JPA提供的四种标准主键策略TABLE,SEQUENCE,IDENTITY,AUTO

TABLE:使用一个特定的数据库表格来保存主键。
SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。 这个值要与generator一起使用,generator 指定生成主键使用的生成器(可能是orcale中自己编写的序列)。
IDENTITY:主键由数据库自动生成(主要是支持自动增长的数据库,如mysql)
AUTO:主键由程序控制,也是GenerationType的默认值。

不写GeneratedValue注解时即为GenerationType.AUTO 这时主键生成是根据数据库hibernate_sequence里的next_val来生成但我想用自已规则来生成自己的ID查了半天的资料终于解决这个问题。

建议oracle可采用UUID,需求场景需要也可使用整型自增
mysql采用整形,业务中可便于排序,把握先后
UUID:
@Id
@GeneratedValue(generator = "faceset_generator")
@GenericGenerator(name = "faceset_generator", strategy = "uuid")

主键自增为1,并且在MySQL时,不用序列,直接指定GenerationType.IDENTITY即可。
mysql整型自增:
@Id
@GenericGenerator(strategy = "GenerationType.IDENTITY")

SpringDataJpa-主键生成策略详解:参考文章最后:SpringDataJpa-主键生成策略

配置

[email protected],@Bean
		可理解为用spring的时候xml里面的<beans>标签,用@Configuration注解该类,等价 与XML中配置beans
		@Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。添加的bean的id为方法名
		例如:
		@Configuration
		public class ExampleConfiguration {
        @Value("com.mysql.jdbc.Driver")
        private String driverClassName;    

        @Value("jdbc://xxxx.xx.xxx/xx")
        private String driverUrl;    

        @Value("${root}")
        private String driverUsername;    

        @Value("123456")
        private String driverPassword;    

        @Bean(name = "dataSource")
        public DataSource dataSource() {
            BasicDataSource dataSource = new BasicDataSource();
            dataSource.setDriverClassName(driverClassName);
            dataSource.setUrl(driverUrl);
            dataSource.setUsername(driverUsername);
            dataSource.setPassword(driverPassword);
            return dataSource;
        }    

        @Bean
        public PlatformTransactionManager transactionManager() {
            return new DataSourceTransactionManager(dataSource());
        }    

	}  

注:在项目中
@Autowired
private DataSource dataSource;
的时候,这个dataSource就是我们在ExampleConfiguration中配的DataSource。

事务注解

在Spring中,事务有两种实现方式,分别是编程式事务管理和声明式事务管理两种方式

  编程式事务管理: 编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。
  声明式事务管理: 建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务,通过@Transactional就可以进行事务操作,更快捷而且简单。推荐使用

启动类

@SpringBootApplication:
  启动注解,@SpringBootApplication是一个复合注解,包括@ComponentScan,	和@SpringBootConfiguration,@EnableAutoConfiguration
    @SpringBootConfiguration继承自@Configuration,二者功能也一致,标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到srping容器中,并且实例名就是方法名。
    @EnableAutoConfiguration的作用启动自动的配置,@EnableAutoConfiguration注解的意思就是Springboot根据你添加的jar包来配置你项目的默认配置,比如根据spring-boot-starter-web ,来判断你的项目是否需要添加了webmvc和tomcat,就会自动的帮你配置web项目中所需要的默认配置。在下面博客会具体分析这个注解,快速入门的demo实际没有用到该注解。
    @ComponentScan,扫描当前包及其子包下被@Component,@Controller,@Service,@Repository注解标记的类并纳入到spring容器中进行管理。是以前的<context:component-scan>(以前使用在xml中使用的标签,用来扫描包配置的平行支持)。

@ServletComponentScan:
	在SpringBootApplication上使用@ServletComponentScan注解后,Servlet、Filter、Listener可以直接通过@WebServlet、@WebFilter、@WebListener注解自动注册,无需其他代码。

@MapperScan("com.Vm.server") :
	@MapperScan注解只会扫描包中的接口,不会扫描类,扫描指定包中的接口

@EnableScheduling:
	spring自带的定时服务
	public class ScheduledTasks {
   @Scheduled(fixedRate = 1000 * 30) //每30秒执行一次
    public void reportCurrentTime(){
    System.out.println ("Scheduling Tasks Examples: The time is now " + dateFormat 			().format (new Date ()));
	  }
}

Mybatis

//Mapper中的namespace用于绑定Dao接口的,即面向接口编程。
//namespace:一般是dao接口所在的路径+接口名称

<mapper namespace="com.VmService.dao.IBlackDao">

//resultMap属性:type为java实体类;id为此resultMap的标识。
//id和result标签是最简单的映射,id为主键映射;result其他基本数据库表字段到实体类属性的映射。

<resultMap id="BlackBean" type="com.VmService.model.BlackBean">
    <id column="ID" property="id"/>
    <id column="IM" property="im"/>
</resultMap>

//进行SQL语句查找
<select id="selectAllBlackList" resultMap="BlackBean">
    SELECT
		id as id,
		im as im,
	FROM
		t_blacklist t1
	ORDER BY
		id DESC
</select>

SpringDataJpa-主键生成策略

一、SpringDataJpa标准用法

spring data jpa 的标准主键生成策略主要有四种,分别是:

public enum GenerationType {
    TABLE, //使用一个额外的数据库表来保存主键
    SEQUENCE,//使用序列的方式,且其底层数据库要支持序列,一般有postgres、Oracle等
    IDENTITY,//主键由数据库生成,一般为自增型主键,支持的有MySql和Sql Server
    AUTO//由程序来决定主键规则
}

主键的生成规则主要由注解 @GeneratedValue 来说明,其源码如下:

@Target({METHOD, FIELD})
@Retention(RUNTIME)
public @interface GeneratedValue {
    GenerationType strategy() default AUTO;
    String generator() default "";
}
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator="payablemoney_seq")
@SequenceGenerator(name="payablemoney_seq", sequenceName="seq_payment")

使用的具体例子为:

假设有一个表示人脸图片集合的类为FaceSet,其主键为facesetToken,则表示如下

@Entity(name = "face_set")
public class FaceSet{
}
  • Sequence

    @SequenceGenerator 中的 sequenceName 为序列的名称,需要与@GeneratedValue 中的generator对应

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="faceset_generator")
  @SequenceGenerator(name="faceset_generator", sequenceName="faceset_seq")
  @Column(name = "faceset_token", unique = true)
  private String facesetToken;
  • Auto

    如果不指定具体的生成规则,则默认为AUTO,即下列两种情况等价

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private String facesetToken;
@Id
private String facesetToken;

二、Hibernate主键策略生成

hibernate-5.0.12.Final版本的默认工厂中有14种生成策略,具体可见org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory

    public DefaultIdentifierGeneratorFactory() {
        register( "uuid2", UUIDGenerator.class );
        register( "guid", GUIDGenerator.class );            // can be done with UUIDGenerator + strategy
        register( "uuid", UUIDHexGenerator.class );         // "deprecated" for new use
        register( "uuid.hex", UUIDHexGenerator.class );     // uuid.hex is deprecated
        register( "assigned", Assigned.class );
        register( "identity", IdentityGenerator.class );
        register( "select", SelectGenerator.class );
        register( "sequence", SequenceStyleGenerator.class );
        register( "seqhilo", SequenceHiLoGenerator.class );
        register( "increment", IncrementGenerator.class );
        register( "foreign", ForeignGenerator.class );
        register( "sequence-identity", SequenceIdentityGenerator.class );
        register( "enhanced-sequence", SequenceStyleGenerator.class );
        register( "enhanced-table", TableGenerator.class );
    }

    public void register(String strategy, Class generatorClass) {
        LOG.debugf( "Registering IdentifierGenerator strategy [%s] -> [%s]", strategy, generatorClass.getName() );
        final Class previous = generatorStrategyToClassNameMap.put( strategy, generatorClass );
        if ( previous != null ) {
            LOG.debugf( "    - overriding [%s]", previous.getName() );
        }
    }

对几种比较常用的类型进行说明:

  • uuid

    采用128位的uuid算法生成主键,uuid被编码为一个32位16进制数字的字符串。

    当使用strategy为uuid时,使用的时hibernate自己定义的UUID生成算法,此策略已过时,其具体实现参照org.hibernate.id. UUIDHexGenerator, 生成的字符串如402880876359adeb016359ae27190000

    当使用strategy为uuid2时,此为此版本推荐使用的uuid生成算法,其默认采用标准的生成策略StandardRandomStrategy,实现为使用jdk自带的uuid生成方法,生成的字符串如

    4af17c8e-8317-43e9-aff9-12d5590a71c6

@Id
@GeneratedValue(generator = "faceset_generator")
@GenericGenerator(name = "faceset_generator", strategy = "uuid")
  • assigned

    插入主键时,由程序来指定。相当于JPA中的AUTO。

@Id
@GeneratedValue(generator = "faceset_generator")
@GenericGenerator(name = "faceset_generator", strategy = "assigned")
  • sequence
@Id
@GeneratedValue(generator = "faceset_generator")
@GenericGenerator(name = "faceset_generator", strategy = "sequence",
         parameters = { @Parameter(name = "sequence", value = "faceset_seq") })
  • guid

    采用数据库底层的guid算法机制,对应MYSQL的uuid()函数,SQL Server的newid()函数,ORACLE的rawtohex(sys_guid())函数等

三、通过@GenericGenerator自定义主键生成策略

常用数据库支持生成规则如下:

数据库 支持的策略
Postgres GenerationType.TABLE GenerationType.AUTO GenerationType.IDENTITY GenerationType.SEQUENCE
Oracle GenerationType.TABLE GenerationType.AUTO GenerationType.SEQUENCE 不支持GenerationType.IDENTITY
Mysql GenerationType.TABLE GenerationType.AUTO GenerationType.IDENTITY 不支持GenerationType.SEQUENCE

原文地址:https://www.cnblogs.com/linuxtop/p/12627957.html

时间: 2024-10-28 15:03:14

SpringBoot常用注解汇总的相关文章

二、Springboot 常用注解

@SpringBootApplication: ??包含@Configuration.@EnableAutoConfiguration.@ComponentScan通常用在主类上.??很多SpringBoot开发者总是使用@Configuration,@EnableAutoConfiguration和 @ComponentScan注解他们的main类.由于这些注解被如此频繁地一块使用,SpringBoot提供一个方便的@SpringBootApplication选择.该??@SpringBoot

SpringBoot常用注解

1)@RestController和@RequestMapping @RequestMapping:注解提供路由信息.它告诉Spring任何来自"/"路径的HTTP请求都应该被映射到home方法.http://localhost:8080/hello @RestController注解告诉Spring以字符串的形式渲染结果,并直接返回给调用者.该注解有六个属性: params:指定request中必须包含某些参数值是,才让该方法处理. headers:指定request中必须包含某些指

SpringBoot常用注解总结

在SpringBoot框架中,注解做为一种隐式配置,极大的简化了之前xml文件的配置方式.SpringBoot中包含许多种类的注解,这里对在SpingBoot项目中经常使用到的一些注解的进行大致的归纳总结: 一.启动相关 1.@SpringBootApplication 在SpirngBoot启动类里面,都加入了此启动注解,此注解是个组合注解,包括了@SpringBootConfiguration .@EnableAutoConfiguration和@ComponentScan注解. @Spri

SpringBoot常用注解解析

@RestController 将返回的对象数据直接以 JSON 或 XML 形式写入 HTTP 响应(Response)中.绝大部分情况下都是直接以 JSON 形式返回给客户端,很少的情况下才会以 XML 形式返回.转换成 XML 形式还需要额为的工作,上面代码中演示的直接就是将对象数据直接以 JSON 形式写入 HTTP 响应(Response)中.关于@Controller和@RestController 的对比,我会在下一篇文章中单独介绍到(@Controller [email prot

Spring常用注解汇总

使用注解之前要开启自动扫描功能 其中base-package为需要扫描的包(含子包). 1 <context:component-scan base-package="cn.test"/> @Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean.@Scope注解 作用域@Lazy(true) 表示延迟初始化@Service用于标注业务层组件. @Controller用于标注控制层组件(如stru

Springboot 常用注解

@SpringBootApplication: 包含@Configuration.@EnableAutoConfiguration.@ComponentScan通常用在主类上. @Repository:用于标注数据访问组件,即DAO组件. @Service:用于标注业务层组件. @RestController:用于标注控制层组件(如struts中的action),包含@Controller和@ResponseBody. @ResponseBody:表示该方法的返回结果直接写入HTTP respo

spring和springboot常用注解总结

@RequestMapping 这个注解可以用于类和方法上,用于类上,表示父路径,如类上是demo,方法上是/demo1,那么访问路径就是demo/demo1 该注解有六个属性:params:指定request中必须包含某些参数值是,才让该方法处理.headers:指定request中必须包含某些指定的header值,才能让该方法处理请求.value:指定请求的实际地址,指定的地址可以是URI Template 模式method:指定请求的method类型, GET.POST.PUT.DELET

Spring常用注解总结

传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点:1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文件,那么.xml文件又会非常多.总之这将导致配置文件的可读性与可维护性变得很低.2.在开发中在.java文件和.xml文件之间不断切换,是一件麻烦的事,同时这种思维上的不连贯也会降低开发的效率.为了解决这两个问题,Spring引入了注解,通过"@XXX"的方式,让注解与Java Bean紧密

Spring系列之Spring常用注解总结

传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点:1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文件,那么.xml文件又会非常多.总之这将导致配置文件的可读性与可维护性变得很低.2.在开发中在.java文件和.xml文件之间不断切换,是一件麻烦的事,同时这种思维上的不连贯也会降低开发的效率.为了解决这两个问题,Spring引入了注解,通过"@XXX"的方式,让注解与Java Bean紧密