java SpringBoot 常用注解 比较方法 排序 项目笔记

Posted 小蜗牛爱远行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java SpringBoot 常用注解 比较方法 排序 项目笔记相关的知识,希望对你有一定的参考价值。

  • spring

    • @Autowired //消除 set ,get方法

    • @ApiOperation //swagger里的 com.wordnik.swagger.annotations.ApiOperation

      • @ApiOperation@ApiParam为添加的API相关注解,个参数说明如下:
        @ApiOperation(value = “接口说明”, httpMethod = “接口请求方式”, response = “接口返回参数类型”, notes = “接口发布说明”);其他参数可参考源码;
        @ApiParam(required = “是否必须参数”, name = “参数名称”, value = “参数具体描述”)
    • @Deprecated 表示方法已经过时,方法上有横线,使用时会有警告

    • @SuppressWarnings(value=“unchecked”, “deprecation”)表示关闭一些警告信息(通知java编译器忽略特定的编译警告)用来抑制编译时的警告信息。

    • @EnableGlobalMethodSecurity(prePostEnabled=true)的时候,@PreAuthorize可以使用

      • @PreAuthorize可以用来控制一个方法是否能够被调用。
      • @在controller层方法中添加权限配置(符合条件得才可以调用这个方法)
      • 示例:
        • @PreAuthorize(value = "#oauth2.hasAnyScope('A','B','C','D')")//添加机构编码权限,判断该机构是否有权限调用
          @PreAuthorize(value="isAuthenticated()")//添加登录权限判断,登录才可以调用
    • @RestController注解,相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了。不能返回jsp,html页面,视图解析器无法解析jsp,html页面

      • @RestController
        @RequestMapping("modelintentioncorpus")
        @Api(tags = "模型意图语料")
        public class ModelIntentionCorpusController 
        
      • @Controller
        //处理文件上传
        @RequestMapping(value="/testuploadimg", method = RequestMethod.POST)
        public @ResponseBody String uploadImg(@RequestParam("file") MultipartFile file,
        HttpServletRequest request) 
        System.out.println("调用文件上传方法");
        String contentType = file.getContentType();
        String fileName = file.getOriginalFilename();
        
    • @Slf4j:如果不想每次都写private final Logger logger = LoggerFactory.getLogger(当前类名.class); 可以用注解@Slf4j;

    • @Service用于标注业务层组件

    • @Repository用于标注数据访问组件,即DAO组件

    • @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注

    • 接收请求路径中占位符的值

      @RequestMapping("show5/id/name")
      public ModelAndView test5(@PathVariable("id") Long ids, @PathVariable("name") String names)
      public ModelAndView test5(@PathVariable Long id, @PathVariable String name)
      
    • @RequestParam第一种情况参数都使用@RequestParam注入,那么地址的拼写是不需要加参数的。

      • @RequestMapping(value = "/findDictionarybyTypeId",method = RequestMethod.GET)
        @ResponseBody
        public ItooResult findDictionarybyTypeId(HttpServletRequest request, HttpServletResponse response, @RequestParam(required = false, defaultValue = "") String typeId, @RequestParam(required = false, defaultValue = "") String dictionaryInfo) 
        
        

      @PathVariable*地址的拼写是需要加参数值*

      • @RequestMapping(value = "/exportToExcel/typeId",method = RequestMethod.GET)
        @ResponseBody
        public ItooResult exportToExcel(HttpServletRequest request,HttpServletResponse response, @PathVariable String typeId, @RequestParam(required = false, defaultValue = "") String dictionaryInfo) 
        
        
    • @EnableTransactionManagement注解(开启事务支持,相当于XML中的<tx.annotation-driven/>配置方式),然后访问Service方法上标注@Transactional注解即可。如果将@Transactional注解注在Service类级别上,当前Service类的所有方法都将被事务增强(不建议)。

    • @PostContruct首先这个注解是由Java提供的,它用来修饰一个非静态的void方法。它会在服务器加载Servlet的时候运行,并且只运行一次。执行 顺序:

      Constructor >> @Autowired >> @PostConstruct

    • swagger注释API

      作用范围API使用位置
      对象属性@ApiModelProperty用在出入参数对象的字段上
      协议集描述@Api用于controller类上
      协议描述@ApiOperation用在controller的方法上
      Response集@ApiResponses用在controller的方法上
      Response@ApiResponse用在 @ApiResponses里边
      非对象参数集@ApiImplicitParams用在controller的方法上
      非对象参数描述@ApiImplicitParam用在@ApiImplicitParams的方法里边
      描述返回对象的意义@ApiModel用在返回对象类上
    • @ApiModelProperty()用于方法,字段; 表示对model属性的说明或者数据操作更改

      • value–字段说明
      • name–重写属性名字
      • dataType–重写属性类型
      • required–是否必填
      • example–举例说明
      • hidden–隐藏
    • @interface注解类,用来自定义注解类,配合下面两个注解使用

      • @Retention(RetentionPolicy.RUNTIME)

        public enum RetentionPolicy    
            SOURCE, // 编译器处理完Annotation后不存储在class中   
            CLASS, // 编译器把Annotation存储在class中,这是默认值   
            RUNTIME // 编译器把Annotation存储在class中,可以由虚拟机读取,反射需要   
         
        
      • @Target:注解的作用目标

        @Target(ElementType.TYPE)   //接口、类、枚举、注解
        @Target(ElementType.FIELD) //字段、枚举的常量
        @Target(ElementType.METHOD) //方法
        @Target(ElementType.PARAMETER) //方法参数
        @Target(ElementType.CONSTRUCTOR)  //构造函数
        @Target(ElementType.LOCAL_VARIABLE)//局部变量
        @Target(ElementType.ANNOTATION_TYPE)//注解
        @Target(ElementType.PACKAGE) ///包   
        
    • 常见注解

      • @Data : 注在类上,提供类的get、set、equals、hashCode、canEqual、toString方法
      • @AllArgsConstructor : 注在类上,提供类的全参构造
      • @NoArgsConstructor : 注在类上,提供类的无参构造
      • @Setter : 注在属性上,提供 set 方法
      • @Getter : 注在属性上,提供 get 方法
      • @EqualsAndHashCode : 注在类上,提供对应的 equals 和 hashCode 方法
      • @Log4j/@Slf4j : 注在类上,提供对应的 Logger 对象,变量名为 log
  • 它与java中的泛型有关。如果我提到ArrayList<String>这意味着我只能向该ArrayList添加字符串类型对象。

    Java中泛型的两个主要好处是:

    1. 减少程序中的强制转换数,从而减少程序中潜在的错误数。
    2. 提高代码清晰度
  • throws Exception放在方法后边,是throws Exception表示的是本方法不处理异常,交给被调用处处理(如果你不希望异常层层往上抛,你就要用throws Exception) ,而且被调用处必须处理。

  • toPlainString():返回不带指数字段的此 BigDecimal 的字符串表示形式。通俗来讲就是直接显示,不用科学计数法表示。

    import java.math.BigDecimal;
    public class BigDecimalDemo 
        public static void main(String[] args) 
            BigDecimal bg = new BigDecimal("1E11");
            System.out.println(bg.toEngineeringString());
            System.out.println(bg.toPlainString());
            System.out.println(bg.toString());
        
    
    //100E+9
    //100000000000
    //1E+11
    
  • concat(String s)字符串拼接

  • File.separator是系统默认的文件分割符号,屏蔽了这些系统的区别

  • 分页请求

    //PageUtils自定义类
    //PageUtils.build(Integer pageNum, Integer pageSize)如果传入分页参数为空,设置默认值(1,10)
    //PageUtils.validCheck(Integer pageNum, Integer pageSize)检查分页参数,如果pageSize为空或者pageNum为空或者参数值小于1,抛出异常:“分页参数错误”
    Page<ModelInfoRes> page = PageUtils.build(req.getPageNum(), req.getPageSize());
    
    
  • List<String> collect = staff.stream().map(x -> x.getName()).collect(Collectors.toList());
    ``System.out.println(collect); ``//[mkyong, jack, lawrence]
    
  • 时间格式化:.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))

  • UPDATE cdr_out set policy_number = CONCAT('["',policy_number,'"]')

  • org.springframework.beans.BeanUtils.copyProperties方法进行对象之间属性的赋值,避免通过get、set方法一个一个属性的赋值

  • 服务之间的调用-----Feign

    • 启动类加入:@EnableFeignClients注解开启对 Feign Client 扫描加载处理。
    • 在当前应用中配置:
      • 引用其他服务的FeignApi要在pom文件中做dependency
      • 编写FeignApi
      • 编写熔断炉
      • 在应用服务中编写rpc,写对应的AppFeignClient
  • 将从redis中获得的字符串直接转换成对象:

    List<InteractiveRecord> interactiveRecordList = JSON.parseArray(JSON.toJSONString(interactiveRecordListTmp), InteractiveRecord.class);

  • Serializable是一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才是可序列化的。因此如果要序列化某些类的对象,这些类就必须实现Serializable接口。而实际上,Serializable是一个空接口,没有什么具体内容,它的目的只是简单的标识一个类的对象可以被序列化。

  • 查询-日期

    //日期获取
    LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    QueryWrapper<RecordOutDto> wrapper = new QueryWrapper<>();
    wrapper.eq("transfer_status", 1).between("create_time", date, date.plusDays(1));
    //数据库修改时间自动更新
    //update_time 数据库字段设置为:根据当前时间戳更新,CURRENT_TIMESTAMP。
    
  • xml中resultType="",sql 中as的值,定义的实体中必须存在,才能调用实体类,set几个值,里面有几个值。

  • 日志设置:

    private static Logger logger = LoggerFactory.getLogger(ThreadManager.class);

  • 项目服务器微服务发现用的consul或者zookeeper

  • 配置中心使用的是Apollo

    • resources中

      • apollo-env.properties:配置Apollo的IP

      • application.properties:应用的配置信息

        apollo.bootstrap.enabled: true
        apollo.bootstrap.namespaces:hs-cdr-center,hsrobot.common-config
        spring.main.allow-bean-definition-overriding=true
        
  • 什么情况下需要序列化:

    • 当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
    • 当你想用套接字在网络上传送对象的时候;
    • 当你想通过 RMI 传输对象的时候
  • 对象copy

    • BeanUtils.copyProperties("转换前的类", "转换后的类");
  • 针对map数组中的某个key值进行排序

            Collections.sort(List<Map>, new Comparator<Map<String, Object>>() 
                @Override
                public int compare(Map<String, Object> o1, Map<String, Object> o2) 
                    Integer ch = Integer.parseInt(o1.get("ch").toString());
                    Integer ch1 = Integer.parseInt(o2.get("ch").toString());
                    return ch.compareTo(ch1);
                
            );
    
  • java8中stream去重操作

    • List<String>去重

      • 
        stringList = stringList.stream().distinct().collect(Collectors.toList());
        
    • 根据List<Object>中Object的某个属性新型去重

      • List<Student> studentList = "实体类列表";
        studentList = studentList.stream().collect(
              collectingAndThen(
                toCollection(() -> new TreeSet<>(Comparator.comparing(Student::getName))), ArrayList::new)
            );
        
      • 另一种方法

        //filter里面的通用过滤条件
        private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) 
            Set<Object> seen = ConcurrentHashMap.newKeySet();
            return t -> seen.add(keyExtractor.apply(t));
        
        studentList = studentList.stream().filter(distinctByKey(Student::getName)).collect(Collectors.toList());
        

以上是关于java SpringBoot 常用注解 比较方法 排序 项目笔记的主要内容,如果未能解决你的问题,请参考以下文章

java SpringBoot 常用注解 比较方法 排序 项目笔记

【SpringBoot】http请求注解之Post请求

定时任务

springboot常用注解

掌握这些springboot的配置方式,让你工作效率翻个倍!

掌握这些springboot的配置方式,让你工作效率翻个倍!