零碎记录
第三天 :记录学习day2
一、sql中的新问题
sql中的问题
mybatis 配置懒加载后 返回json 时报 Noserializer found for class org.apache.ibatis.executor.loader
- 解决方案
在配置中将spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false 就可以了
检查sql语句,最好的方法就是将sql语句复制到navicat中执行一次
检查Maper接口, 参数一定要对的上
检查字段是否出现sql关键字!!!!character 、 call 在java中不是关键字在sql中就是
如果在sql中使用 一定要 符号 包裹起来 即
charactercall``检测是否冲突的方法,可以将语句放入navicat中,观察语句是否变蓝,若字段中有变蓝说明该字段有冲突。
- 注意 是否已经自动提交了事务 , 如果没有 一定要记得 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>三、新发现的注解
- @JsonIgnore 注解
作用:在实体类向前台返回数据时用来忽略不想传递给前台的属性或接口。 Eg:Bean实体中会有某些运维字段,在返回信息给前台的时候,当不希望将对应值也一并返回; 此时可以在对应属性上加上注解JsonIgnore或者,可以在User类上加上注解@JsonIgnoreProperties(value = "{password}")Demo
@Jsonignore private String names;- @JsonProperty注解
遇到一个问题,前端按照平常方式传给我json对象,属性名和我一致,我在controller层也按平常方式使用@RequestBody注解,用相应的实体类接收参数,但别人可以成功接到参数,而我的却不能,在实体类的成员变量上增加@JsonProperty("属性名"),就解决了问题 查了一下这个注解: @JsonProperty 此注解用于属性上,作用是把该属性的名称序列化为另外一个名称,如把trueName属性序列化为name,Demo
@JsonProperty("name") private String trueName;注意事项:类和父类必须都实现序列化后,才可以反序列化,类没有实现序列化,也可以使用此注解序列化
这个注解的作用是:1.前端传参数过来的时候,使用这个注解,可以获取到前端与注解中同名的属性 2。后端处理好结果后,返回给前端的属性名也不以实体类属性名为准,而以注解中的属性名为准。
- @EqualsAndHashCode()注解
1. 此注解会生成equals(Object other) 和 hashCode()方法。 2. 它默认使用非静态,非瞬态的属性 3. 可通过参数exclude排除一些属性 4. 可通过参数of指定仅使用哪些属性 5. 它默认仅使用该类中定义的属性且不调用父类的方法 6. 可通过callSuper=true解决上一点问题。让其生成的方法中调用父类的方法。@EqualsAndHashCode(callSuper = true)注解 把一些属性定义给父类 如下图 将id 添加到AsylumCreate中
四、模糊查询的三种sql写法
-
@Select("select * from Student where name like #{name}")
传值时比较麻烦:
List<Student> studentList = impl.select_by_all("%"+"张"+"%"); -
@Select("select * from Student where name like concat('%', #{name},'%')")
书写简单,推荐使用
List<Student> studentList = impl.select_by_all("张"); -
@Select("select * from Student where name like '%'${name}%'")
第三种这样的写法也是不需要对值进行“%”的拼接,注意:${}里的只能是value,不能是其他英文单词。
List<Student> studentList = impl.select_by_all("张");但是不太推荐这样的写法因为在控制台里的语句是这样的
select * from Student where name like '%张%'
这就容易涉及到sql注入的问题,所以不太推荐
五、总结
- 今天时间过得太快,学到的知识有点零碎,明天补看视频。
- 两节算法课竟然没有做出一道算法题,没有认真去分析,最后还是下课一个小时才明白。
- 明天将算法总结出来。

浙公网安备 33010602011771号