0
点赞
收藏
分享

微信扫一扫

个人在线学习网站(第八章 阅读量点赞量功能开发)

狐沐说 2022-02-16 阅读 36

文档阅读数更新

前端点击某文档时,doc.view_count+1

在查找阅读数时+1,每当有人操作这个id,我们就对他的view_count+1

对于一些复杂的SQL或多表联查的,我们可以自己写自定义SQL
重写resource--mapper 
id是动态的,要写成#{},写${}有可能被注入的风险
->持久层 mapper
把刚才写的方法调用进来
->业务层service 

两个字段,如果不写,default 0会起作用,默认为0,如果写了,default 0不起作用,没值,默认为null

  • Mybatis的xml里的参数,使用#,尽量避免用$,会有被注入的风险

  • 更新表字段view_count +1,如果原值是空,则+1没效果,也不会报错
    update doc set view_count = view_count + 1 where id = xxx

  • insert的时候,如果写了某个字段,则该字段的default值不起作用。比如insert时没有值,是null,会使default 0失效

文档点赞功能开发

  • 前端在文档内容的下方,增加点赞按钮,点击后doc.vote_count + 1

往redis中放key

使用异步化解耦点赞通知功能

  • 使用@EnableAsync启用异步化功能

  • 同一个类里A调用B方法,B方法加异步化注解是不生效的

  • WebSocket的测试最好每次都手动刷新页面,因为后端热部署会让WS断开

  • 使用事务只需要在方法上加一个@Transactional注解,不需要加@EnableTransactionManagement

同时对两张表有增删改的操作,就要考虑加事务,否则会造成数据不准确(一表改变,另一表未改变)
SpringBoot不需要加其他的注解,只需要在需要加事务的地方,加注解@Transactional
加注解要调用这个方法,必须在其他的类里面调用(Controller里面调用Service,可以生效。在一个类里面A方法去调用B方法,B加事务注解不生效)

使用MQ解耦点赞通知功能

  • 扩展:异步化可以配上线程池,线程池满后,会变成同步

  • 一般是把不是核心的,耗时长的功能做异步化处理。

  • 异步化存在的问题:如果异步线程里的内容耗时较长,业务量又较大,就会消耗大量服务器资源,影响核心功能

  • MQ:和redis一样,是一个中间件,需要单独安装。

  • 常用的MQ有rocketmq, kafka, rabbitmq等

  • MQ关键词:topic、服务端、发送方、消费方

  • autoCreateTopicEnable的作用
    加上这个参数后,SpringBoot可发送任意的topic到RocketMQ,否则需要在RocketMQ里先创建好Topic

举报

相关推荐

0 条评论