零碎记录

第三天 :记录学习day2

一、sql中的新问题

sql中的问题

mybatis 配置懒加载后 返回json 时报 Noserializer found for class org.apache.ibatis.executor.loader

  1. 解决方案

在配置中将spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false 就可以了

检查sql语句,最好的方法就是将sql语句复制到navicat中执行一次

  1. 检查Maper接口, 参数一定要对的上

  2. 检查字段是否出现sql关键字!!!!character 、 call 在java中不是关键字在sql中就是

如果在sql中使用 一定要 符号 包裹起来 即 character call ``

检测是否冲突的方法,可以将语句放入navicat中,观察语句是否变蓝,若字段中有变蓝说明该字段有冲突。

  1. 注意 是否已经自动提交了事务 , 如果没有 一定要记得 commit() 提交事务。

二、新发现的工具类

  • Dozer与Spring的使用

  • Dozer是对象转换工具。比如说,当你在Controller层有一个对象ClassA,但是你要传一个ClassAVO对象给Service层,这时可以使用Dozer将对象ClassA转换成所需要的VO类。当然你也可以在其它层做这样的操作

  • hutool工具类

  • 一个Java基础工具类,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类,同时提供以下组件:

  • 布隆过滤

  • 缓存

  • 克隆接口

  • 类型转换

  • 日期处理

  • 数据库ORM(基于ActiveRecord思想)

  • 基于DFA有限自动机的多个关键字查找

  • HTTP客户端

  • IO和文件

  • 有用的一些数据结构

  • 日志

  • 反射代理类的简化(AOP切面实现)

  • Setting(一种扩展Properties的配置文件)

  • System(JVM和系统信息等)

  • WatchService的封装(文件变动监控)

  • XXXUtil各种有用的工具

  • Maven

    <dependency>
        <groupId>com.xiaoleilu</groupId>
        <artifactId>hutool-all</artifactId>
        <version>3.0.1</version></dependency>
      </dependency>
    

    三、新发现的注解

    1. @JsonIgnore 注解
    作用:在实体类向前台返回数据时用来忽略不想传递给前台的属性或接口。
    Eg:Bean实体中会有某些运维字段,在返回信息给前台的时候,当不希望将对应值也一并返回;  此时可以在对应属性上加上注解JsonIgnore或者,可以在User类上加上注解@JsonIgnoreProperties(value = "{password}")
    

    Demo

    @Jsonignore
    private String names;
    
    1. @JsonProperty注解
    遇到一个问题,前端按照平常方式传给我json对象,属性名和我一致,我在controller层也按平常方式使用@RequestBody注解,用相应的实体类接收参数,但别人可以成功接到参数,而我的却不能,在实体类的成员变量上增加@JsonProperty("属性名"),就解决了问题
    查了一下这个注解:
    @JsonProperty 此注解用于属性上,作用是把该属性的名称序列化为另外一个名称,如把trueName属性序列化为name,
    

    Demo

    @JsonProperty("name") 
    private String trueName; 
    

    注意事项:类和父类必须都实现序列化后,才可以反序列化,类没有实现序列化,也可以使用此注解序列化

    这个注解的作用是:1.前端传参数过来的时候,使用这个注解,可以获取到前端与注解中同名的属性 2。后端处理好结果后,返回给前端的属性名也不以实体类属性名为准,而以注解中的属性名为准。

    1. @EqualsAndHashCode()注解
    1. 此注解会生成equals(Object other) 和 hashCode()方法。
    
    2. 它默认使用非静态,非瞬态的属性
    
    3. 可通过参数exclude排除一些属性
    
    4. 可通过参数of指定仅使用哪些属性
    
    5. 它默认仅使用该类中定义的属性且不调用父类的方法
    
    6. 可通过callSuper=true解决上一点问题。让其生成的方法中调用父类的方法。
    

    @EqualsAndHashCode(callSuper = true)注解 把一些属性定义给父类 如下图 将id 添加到AsylumCreate中

    image-20201105001849329

    四、模糊查询的三种sql写法

    1. @Select("select * from Student where name like #{name}")

      传值时比较麻烦:

      List<Student> studentList = impl.select_by_all("%"+"张"+"%");
      
    2. @Select("select * from Student where name like concat('%', #{name},'%')")

      书写简单,推荐使用

      List<Student> studentList = impl.select_by_all("张");
      
    3. @Select("select * from Student where name like '%'${name}%'")

      第三种这样的写法也是不需要对值进行“%”的拼接,注意:${}里的只能是value,不能是其他英文单词。

      List<Student> studentList = impl.select_by_all("张");
      

      但是不太推荐这样的写法因为在控制台里的语句是这样的
      select * from Student where name like '%张%'
      这就容易涉及到sql注入的问题,所以不太推荐

    五、总结

    1. 今天时间过得太快,学到的知识有点零碎,明天补看视频。
    2. 两节算法课竟然没有做出一道算法题,没有认真去分析,最后还是下课一个小时才明白。
    3. 明天将算法总结出来。
posted @ 2020-11-05 00:53  coder象  阅读(96)  评论(0)    收藏  举报