package com.zr.service.impl;
import com.zr.dao.BlogDao;
import com.zr.dao.TagDao;
import com.zr.po.Blog;
import com.zr.po.BlogQuery;
import com.zr.po.Tag;
import com.zr.po.Type;
import com.zr.service.IBlogService;
import com.zr.service.ITagService;
import org.hibernate.query.criteria.internal.predicate.BooleanAssertionPredicate;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.thymeleaf.util.StringUtils;
import javax.persistence.criteria.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Service
public class BlogService implements IBlogService
{
@Autowired
private BlogDao blogDao;
@Override
public Page<Blog> listBlog(Pageable pageable) {
Page<Blog> page = blogDao.findAll(pageable);
return page;
}
@Override
public void deleteBlog(Long id) {
blogDao.deleteById(id);
}
@Override
public void addBlog(Blog blog) {
blog.setCreateTime(new Date());
blog.setUpdateTime(new Date());
blogDao.save(blog);
}
@Override
public Blog getBlog(Long id) {
return blogDao.getOne(id);
}
@Override
public void update(Blog blog) {
Blog blog1=blogDao.getOne(blog.getId());
BeanUtils.copyProperties(blog,blog1);
blog1.setUpdateTime(new Date());
blogDao.save(blog1);
}
@Override
public Page<Blog> listBlogQ(Pageable pageable, BlogQuery blogQuery)
{
Specification<Blog> specification=new Specification<Blog>() {
@Override
public Predicate toPredicate(Root<Blog> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
List<Predicate> predicates=new ArrayList<>();
if(!StringUtils.isEmpty(blogQuery.getTitle()))
{
predicates.add(criteriaBuilder.like(root.<String>get("title"),"%"+blogQuery.getTitle()+"%"));
}
if (blogQuery.getTypeId()!=null)
{
predicates.add(criteriaBuilder.equal(root.<Type>get("type").get("id"),blogQuery.getTypeId()));
}
if (blogQuery.getRecommend()!=null && blogQuery.getRecommend())
{
predicates.add(criteriaBuilder.equal(root.<Boolean>get("recommend"),blogQuery.getRecommend()));
}
criteriaQuery.where(predicates.toArray(new Predicate[predicates.size()]));
return null;
}
};
return blogDao.findAll(specification,pageable);
}
@Override
public List<Blog> listRecommendBlogTop(int i) {
Sort sort=Sort.by(Sort.Direction.DESC,"updateTime");
Pageable pageable= PageRequest.of(0,i,sort);
List<Blog> blogs=blogDao.findTop(pageable);
return blogs;
}
@Override
public Page<Blog> listBlog(String query,Pageable pageable)
{
return blogDao.findByQuery("%"+query+"%",pageable);
}
@Override
public Page<Blog> listBlog(Long id, Pageable pageable) {
Specification<Blog> specification=new Specification<Blog>() {
@Override
public Predicate toPredicate(Root<Blog> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
Join join=root.join("tags");
return criteriaBuilder.equal(join.get("id"),id);
}
};
return blogDao.findAll(specification,pageable);
}
}
博客管理
最新推荐文章于 2023-11-18 15:42:14 发布