springboot项目分类(type)和标签(tag)的增删改查
分类(type)【细】
新增和修改
- 新增和修改我们都用同一个方法。type.html页面中找到新增和编辑,修改路径,我们根据id判断,如果是id=-1就是新增,否则就是编辑,编辑页面只是在types-input.html显示了被编辑type的信息
<a href="#" th:href="@{/admin/types/input/{id}(id=${type.id})}" class="ui mini teal basic button">编辑</a>
···
<a href="#" th:href="@{/admin/types/input/{id}(id=-1)}" class="ui mini right floated teal basic button">新增</a>
编辑的提交和新建也都调用一个方法,路径相同
<a href="#" th:href="@{/admin/tags/input}" class="active item">新增</a>
···
<form action="#" method="post" th:object="${tag}" th:action="@{/admin/tags/input}" class="ui form">
- control层新增方法,如果id不等于-1,就根据id从数据库中查到type并用model在页面中展示出来,如果不是就新建一个type对象
@GetMapping("input/{id}")
public String input(@PathVariable Long id,Model model){
Type type=null;
if(id!=-1){
type=typeService.findById(id);
}else {
type=new Type();
}
model.addAttribute("type",type);
return "admin/types-input";
}
types-input.html更新或提交后,用同一个方法保存
@PostMapping("input")
public String input(Type type){
typeService.input(type);
return "redirect:/admin/types";
}
- service层编辑需要使用id在数据库查询type,和保存
@Override
public Type findById(Long id) {
return typeDao.getOne(id);
}
@Override
public void input(Type type) {
typeDao.save(type);
}
删除
- 界面找到删除,修改路径,再在control层新增一个方法delete,从PathVariable得到参数id,交给service层执行删除,再重新执行一次查询
@RequestMapping("delete/{id}")
public String delete(@PathVariable Long id){
typeService.deleteById(id);
return "redirect:/admin/types";
}
- service层新增对应接口和实现即可
@Override
public void deleteById(Long id) {
typeDao.deleteById(id);
}
结果演示
标签(tag)【略】
- 标签的分页显示、新建、编辑和删除,与分类的方法相同,不多赘述。
实体类
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<News> newsList = 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<News> getNewsList() {
return newsList;
}
public void setNewsList(List<News> newsList) {
this.newsList = newsList;
}
@Override
public String toString() {
return "Tag{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
control层
package com.zr.controller;
import com.zr.po.Tag;
import com.zr.service.TagService;
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;
@Controller
@RequestMapping("/admin/tags")
public class TagController {
@Autowired
private TagService tagService;
@RequestMapping
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.delete(id);
return "redirect:/admin/tags";
}
@GetMapping("input/{id}")
public String toInput(@PathVariable Long id,Model model){
if(id==-1){
Tag tag=new Tag();
model.addAttribute("tag",tag);
}else {
Tag tag=tagService.findTagById(id);
model.addAttribute("tag",tag);
}
return "admin/tags-input";
}
@RequestMapping("input")
public String input(Tag tag){
tagService.input(tag);
return "redirect:/admin/tags";
}
}
service层实现类
package com.zr.service.impl;
import com.zr.dao.TagDao;
import com.zr.po.Tag;
import com.zr.service.TagService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
@Service
public class TagServiceImpl implements TagService {
@Autowired
private TagDao tagDao;
@Override
public Page<Tag> listTag(Pageable pageable) {
return tagDao.findAll(pageable);
}
@Override
public void delete(Long id) {
tagDao.deleteById(id);
}
@Override
public Tag findTagById(Long id) {
return tagDao.getOne(id);
}
@Override
public void input(Tag tag) {
tagDao.save(tag);
}
@Override
public List<Tag> listTag() {
return tagDao.findAll();
}
@Override
public List<Tag> findTagByTagId(String tagIds) {
//1,2,3
List<Long> ids=new ArrayList<>();
if(!StringUtils.isEmpty(tagIds)){
String[] strings = tagIds.split(",");
for (String s:strings){
if(!StringUtils.isEmpty(s)){
ids.add(new Long(s));
}
}
}
return tagDao.findAllById(ids);
}
@Override
public String getTagIds(List<Tag> tags) {
//1 2 3 ===>1,2,3
StringBuffer ids=new StringBuffer();
if(!tags.isEmpty()){
boolean flag=false;
for(Tag t:tags){
if(flag){
ids.append(",");
ids.append(t.getId());
}else {
ids.append(t.getId());
flag=true;
}
}
}
return ids.toString();
}
}
dao层
package com.zr.dao;
import com.zr.po.Tag;
import org.springframework.data.jpa.repository.JpaRepository;
public interface TagDao extends JpaRepository<Tag,Long> {
}