• SpringBoot学习笔记<二>注解


    此篇为项目作结之笔记,关于注解。

    项目启动入口
    @SpringBootApplication[必选]

     取消SpringBoot启动时默认检查的数据库连接配置

      @SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})

     @ServletComponentScan[可选]

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

    @RunWith(SpringRunner.class) //与@SpringBootTest测试时,搭配使用

    @SpringBootTest

    路由与网络
    @Controller
    @RestController

    @ResponseBody //组合控制器[@Controller + @ResponseBody]
            // 返回结果直接写入HTTP response body中,响应输出json、非html格式输出时需要此注解
            //比如:异步获取json数据,加上@responsebody后,会直接返回json数据

    @RequestMapping(value= {"/helloworld/{pathItem}", "/hw/{pathItem}"}, method = RequestMethod.GET) //改成POST时,此URL访问将失败
    @GetMapping(value={"/duapc", "/duapc"})
    @PostMapping(value="")

    @PathVariable("id") //用于将请求URL中的模板变量映射到功能处理方法的参数上
      serviceName{@PathVariable("id") Integer ID)
        + 配置url和方法的一个关系@RequestMapping("servicePath/{pathItem}")【必须配合使用】
    @RequestParam("param") //获取请求参数的值
      serviceName{@RequestParam("param") Integer Param)

    @CrossOrigin 解决细粒度(到具体某个/某些action级)的配置跨域


    数据持久层

    【Hibernate】
    @Entity
      说明这个class是实体类,并且使用默认的orm规则,即class名即数据库表中表名,class字段名即表中的字段名
      注意:实体类必须用 @javax.persistence.Entity 进行注解
      如果想改变这种默认的orm规则,就要使用:
    @Table来改变class名与数据库中[表名]的映射规则;
    @Column来改变class中字段名与db中表的[字段名]的映射规则
    @Table(name="tb_boy")
      指定了Entity所要映射带数据库表,其中@Table.name()用来指定映射表的表名。
      如果缺省@Table注释,系统默认采用类名作为映射表的表名。
      实体Bean的每个实例代表数据表中的一行数据,行中的一列对应实例中的一个属性。
    @Id
    @GeneratedValue //定义了标识字段生成方式,默认自增
    @Column(name="pk_boy_id")注释定义了将成员属性映射到关系表中的哪一列和该列的结构信息,属性如下:
      1)name:映射的列名。如:映射tbl_user表的name列,可以在name属性的上面或getName方法上面加入;
      2)unique:是否唯一;
      3)nullable:是否允许为空;
      4)length:对于字符型列,length属性指定列的最大字符长度;
      5)insertable:是否允许插入;
      6)updatetable:是否允许更新;
      7)columnDefinition:定义建表时创建此列的DDL;Eg:columnDefinition="varchar(30) comment '主键'"
      8)secondaryTable:从表名。如果此列不建在主表上(默认是主表),该属性定义该列所在从表的名字。
    @OneToOne(fetch = FetchType.LAZY, cascade=CascadeType.ALL)//

    @Where(clause = "is_delete=0")
    @JoinColumn(name = "fk_boy_id", referencedColumnName = "pk_boy_id")
      //永远为主控端
      //boy中的fk_boy_id字段参考boy表中的pk_boy_id字段
    @Temporal(value=TemporalType.TIME)
      指定java.util.Date或java.util.Calender属性与数据库类型date、time或timestamp中的那一种类型进行映射

    @Transient //临时字段,映射时忽略

    //其他

    @JsonIgnore //在不需要的转化json的属性上面设置@JsonIgnore,避免出现无线循环

    Spring IOC容器

    特别注:如无特别配置,Spring IOC无法主动注入Bean到Filter或者拦截器

    @Value("${cupSize}") // 绑定application.yml配置文件中的属性到Spring容器中

      不通过配置文件的注入属性的情况

      Eg:@Value("${object.name}") or @Value("hello world")

      通过@Value将外部的值动态注入到Bean中,使用的情况有:

    • 注入普通字符串
    • 注入操作系统属性
    • 注入表达式结果
    • 注入其他Bean属性:注入beanInject对象的属性another
    • 注入文件资源
    • 注入URL资源


    @Autowired //从容器中取值,对类成员变量、方法及构造函数进行标注,完成自动装配的工作
          //从Spring容器取值使用【前提:Component生效】
    @Component:
      将本Bean置入Spring容器中,形成绑定
      把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>
      定义Spring管理Bean.

      @Component("beanName")//可附加指定Bean的名字

    @Configuration

      @Configuration中所有带@Bean注解的方法都会被动态代理,调用该方法返回的都是同一个实例。

      @Configuration注解本质上还是@Component

    @ConfigurationProperties(prefix="boy")
      使本Bean与application.yml配置文件中前缀为boy的实体的属性值形成属性与值一一映射
      即 将application.yml的属性值【通过本Bean形成实体规约】
    @Component
    @ConfigurationProperties(prefix="boy")
      public class BoyProperties { ... }

    //@Configuration中所有带@Bean注解的方法都会被动态代理,调用该方法返回的都是同一个实例。
    //@Configuration注解本质上还是@Componen入无特别配置,Spring IOC无法主动注入BeanFilter或者拦截器
     
    推荐文献
      [1] Spring Data JPA 之 一对一,一对多,多对多 关系映射 
      [2] [十]SpringBoot 之 普通类获取Spring容器中的bean
      [3] 从content-type设置看Spring MVC处理header的一个坑
      [4] 取消spring boot启动时连接数据库配置
      [5] spring boot 搭建web项目常见五种返回形式
  • 相关阅读:
    systemverilog中堵塞和非堵塞事件以及同步
    Win 10最大的亮点不是免费而是人工智能
    STL源代码学习(vector篇)
    【金阳光測试】大话Android自己主动化測试--Android自己主动化系列(1)--金阳光于2013年4月份
    [PHP]怎样在SAE的CodeIgniter项目中隐藏掉index.php
    ubuntu 非长期支持版升级系统版本号(ssh登录情况适用)
    #26 Remove Duplicates from Sorted Array
    怎样建设内网网站
    scrollView and tableView
    关于Kingfisher--备用
  • 原文地址:https://www.cnblogs.com/johnnyzen/p/9735593.html
Copyright © 2020-2023  润新知