文章目录
springboot项目中遇到的坑与不解(一)
Serializable序列化
有时候需要对实体类进行序列化,尤其是使用redis的时候,那么,为什么需要序列化呢?
当需要将对象存入硬盘中时,就需要进行序列化,而标识serialVersionUID,是为了反序列化时能正确标识。
大佬攻略查看:Java对象序列化为什么要使用SerialversionUID
@Lob注解
MySQL支持大量的列类型,它可以被分为3类:数字类型、日期和时间类型以及字符串(字符)类型。Mysql针对字符类型大对象存储的解决方案是Lob对象。
@Lob注解属性会被持久化为大类型,即blog与clog属性
如果需要对一个属性设置为大类型,可这样写
@Lob
@Basic(fetch = FetchType.LAZY)
@Column(columnDefinition = "TEXT")
大佬攻略查看:MySQL中Lob与JPA映射
关于懒加载与实时加载
懒加载LAZY表示当加载实体时,该属性不会立即加载出来,而是当需要查询它的时候,再会被加载出来
大佬攻略查看:Basic表示一个简单的属性
@Temporal注解
@Temporal注解主要是对java中的Date属性进行格式化
大佬攻略查看:@Temporal()注解的使用
@Transient注解
被@Transient标记的属性,不会作为数据库中的字段存在
大佬攻略查看:@Transient注解理解
JpaSpecificationExecutor
当需要使用jpa进行复杂查询时,repository接口需要继承JpaSpecificationExecutor接口。
大佬攻略查看:jpa多条件查询重写Specification的toPredicate方法
本项目中的例子简单实现
我的大概理解就是使用predicates聚合criteriaBuilder创建的条件,再用CriteriaQuery判断使用条件,相当于where。
private Specification<Article> getWhereClause(String keyword){
return new Specification<Article>() {
@Override
public Predicate toPredicate(Root<Article> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
List<Predicate> predicates = new ArrayList<>();
if(StringUtils.isNotBlank(keyword)){
predicates.add(
criteriaBuilder.and(
criteriaBuilder.or(
criteriaBuilder.like(root.get("articleName"),"%" + keyword + "%"),
criteriaBuilder.like(root.get("articleContent"), "%" + keyword + "%")
)
)
);
}
predicates.add(criteriaBuilder.equal(root.get("isEnable"),Constants.YES));
Predicate[] pre = new Predicate[predicates.size()];
return criteriaQuery.where(predicates.toArray(pre)).getRestriction();
}
};
}
page与pageable
大佬攻略查看:JPA中的Page与Pageable
pageable需要传入数据(page, size, 排序参数)
其中pageable的index是从0开始的,那么如果前台传入的pagenumber是1开头,则需要-1才能显示数据。
pegdown依赖
pegdown依赖可以将markdown格式转换为html格式
<dependency>
<groupId>org.pegdown</groupId>
<artifactId>pegdown</artifactId>
<version>1.2.1</version>
</dependency>
工具类
public class MarkdownToHtml {
public static String markDownToHtml(String makeDownStr) {
PegDownProcessor pdp = new PegDownProcessor(Integer.MAX_VALUE);
return pdp.markdownToHtml(makeDownStr);
}
}
后记
不要忘了多回来看看多看看多看看…