package com. zr. com. zr. interceptor;
import org. springframework. web. servlet. handler. HandlerInterceptorAdapter;
import javax. servlet. http. HttpServletRequest;
import javax. servlet. http. HttpServletResponse;
public class LoginInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle ( HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if ( request. getSession ( ) . getAttribute ( "user" ) == null)
{
response. sendRedirect ( "/admin" ) ;
return false ;
}
return true ;
}
}
package com. zr. com. zr. interceptor;
import org. springframework. context. annotation. Configuration;
import org. springframework. web. servlet. config. annotation. InterceptorRegistry;
import org. springframework. web. servlet. config. annotation. WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors ( InterceptorRegistry registry) {
registry. addInterceptor ( new LoginInterceptor ( ) ) . addPathPatterns ( "/admin/**" )
. excludePathPatterns ( "/admin/Login" ) . excludePathPatterns ( "/admin" ) ;
}
}
package com. zr. dao;
import com. zr. po. Blog;
import org. springframework. data. domain. Page;
import org. springframework. data. domain. Pageable;
import org. springframework. data. jpa. repository. JpaRepository;
import org. springframework. data. jpa. repository. JpaSpecificationExecutor;
import org. springframework. data. jpa. repository. Query;
import java. util. List;
public interface BlogDao extends JpaRepository < Blog, Long> , JpaSpecificationExecutor< Blog> {
@Query ( "select b from Blog b where b.recommend=true" )
List< Blog> findTop ( Pageable pageable) ;
@Query ( "select b from Blog b where b.title like ?1 or b.content like ?1" )
Page< Blog> findByQuery ( String s, Pageable pageable) ;
}
package com. zr. dao;
import com. zr. po. Tag;
import org. springframework. data. domain. Pageable;
import org. springframework. data. jpa. repository. JpaRepository;
import org. springframework. data. jpa. repository. Query;
import java. util. List;
public interface TagDao extends JpaRepository < Tag, Long>
{
@Query ( "select t from Tag t" )
List< Tag> findTop ( Pageable pageable) ;
}
package com. zr. dao;
import com. zr. po. Type;
import com. zr. po. User;
import org. springframework. data. domain. Pageable;
import org. springframework. data. jpa. repository. JpaRepository;
import org. springframework. data. jpa. repository. Query;
import java. util. List;
public interface TypeDao extends JpaRepository < Type, Long>
{
@Query ( "select t from Type t" )
List< Type> findTop ( Pageable pageable) ;
}
package com. zr. dao;
import com. zr. po. User;
import org. springframework. data. jpa. repository. JpaRepository;
public interface UserDao extends JpaRepository < User, Long>
{
User findByUsernameAndPassword ( String username, String password) ;
}
package com. zr. po;
import javax. persistence. *;
import java. util. ArrayList;
import java. util. Date;
import java. util. List;
@Entity
@Table ( name = "t_blog" )
public class Blog {
@Id
@GeneratedValue
private Long id;
private String title;
@Basic ( fetch = FetchType. LAZY)
@Lob
private String content;
private String firstPicture;
private String flag;
private Integer views;
private boolean appreciation;
private boolean shareStatement;
private boolean commentabled;
private boolean published;
private boolean recommend;
@Temporal ( TemporalType. TIMESTAMP)
private Date createTime;
@Temporal ( TemporalType. TIMESTAMP)
private Date updateTime;
@ManyToOne
private Type type;
@ManyToMany ( cascade = { CascadeType. PERSIST} )
private List< Tag> tags = new ArrayList < > ( ) ;
@ManyToOne
private User user;
@OneToMany ( mappedBy = "blog" )
private List< Comment> comments = new ArrayList < > ( ) ;
@Transient
private String tagIds;
private String description;
public Blog ( ) {
}
public Long getId ( ) {
return id;
}
public void setId ( Long id) {
this . id = id;
}
public String getTitle ( ) {
return title;
}
public void setTitle ( String title) {
this . title = title;
}
public String getContent ( ) {
return content;
}
public void setContent ( String content) {
this . content = content;
}
public String getFirstPicture ( ) {
return firstPicture;
}
public void setFirstPicture ( String firstPicture) {
this . firstPicture = firstPicture;
}
public String getFlag ( ) {
return flag;
}
public void setFlag ( String flag) {
this . flag = flag;
}
public Integer getViews ( ) {
return views;
}
public void setViews ( Integer views) {
this . views = views;
}
public boolean isAppreciation ( ) {
return appreciation;
}
public void setAppreciation ( boolean appreciation) {
this . appreciation = appreciation;
}
public boolean isShareStatement ( ) {
return shareStatement;
}
public void setShareStatement ( boolean shareStatement) {
this . shareStatement = shareStatement;
}
public boolean isCommentabled ( ) {
return commentabled;
}
public void setCommentabled ( boolean commentabled) {
this . commentabled = commentabled;
}
public boolean isPublished ( ) {
return published;
}
public void setPublished ( boolean published) {
this . published = published;
}
public boolean isRecommend ( ) {
return recommend;
}
public void setRecommend ( boolean recommend) {
this . recommend = recommend;
}
public Date getCreateTime ( ) {
return createTime;
}
public void setCreateTime ( Date createTime) {
this . createTime = createTime;
}
public Date getUpdateTime ( ) {
return updateTime;
}
public void setUpdateTime ( Date updateTime) {
this . updateTime = updateTime;
}
public Type getType ( ) {
return type;
}
public void setType ( Type type) {
this . type = type;
}
public List< Tag> getTags ( ) {
return tags;
}
public void setTags ( List< Tag> tags) {
this . tags = tags;
}
public User getUser ( ) {
return user;
}
public void setUser ( User user) {
this . user = user;
}
public List< Comment> getComments ( ) {
return comments;
}
public void setComments ( List< Comment> comments) {
this . comments = comments;
}
public String getTagIds ( ) {
return tagIds;
}
public void setTagIds ( String tagIds) {
this . tagIds = tagIds;
}
public String getDescription ( ) {
return description;
}
public void setDescription ( String description) {
this . description = description;
}
public void init ( ) {
this . tagIds = tagsToIds ( this . getTags ( ) ) ;
}
private String tagsToIds ( List< Tag> tags) {
if ( ! tags. isEmpty ( ) ) {
StringBuffer ids = new StringBuffer ( ) ;
boolean flag = false ;
for ( Tag tag : tags) {
if ( flag) {
ids. append ( "," ) ;
} else {
flag = true ;
}
ids. append ( tag. getId ( ) ) ;
}
return ids. toString ( ) ;
} else {
return tagIds;
}
}
@Override
public String toString ( ) {
return "Blog{" +
"id=" + id +
", title='" + title + '\'' +
", content='" + content + '\'' +
", firstPicture='" + firstPicture + '\'' +
", flag='" + flag + '\'' +
", views=" + views +
", appreciation=" + appreciation +
", shareStatement=" + shareStatement +
", commentabled=" + commentabled +
", published=" + published +
", recommend=" + recommend +
", createTime=" + createTime +
", updateTime=" + updateTime +
", type=" + type +
", tags=" + tags +
", user=" + user +
", comments=" + comments +
", tagIds='" + tagIds + '\'' +
", description='" + description + '\'' +
'}' ;
}
public void initTags ( Long id)
{
List< Tag> tags= this . getTags ( ) ;
StringBuffer ids= new StringBuffer ( ) ;
if ( ! tags. isEmpty ( ) )
{
Boolean flag= false ;
for ( Tag t: tags) {
if ( flag) {
ids. append ( t. getId ( ) ) ;
flag= true ;
} else
{
ids. append ( "," ) ;
ids. append ( t. getId ( ) ) ;
}
this . setTagIds ( ids. toString ( ) ) ;
}
}
}
}
package com. zr. po;
public class BlogQuery {
private String title;
private Long typeId;
private Boolean recommend;
public String getTitle ( ) {
return title;
}
public void setTitle ( String title) {
this . title = title;
}
public Long getTypeId ( ) {
return typeId;
}
public void setTypeId ( Long typeId) {
this . typeId = typeId;
}
public Boolean getRecommend ( ) {
return recommend;
}
public void setRecommend ( Boolean recommend) {
this . recommend = recommend;
}
@Override
public String toString ( ) {
return "BlogQuery{" +
"title='" + title + '\'' +
", typeId=" + typeId +
", recommend=" + recommend +
'}' ;
}
}
package com. zr. po;
import javax. persistence. *;
import java. util. ArrayList;
import java. util. Date;
import java. util. List;
@Entity
@Table ( name = "t_comment" )
public class Comment {
@Id
@GeneratedValue
private Long id;
private String nickname;
private String email;
private String content;
private String avatar;
@Temporal ( TemporalType. TIMESTAMP)
private Date createTime;
@ManyToOne
private Blog blog;
@OneToMany ( mappedBy = "parentComment" )
private List< Comment> replyComments = new ArrayList < > ( ) ;
@ManyToOne
private Comment parentComment;
public Comment ( ) {
}
public Long getId ( ) {
return id;
}
public void setId ( Long id) {
this . id = id;
}
public String getNickname ( ) {
return nickname;
}
public void setNickname ( String nickname) {
this . nickname = nickname;
}
public String getEmail ( ) {
return email;
}
public void setEmail ( String email) {
this . email = email;
}
public String getContent ( ) {
return content;
}
public void setContent ( String content) {
this . content = content;
}
public String getAvatar ( ) {
return avatar;
}
public void setAvatar ( String avatar) {
this . avatar = avatar;
}
public Date getCreateTime ( ) {
return createTime;
}
public void setCreateTime ( Date createTime) {
this . createTime = createTime;
}
public Blog getBlog ( ) {
return blog;
}
public void setBlog ( Blog blog) {
this . blog = blog;
}
public List< Comment> getReplyComments ( ) {
return replyComments;
}
public void setReplyComments ( List< Comment> replyComments) {
this . replyComments = replyComments;
}
public Comment getParentComment ( ) {
return parentComment;
}
public void setParentComment ( Comment parentComment) {
this . parentComment = parentComment;
}
@Override
public String toString ( ) {
return "Comment{" +
"id=" + id +
", nickname='" + nickname + '\'' +
", email='" + email + '\'' +
", content='" + content + '\'' +
", avatar='" + avatar + '\'' +
", createTime=" + createTime +
'}' ;
}
}
package com. zr. po;
import javax. persistence. *;
import java. util. ArrayList;
import java. util. List;
@Entity
@Table ( name = "t_tag" )
public class Tag {
@Id
@GeneratedValue
private Long id;
private String name;
@ManyToMany ( mappedBy = "tags" )
private List< Blog> blogs = new ArrayList < > ( ) ;
public Tag ( ) {
}
public Long getId ( ) {
return id;
}
public void setId ( Long id) {
this . id = id;
}
public String getName ( ) {
return name;
}
public void setName ( String name) {
this . name = name;
}
public List< Blog> getBlogs ( ) {
return blogs;
}
public void setBlogs ( List< Blog> blogs) {
this . blogs = blogs;
}
@Override
public String toString ( ) {
return "Tag{" +
"id=" + id +
", name='" + name + '\'' +
'}' ;
}
}
package com. zr. po;
import javax. persistence. *;
import java. util. ArrayList;
import java. util. List;
@Entity
@Table ( name = "t_type" )
public class Type {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToMany ( mappedBy = "type" )
private List< Blog> blogs = new ArrayList < > ( ) ;
public Type ( ) {
}
public Long getId ( ) {
return id;
}
public void setId ( Long id) {
this . id = id;
}
public String getName ( ) {
return name;
}
public void setName ( String name) {
this . name = name;
}
public List< Blog> getBlogs ( ) {
return blogs;
}
public void setBlogs ( List< Blog> blogs) {
this . blogs = blogs;
}
@Override
public String toString ( ) {
return "Type{" +
"id=" + id +
", name='" + name + '\'' +
'}' ;
}
}
package com. zr. po;
import javax. persistence. *;
import java. util. ArrayList;
import java. util. Date;
import java. util. List;
@Entity
@Table ( name = "t_user" )
public class User {
@Id
@GeneratedValue
private Long id;
private String nickname;
private String username;
private String password;
private String email;
private String avatar;
private Integer type;
@Temporal ( TemporalType. TIMESTAMP)
private Date createTime;
@Temporal ( TemporalType. TIMESTAMP)
private Date updateTime;
@OneToMany ( mappedBy = "user" )
private List< Blog> blogs = new ArrayList < > ( ) ;
public User ( ) {
}
public Long getId ( ) {
return id;
}
public void setId ( Long id) {
this . id = id;
}
public String getNickname ( ) {
return nickname;
}
public void setNickname ( String nickname) {
this . nickname = nickname;
}
public String getUsername ( ) {
return username;
}
public void setUsername ( String username) {
this . username = username;
}
public String getPassword ( ) {
return password;
}
public void setPassword ( String password) {
this . password = password;
}
public String getEmail ( ) {
return email;
}
public void setEmail ( String email) {
this . email = email;
}
public String getAvatar ( ) {
return avatar;
}
public void setAvatar ( String avatar) {
this . avatar = avatar;
}
public Integer getType ( ) {
return type;
}
public void setType ( Integer type) {
this . type = type;
}
public Date getCreateTime ( ) {
return createTime;
}
public void setCreateTime ( Date createTime) {
this . createTime = createTime;
}
public Date getUpdateTime ( ) {
return updateTime;
}
public void setUpdateTime ( Date updateTime) {
this . updateTime = updateTime;
}
public List< Blog> getBlogs ( ) {
return blogs;
}
public void setBlogs ( List< Blog> blogs) {
this . blogs = blogs;
}
@Override
public String toString ( ) {
return "User{" +
"id=" + id +
", nickname='" + nickname + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
", email='" + email + '\'' +
", avatar='" + avatar + '\'' +
", type=" + type +
", createTime=" + createTime +
", updateTime=" + updateTime +
'}' ;
}
}
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) ;
}
}
package com. zr. service. impl;
import com. zr. dao. TagDao;
import com. zr. po. Tag;
import com. zr. po. Type;
import com. zr. service. ITagService;
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. stereotype. Service;
import org. thymeleaf. util. StringUtils;
import java. util. ArrayList;
import java. util. List;
@Service
public class TagService implements ITagService
{
@Autowired
private TagDao tagDao;
@Override
public Page< Tag> listTag ( Pageable pageable) {
Page< Tag> page = tagDao. findAll ( pageable) ;
return page;
}
@Override
public void deleteTag ( Long id) {
tagDao. deleteById ( id) ;
}
@Override
public void addTag ( Tag tag) {
tagDao. save ( tag) ;
}
@Override
public Tag getTag ( Long id) {
return tagDao. getOne ( id) ;
}
@Override
public void update ( Long id, Tag tag) {
Tag tag1= tagDao. getOne ( id) ;
BeanUtils. copyProperties ( tag, tag1) ;
tagDao. save ( tag1) ;
}
@Override
public List< Tag> ListAllTag ( ) {
return tagDao. findAll ( ) ;
}
@Override
public List< Tag> getTagByIds ( String tagIds) {
List< Long> ids= new ArrayList < > ( ) ;
if ( tagIds!= null && tagIds != "" )
{
String[ ] s= tagIds. split ( "," ) ;
for ( int i= 0 ; i< s. length; i++ )
{
if ( ! StringUtils. isEmpty ( s[ i] ) )
{
ids. add ( new Long ( s[ i] ) ) ;
}
}
}
List< Tag> tags= tagDao. findAllById ( ids) ;
return tags;
}
@Override
public List< Tag> listTagTop ( int i) {
Sort sort= Sort. by ( Sort. Direction. DESC, "blogs.size" ) ;
Pageable pageable= PageRequest. of ( 0 , i, sort) ;
List< Tag> tags= tagDao. findTop ( pageable) ;
return tags;
}
}
package com. zr. service. impl;
import com. zr. dao. TypeDao;
import com. zr. po. Type;
import com. zr. po. User;
import com. zr. service. ITypeService;
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. stereotype. Service;
import java. util. List;
@Service
public class TypeService implements ITypeService
{
@Autowired
private TypeDao typeDao;
@Override
public Page< Type> listType ( Pageable pageable) {
Page< Type> page = typeDao. findAll ( pageable) ;
return page;
}
@Override
public void deleteType ( Long id)
{
typeDao. deleteById ( id) ;
}
@Override
public void addType ( Type type)
{
typeDao. save ( type) ;
}
@Override
public Type getType ( Long id)
{
return typeDao. getOne ( id) ;
}
@Override
public void update ( Long id, Type type) {
Type type1= typeDao. getOne ( id) ;
BeanUtils. copyProperties ( type, type1) ;
typeDao. save ( type1) ;
}
@Override
public List< Type> ListAllType ( ) {
return typeDao. findAll ( ) ;
}
@Override
public List< Type> listTypeTop ( int i) {
Sort sort= Sort. by ( Sort. Direction. DESC, "blogs.size" ) ;
Pageable pageable= PageRequest. of ( 0 , i, sort) ;
List< Type> types= typeDao. findTop ( pageable) ;
return types;
}
}
package com. zr. service. impl;
import com. zr. dao. UserDao;
import com. zr. po. User;
import com. zr. service. IUserService;
import org. springframework. beans. factory. annotation. Autowired;
import org. springframework. stereotype. Service;
@Service
public class UserService implements IUserService {
@Autowired
private UserDao userDao;
@Override
public User checkUser ( String username, String password) {
return userDao. findByUsernameAndPassword ( username, password) ;
}
}
package com. zr. web;
import com. zr. po. Blog;
import com. zr. po. BlogQuery;
import com. zr. po. Tag;
import com. zr. po. User;
import com. zr. service. IBlogService;
import com. zr. service. ITagService;
import com. zr. service. ITypeService;
import org. springframework. beans. factory. annotation. Autowired;
import org. springframework. data. domain. Page;
import org. springframework. data. domain. Pageable;
import org. springframework. data. domain. Sort;
import org. springframework. data. web. PageableDefault;
import org. springframework. stereotype. Controller;
import org. springframework. ui. Model;
import org. springframework. web. bind. annotation. GetMapping;
import org. springframework. web. bind. annotation. PathVariable;
import org. springframework. web. bind. annotation. PostMapping;
import org. springframework. web. bind. annotation. RequestMapping;
import javax. servlet. http. HttpSession;
import java. util. Date;
import java. util. List;
@Controller
@RequestMapping ( "admin/blogs" )
public class BlogController
{
@Autowired
private IBlogService blogService;
@Autowired
private ITypeService typeService;
@Autowired
private ITagService tagService;
@GetMapping
public String list ( @PageableDefault ( size = 5 , sort = { "id" } , direction = Sort. Direction. DESC) Pageable pageable, Model model)
{
Page< Blog> page= blogService. listBlog ( pageable) ;
model. addAttribute ( "page" , page) ;
model. addAttribute ( "types" , typeService. listType ( pageable) ) ;
return "admin/blogs" ;
}
@GetMapping ( "{id}/delete" )
public String delete ( @PathVariable Long id)
{
blogService. deleteBlog ( id) ;
return "redirect:/admin/blogs" ;
}
@GetMapping ( "input" )
public String input ( Model model)
{
model. addAttribute ( "blog" , new Blog ( ) ) ;
model. addAttribute ( "types" , typeService. ListAllType ( ) ) ;
model. addAttribute ( "tags" , tagService. ListAllTag ( ) ) ;
return "admin/blogs-input" ;
}
@PostMapping ( "add" )
public String add ( Blog blog, HttpSession session)
{
User user= ( User) session. getAttribute ( "user" ) ;
blog. setUser ( user) ;
String tagIds= blog. getTagIds ( ) ;
List< Tag> tagList= tagService. getTagByIds ( tagIds) ;
blog. setTags ( tagList) ;
if ( blog. getId ( ) == null)
{
blogService. addBlog ( blog) ;
}
else
{
blogService. update ( blog) ;
}
return "redirect:/admin/blogs" ;
}
@GetMapping ( "{id}/toUpdate" )
public String toUpdate ( @PathVariable Long id, Model model)
{
Blog blog= blogService. getBlog ( id) ;
blog. initTags ( id) ;
model. addAttribute ( "blog" , blog) ;
model. addAttribute ( "types" , typeService. ListAllType ( ) ) ;
model. addAttribute ( "tags" , tagService. ListAllTag ( ) ) ;
return "admin/blogs-input" ;
}
@RequestMapping ( "search" )
public String search ( @PageableDefault ( size = 5 , sort = { "id" } , direction = Sort. Direction. DESC) Pageable pageable, BlogQuery blogQuery, Model model)
{
Page< Blog> page= blogService. listBlogQ ( pageable, blogQuery) ;
model. addAttribute ( "page" , page) ;
System. out. println ( "as" + typeService. listType ( pageable) ) ;
blogService. listBlogQ ( pageable, blogQuery) ;
return "admin/blogs :: blogList" ;
}
}
package com. zr. web;
import com. sun. org. apache. xpath. internal. operations. Mod;
import com. zr. po. Blog;
import com. zr. po. Tag;
import com. zr. po. Type;
import com. zr. po. User;
import com. zr. service. IBlogService;
import com. zr. service. ITagService;
import com. zr. service. ITypeService;
import org. springframework. beans. factory. annotation. Autowired;
import org. springframework. data. domain. Page;
import org. springframework. data. domain. Pageable;
import org. springframework. data. domain. Sort;
import org. springframework. data. web. PageableDefault;
import org. springframework. stereotype. Controller;
import org. springframework. ui. Model;
import org. springframework. web. bind. annotation. PathVariable;
import org. springframework. web. bind. annotation. RequestMapping;
import org. springframework. web. bind. annotation. RequestParam;
import java. awt. *;
import java. util. List;
@Controller
public class IndexController {
@Autowired
private IBlogService blogService;
@Autowired
private ITypeService typeService;
@Autowired
private ITagService tagService;
@RequestMapping ( "/" )
public String index ( @PageableDefault ( size = 5 , sort = { "updateTime" } , direction = Sort. Direction. DESC) Pageable pageable, Model model)
{
Page< Blog> page= blogService. listBlog ( pageable) ;
List< Type> types= typeService. listTypeTop ( 6 ) ;
List< Tag> tags= tagService. listTagTop ( 6 ) ;
List< Blog> blogs= blogService. listRecommendBlogTop ( 3 ) ;
model. addAttribute ( "page" , page) ;
model. addAttribute ( "types" , types) ;
model. addAttribute ( "tags" , tags) ;
model. addAttribute ( "recommendBlogs" , blogs) ;
return "index" ;
}
@RequestMapping ( "/footer/newblog" )
public String newblogs ( Model model)
{
List< Blog> blogs= blogService. listRecommendBlogTop ( 4 ) ;
model. addAttribute ( "newblogs" , blogs) ;
return "_fragments.html :: newblogList" ;
}
@RequestMapping ( "/search" )
public String search ( @PageableDefault ( size = 5 , sort = { "updateTime" } , direction = Sort. Direction. DESC) Pageable pageable, @RequestParam String query, Model model)
{
Page< Blog> page= blogService. listBlog ( query, pageable) ;
model. addAttribute ( "page" , page) ;
return "search" ;
}
@RequestMapping ( "blog/{id}" )
public String blog ( @PathVariable Long id, Model model)
{
model. addAttribute ( "blog" , blogService. getBlog ( id) ) ;
return "blog" ;
}
@RequestMapping ( "about" )
public String about ( )
{
return "about" ;
}
}
package com. zr. web;
import com. zr. po. User;
import com. zr. service. IUserService;
import org. springframework. beans. factory. annotation. Autowired;
import org. springframework. stereotype. Controller;
import org. springframework. web. bind. annotation. GetMapping;
import org. springframework. web. bind. annotation. PostMapping;
import org. springframework. web. bind. annotation. RequestMapping;
import org. springframework. web. servlet. mvc. support. RedirectAttributes;
import javax. servlet. http. HttpSession;
@Controller
@RequestMapping ( "/admin" )
public class LoginController
{
@Autowired
private IUserService userService;
@GetMapping
public String toLogin ( )
{
return "admin/login" ;
}
@PostMapping ( "/login" )
public String login ( String username, String password, HttpSession session, RedirectAttributes redirectAttributes)
{
User user= userService. checkUser ( username, password) ;
if ( user!= null)
{
session. setAttribute ( "user" , user) ;
return "admin/index" ;
}
else
{
redirectAttributes. addFlashAttribute ( "message" , "用户名和密码错误" ) ;
return "redirect:/admin" ;
}
}
@GetMapping ( "/logout" )
public String logout ( HttpSession session)
{
session. removeAttribute ( "user" ) ;
return "admin/login" ;
}
}
package com. zr. web;
import com. zr. po. Tag;
import com. zr. po. Type;
import com. zr. service. ITagService;
import org. springframework. beans. factory. annotation. Autowired;
import org. springframework. data. domain. Page;
import org. springframework. data. domain. Pageable;
import org. springframework. data. domain. Sort;
import org. springframework. data. web. PageableDefault;
import org. springframework. stereotype. Controller;
import org. springframework. ui. Model;
import org. springframework. web. bind. annotation. GetMapping;
import org. springframework. web. bind. annotation. PathVariable;
import org. springframework. web. bind. annotation. PostMapping;
import org. springframework. web. bind. annotation. RequestMapping;
@Controller
@RequestMapping ( "admin/tags" )
public class TagController
{
@Autowired
private ITagService tagService;
@GetMapping
public String list ( @PageableDefault ( size = 5 , sort = { "id" } , direction = Sort. Direction. DESC) Pageable pageable, Model model)
{
Page< Tag> page= tagService. listTag ( pageable) ;
model. addAttribute ( "page" , page) ;
return "admin/tags" ;
}
@GetMapping ( "{id}/delete" )
public String delete ( @PathVariable Long id)
{
tagService. deleteTag ( id) ;
return "redirect:/admin/tags" ;
}
@GetMapping ( "input" )
public String input ( Model model)
{
model. addAttribute ( "tag" , new Tag ( ) ) ;
return "admin/tags-input" ;
}
@PostMapping ( "add" )
public String add ( Tag tag)
{
tagService. addTag ( tag) ;
return "redirect:/admin/tags" ;
}
@GetMapping ( "{id}/toUpdate" )
public String toUpdate ( @PathVariable Long id, Model model)
{
Tag tag= tagService. getTag ( id) ;
model. addAttribute ( "tag" , tag) ;
return "admin/tags-input" ;
}
@PostMapping ( "update/{id}" )
public String update ( Tag tag, @PathVariable Long id)
{
tagService. update ( id, tag) ;
return "redirect:/admin/tags" ;
}
}
package com. zr. web;
import com. zr. po. Blog;
import com. zr. po. BlogQuery;
import com. zr. po. Tag;
import com. zr. service. IBlogService;
import com. zr. service. ITagService;
import com. zr. service. ITypeService;
import org. springframework. beans. factory. annotation. Autowired;
import org. springframework. data. domain. Page;
import org. springframework. data. domain. Pageable;
import org. springframework. data. domain. Sort;
import org. springframework. data. web. PageableDefault;
import org. springframework. stereotype. Controller;
import org. springframework. ui. Model;
import org. springframework. web. bind. annotation. GetMapping;
import org. springframework. web. bind. annotation. PathVariable;
import org. springframework. web. bind. annotation. RequestMapping;
import org. springframework. web. bind. annotation. RequestParam;
import java. util. List;
@Controller
public class TagShowController {
@Autowired
private ITagService tagService;
@Autowired
private IBlogService blogService;
@RequestMapping ( "tags/{id}" )
public String tags ( @PageableDefault ( size= 5 , sort= { "updateTime" } , direction = Sort. Direction. DESC) Pageable pageable, @PathVariable Long id, Model model)
{
List< Tag> tags = tagService. listTagTop ( 50 ) ;
if ( id== - 1 )
{
id= tags. get ( 0 ) . getId ( ) ;
}
Page< Blog> page= blogService. listBlog ( id, pageable) ;
model. addAttribute ( "page" , page) ;
model. addAttribute ( "tags" , tags) ;
return "tags" ;
}
}
package com. zr. web;
import com. zr. po. Type;
import com. zr. service. ITypeService;
import org. springframework. beans. factory. annotation. Autowired;
import org. springframework. data. domain. Page;
import org. springframework. data. domain. Pageable;
import org. springframework. data. domain. Sort;
import org. springframework. data. web. PageableDefault;
import org. springframework. stereotype. Controller;
import org. springframework. ui. Model;
import org. springframework. web. bind. annotation. GetMapping;
import org. springframework. web. bind. annotation. PathVariable;
import org. springframework. web. bind. annotation. PostMapping;
import org. springframework. web. bind. annotation. RequestMapping;
@Controller
@RequestMapping ( "/admin/types" )
public class TypeController
{
@Autowired
private ITypeService typeService;
@GetMapping
public String list ( @PageableDefault ( size = 5 , sort = { "id" } , direction = Sort. Direction. DESC) Pageable pageable, Model model)
{
Page< Type> page= typeService. listType ( pageable) ;
model. addAttribute ( "page" , page) ;
return "admin/types" ;
}
@GetMapping ( "{id}/delete" )
public String delete ( @PathVariable Long id)
{
typeService. deleteType ( id) ;
return "redirect:/admin/types" ;
}
@GetMapping ( "input" )
public String input ( Model model)
{
model. addAttribute ( "type" , new Type ( ) ) ;
return "admin/types-input" ;
}
@PostMapping ( "add" )
public String add ( Type type)
{
typeService. addType ( type) ;
return "redirect:/admin/types" ;
}
@GetMapping ( "{id}/toUpdate" )
public String toUpdate ( @PathVariable Long id, Model model)
{
Type type= typeService. getType ( id) ;
model. addAttribute ( "type" , type) ;
return "admin/types-input" ;
}
@PostMapping ( "update/{id}" )
public String update ( Type type, @PathVariable Long id)
{
typeService. update ( id, type) ;
return "redirect:/admin/types" ;
}
}
package com. zr. web;
import com. zr. po. Blog;
import com. zr. po. BlogQuery;
import com. zr. po. Type;
import com. zr. service. IBlogService;
import com. zr. service. ITypeService;
import org. springframework. beans. factory. annotation. Autowired;
import org. springframework. data. domain. Page;
import org. springframework. data. domain. Pageable;
import org. springframework. data. domain. Sort;
import org. springframework. data. web. PageableDefault;
import org. springframework. stereotype. Controller;
import org. springframework. ui. Model;
import org. springframework. web. bind. annotation. GetMapping;
import org. springframework. web. bind. annotation. PathVariable;
import java. util. List;
@Controller
public class TypeShowController {
@Autowired
private ITypeService typeService;
@Autowired
private IBlogService blogService;
@GetMapping ( "types/{id}" )
public String types ( @PageableDefault ( size= 5 , sort= { "updateTime" } , direction = Sort. Direction. DESC) Pageable pageable
, @PathVariable Long id, Model model)
{
List< Type> types = typeService. listTypeTop ( 50 ) ;
BlogQuery blogQuery= new BlogQuery ( ) ;
if ( id== - 1 )
{
id= types. get ( 0 ) . getId ( ) ;
}
blogQuery. setTypeId ( id) ;
Page< Blog> page= blogService. listBlogQ ( pageable, blogQuery) ;
model. addAttribute ( "types" , types) ;
model. addAttribute ( "page" , page) ;
return "types" ;
}
}
package com. zr;
import org. springframework. boot. SpringApplication;
import org. springframework. boot. autoconfigure. SpringBootApplication;
@SpringBootApplication
public class BolgApplication {
public static void main ( String[ ] args) {
SpringApplication. run ( BolgApplication. class , args) ;
}
}