美文网首页
热点平台搭建(三)——Springboot+Mybatis+My

热点平台搭建(三)——Springboot+Mybatis+My

作者: 请不要问我是谁 | 来源:发表于2020-03-10 20:00 被阅读0次

entity

与Mysql中表相对应:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class HotSpot implements Serializable {
    @JsonIgnore
    private static final long serialVersionUID = 2333L;
    private int id;
    private int rank;
    private String title;
    private String link;
    private String publicName;
    private int hotNumber;
    private String detail;
    private String timestamp;
    private int uId;

使用lombok省略构造方法,get与set方法的编写。因为不同网站的热点都只爬取这几个内容,所以一个entity就行。

mapper

使用Mybatis作为ORM

public interface HotSpotMapper {
    /**
     * 查找最新的消息
     * @param hotSpot 那张表
     * @param number 消息数
     * @return 消息列表
     */
    @Select("select * from " +
            "  (select * from ${hotSpot}_hot_list order by id DESC limit #{number}) as t " +
            "order by rank")
    List<HotSpot> queryLastTime(@Param("hotSpot") String hotSpot, @Param("number") int number);
}

这里select中自己写sql,更加灵活。需要根据传入不同的热榜名称查找不同的数据表,并且每个热榜的展示条数是不同的。数据库名使用${}进行直接代替,number可以使用#{}。因为最新的数据id总是最大的,所以根据主键id进行查找速度快。

service

方法接口:

public interface HotSpotService {
    /**
     * @param hotSpot 热榜名
     * @param number 热点条数
     * @return 热点数据
     */
    public List<HotSpot> queryLastTime(String hotSpot, int number);
}

接口实现

@Service
public class HotSpotServiceImpl implements HotSpotService {
    @Autowired
    private HotSpotMapper hotSpotMapper;

    @Override
    @Cacheable(value = "HotSpotData", key="#hotSpot")
    public List<HotSpot> queryLastTime(String hotSpot, int number) {
        return hotSpotMapper.queryLastTime(hotSpot, number);
    }
}

@Service将类标记为服务,创建Bean。@Autowired进行依赖注入。@Cacheable会自动使用Redis缓存,Redis中存在缓存时不用查询数据库,没有时查询结果会放入Redis。value是cacheNames,key为自定义键,这里为热榜名称。最终在Redis中键的全名是#value::#key
Main类添加@EnableCaching

controller

@Controller
@RequestMapping("/detail")
public class GetHotSpotInfoController {
    private static Logger logger = LoggerFactory.getLogger(GetHotSpotInfoController.class);

    @Resource
    HotSpotService hotSpotService;

    @RequestMapping("/{hotSpot}")
    public String getHotSpot(@PathVariable("hotSpot") String hotSpot, ModelMap map){
        UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        String name = userDetails.getUsername();
        logger.info("用户名=" + name + "&行为=查看"+hotSpot);
        List<HotSpot> hotSpots = hotSpotService.queryLastTime(hotSpot, getNumber(hotSpot));
        List<DisplayData> displayData = new ArrayList<>();
        for(HotSpot hs: hotSpots){
            String detail = hs.getDetail();
            List<String> eachSentence = Arrays.asList(detail.split("\n"));
            displayData.add(new DisplayData(hs.getRank(), hs.getTitle(), hs.getLink(), hs.getPublicName(),
                    hs.getHotNumber(), eachSentence));
        }
        map.addAttribute("hotSpot_data", displayData);
        map.addAttribute("name", name);
        map.addAttribute("type", hotSpot);
        return "hotspot/detail";
    }

    /**
     * 获得热榜条数
     * @param hotSpot 热榜名
     * @return 条数
     */
    private int getNumber(String hotSpot){
        switch (hotSpot){
            case "weibo":
                return 50;
            case "niuke":
                return 30;
            case "hupu":
                return 20;
            case "juejin":
                return 30;
            default:
                return 20;
        }
    }
}

@RequestMapping("/{hotSpot}")可以根据热榜名进行匹配,即除去其他确定的Mapping路径,其他请求都会转到这,没有相应的热榜会报错。logger记录用户日志,用户后续分析。向Thymeleaf页面传入展示数据,用户名,热榜名。

DAO

@Data
@AllArgsConstructor
@NoArgsConstructor
public class DisplayData {
    private int rank;
    private String title;
    private String link;
    private String publicName;
    private int hotNumber;
    private List<String> eachSentence;
}

对于detail分段需要进行特殊处理。

相关文章

  • 热点平台搭建(三)——Springboot+Mybatis+My

    entity 与Mysql中表相对应: 使用lombok省略构造方法,get与set方法的编写。因为不同网站的热点...

  • 18.8.22课

    线上平台引流的主要成本是广告,线下是房租。线上平台通过直播答题、直播热点话题等方式引流,线下商场通过打折促销、搭建...

  • 热点平台搭建(四)——Springboot+Elasticsea

    使用Elasticsearch查询历史热点消息,搜索的内容包括:根据关键词搜索,可以多个关键词;根据热点标题查找历...

  • 三、ELK平台搭建

    系统环境 System:CentOS Linux 7 (Core) CPU:4核 Memory:8G Elasti...

  • Day 1 --Esther

    一、常用搜索方法 二、搭建学习平台 三、学习笔记

  • 平台(现代诗)

    平台是你 搭建的 借我 站上去 看世界 平台是你 搭建的 借我 站上去 平台是你 搭建的 借我 平台是你 搭建的 ...

  • 热点平台搭建(二)——MySQL表及Elasticsearch

    MySQL中数据表创建 有第一张表后创建其他相同类型的表: Elasticsearch mapping设置 更新I...

  • 2022-12-17

    1、需要提升的敏锐度: 1)热点敏锐度——时间节点热点、行业热点 2)平台敏锐度——了解平台规则 3)项目敏锐度—...

  • 七-模块-作业

    1 用不超过三句,说说要不要抓热点,怎么抓热点?(针对第一课所学) 一、 我是养老旅游平台,这个话题不需要抓热点。...

  • 基于宜搭的《T恤尺码收集》应用搭建

    一、产品介绍 宜搭:人人搭建、人人使用。应用搭建,从未如此简单。 宜搭平台的命名取适宜搭建、容易搭建之意。平台集合...

网友评论

      本文标题:热点平台搭建(三)——Springboot+Mybatis+My

      本文链接:https://www.haomeiwen.com/subject/mnigdhtx.html