文档阅读数更新
前端点击某文档时,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