7.29 zr实习日记

学习内容

今天的内容主要是新闻的新建、修改和搜索。导入news.html和news-input.html文件。同时新建NewsDao,NewsController,以及NewsService接口和实现类。

新建

在NewsController中:

package com.zr.controller;
import com.zr.po.*;
import com.zr.service.NewsService;
import com.zr.service.TagService;
import com.zr.service.TypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.annotation.AccessType;
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 javax.servlet.http.HttpSession;
import java.util.List;

@Controller
@RequestMapping("/admin/news")
public class NewsController {

    @Autowired
    private NewsService newsService;
    @Autowired
    private TypeService typeService;
    @Autowired
    private TagService tagService;

    //先查询所有
    @RequestMapping
    public String list(@PageableDefault(size = 5,sort = {"updateTime"},direction = Sort.Direction.DESC ) Pageable pageable,
                       Model model){
        //分页
        Page<News> page=newsService.findByPageable(pageable);
        model.addAttribute("page",page);
        model.addAttribute("types",typeService.listType());
        return "admin/news";
    }
    @RequestMapping("input/{id}")
    public String toInput(@PathVariable Long id,Model model){
        if(id==-1){
            //新增
            model.addAttribute("news",new News());
        }else{
            //编辑,根据id查找
            News news=newsService.findNewsById(id);
            String tagIds=tagService.getTagIds(news.getTags());
            news.setTagIds(tagIds);

            model.addAttribute("news",news);

        }
        List<Type> types=typeService.listType();//重载,查出所有的分类
        model.addAttribute("types",types);
        //查所有的标签
        List<Tag> tags=tagService.listTag();
        model.addAttribute("tags",tags);
        return "admin/news-input";
    }

TagServiceImpl的getTagIds方法:

    @Override
    public String getTagIds(List<Tag> tags) {
        //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();
    }

新建页面:
在这里插入图片描述

编辑

在NewsController类中添加以下代码

    @RequestMapping("input")
    public String input(News news,HttpSession session ){
        //从session中取出用户
        User user=(User)session.getAttribute("users");
        news.setUser(user);
        //保存tag的id
        List<Tag> tags=tagService.findTagByTagId(news.getTagIds());
        news.setTags(tags);
        newsService.input(news);
        return "redirect:/admin/news";
    }

NewsServiceImpl类中的input()方法,用来保存新闻新建的时间和修改新闻的时间(新闻的更新时间)

    @Override
    public void input(News news) {
        if(news.getId()==null){
            //创建的时间
            news.setCreateTime(new Date());
            newsDao.save(news);
        }else{
            //更新时间
            news.setUpdateTime(new Date());
            News n=newsDao.getOne(news.getId());
            BeanUtils.copyProperties(news,n, MyBeanUtils.getNullPropertyNames(news));
            newsDao.save(n);
        }

    }

TagServiceImpl类中的findTagByTagId()

    @Override
    public List<Tag> findTagByTagId(String tagIds) {
        List<Long> ids=new ArrayList<>();
        if(!StringUtils.isEmpty(tagIds)){
            String[] strings = tagIds.split(",");//以逗号分隔id,得到一个数组
            //对数组进行遍历
            for(String s:strings){
                if(!StringUtils.isEmpty(s)){
                    //添加
                    ids.add(new Long(s));
                }
            }
        }
        return tagDao.findAllById(ids);
    }

修改页面,将标题为12的新闻分类改为电视剧:
在这里插入图片描述
在这里插入图片描述
成功修改!

搜索

NewsController:

//    搜索
    @RequestMapping("search")
    public String search(@PageableDefault(size = 5,sort = {"updateTime"},direction = Sort.Direction.DESC ) Pageable pageable,
                         NewsQuery newsQuery,
                         Model model){

         Page<News> page=newsService.searchNews(pageable,newsQuery);
        //通过NewsQuery拿到前端页面传过来的数据
         model.addAttribute("page",page);
         return "admin/news :: newsList";
    }

NewsServiceImpl:

    @Override
    public Page<News> searchNews(Pageable pageable, NewsQuery newsQuery) {
       Page<News> news=newsDao.findAll(new Specification<News>() {
           @Override
           public Predicate toPredicate(Root<News> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
               List<Predicate> predicates=new ArrayList<>();
               if(!StringUtils.isEmpty(newsQuery.getTitle())){
                   predicates.add(criteriaBuilder.like(root.<String>get("title"),"%"+newsQuery.getTitle()+"%"));
               }
               if(!StringUtils.isEmpty(newsQuery.getTypeId())){
                   predicates.add(criteriaBuilder.equal(root.<Type>get("type").get("id"),newsQuery.getTypeId()));
               }
               if(newsQuery.getRecommend()!=null){
                   predicates.add(criteriaBuilder.equal(root.<Boolean>get("recommend"),newsQuery.getRecommend()));
               }

               query.where(predicates.toArray(new Predicate[predicates.size()]));

               return null;
           }
       }, pageable);
        return news;
    }

news.html的j’s部分添加如下函数

   function page(obj){
      $("[name='page']").val($(obj).data("page"));
      load();
    }

    $("#search-btn").click(function () {
      $("[name='page']").val(0);
      load();
    });

    function load() {
      $("#table-container").load("/admin/news/search",{
        title : $("[name='title']").val(),
        typeId : $("[name='typeId']").val(),
        recommend : $("[name='recommend']").prop('checked'),
        page : $("[name='page']").val()}
      )

搜索页面:搜索标题有12的新闻:
在这里插入图片描述

总结

今天的学习内容还是比较多的,但是也有和昨天分类、标签类似的地方,今天主要是那个搜索功能的实现,实现起来还是挺复杂的(主要是我没看懂那段代码的意思),上午也遇到了一些问题,课下找了找错,修改代码也挺让人烦躁的。下午的时候开始着手做小组项目了,昨天分完工之后,一直在考虑我负责的那一部分的前端页面怎么写,今天下午看了一些视频也算是知道了前端页面怎么写的了,所以就可以开始着手项目了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值