springboot项目中遇到的坑与不解(一)

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);
    }
}

后记

不要忘了多回来看看多看看多看看…

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值